PageRenderTime 55ms CodeModel.GetById 20ms RepoModel.GetById 0ms app.codeStats 0ms

/src/php/subsets/update.php

https://bitbucket.org/silverasm/wordseer
PHP | 483 lines | 418 code | 28 blank | 37 comment | 69 complexity | f39658e39a20990b463e25a679e68204 MD5 | raw file
Possible License(s): Apache-2.0, LGPL-3.0, BSD-3-Clause
  1. <?php
  2. /* Copyright 2012 Aditi Muralidharan. See the file "LICENSE" for the full license governing this code. */
  3. /*************************************************************************
  4. update.php
  5. Update subsets -- facilities for adding, modifying, and deleting items
  6. *************************************************************************/
  7. /** Adds the given id's to the set with the given ID.
  8. @param {Integer} id The id of the set to which the items should be added.
  9. @param {String} items A space-separated list of integer IDs for the items that
  10. should be added to the set.
  11. */
  12. function addItemToSubset($id, $items){
  13. $sql = "SELECT type from working_set where id = $id;";
  14. $result = mysql_query($sql);
  15. $row = mysql_fetch_assoc($result);
  16. $type = $row['type'];
  17. $units = explode(' ', trim($items));
  18. foreach ($units as $unit) {
  19. $unit_ids = array($unit);
  20. if ($type == 'word') {
  21. $unit_ids = getWordIDs($unit);
  22. }
  23. foreach ($unit_ids as $unit_id) {
  24. $sql = "INSERT IGNORE INTO working_set_contents
  25. (working_set_id, item_id, item_table_name)
  26. VALUES ($id, $unit_id, '$type');";
  27. $result = mysql_query($sql) or die("update.php l.19<br>
  28. <b>Fatal MySQL error</b>.
  29. <br/> Query: " . $sql . "
  30. <br/> Error: (" . mysql_errno() . ") " . mysql_error());
  31. addMetadataForSubset($unit_id, $id, $type);
  32. }
  33. }
  34. $parents = getAllParentIDs($id);
  35. foreach ($parents as $parent) {
  36. if ($parent != 0) {
  37. addItemToSubset($parent, $items);
  38. }
  39. }
  40. return array("status"=>"ok");
  41. }
  42. /** Adds the sentence metadata records that mark that an item has been added to
  43. a set.
  44. */
  45. function addMetadataForSubset($item_id, $set_id, $type) {
  46. $property_name = "";
  47. if ($type == "sentence") {
  48. $property_name = "sentence_set";
  49. } else if ($type == "word") {
  50. $property_name = "word_set";
  51. } else if ($type == "document") {
  52. $property_name = "document_set";
  53. }
  54. $property_id = updateMetadataBacklog($set_id, $type, $property_name);
  55. $sql = "SELECT property_id from metadata_structure
  56. where property_name = '$property_name';";
  57. if ($type == "sentence") {
  58. $sql = "SELECT document_id from sentence where id = $item_id;";
  59. $result = mysql_query($sql);
  60. $row = mysql_fetch_assoc($result);
  61. $document_id = $row['document_id'];
  62. $sql = "INSERT IGNORE INTO metadata
  63. (unit_id, unit_name, property_name, property_id, value, document_id)
  64. VALUES ($item_id, 'sentence', '$property_name', $property_id, '$set_id',
  65. $document_id);";
  66. $result = mysql_query($sql) or die("error inserting sentence set metadata
  67. at update.php l.61<br>
  68. <b>Fatal MySQL error</b>.
  69. <br/> Query: " . $sql . "
  70. <br/> Error: (" . mysql_errno() . ") " . mysql_error());
  71. } else if ($type == "document") {
  72. $document_id = $item_id;
  73. $sql = "INSERT IGNORE INTO metadata
  74. (unit_id, unit_name, property_name, property_id, value, document_id)
  75. VALUES
  76. ($document_id, 'document', '$property_name', $property_id,
  77. '$set_id', $document_id);";
  78. $result = mysql_query($sql) or die("error inserting
  79. document set metadata
  80. at update.php l.79<br>
  81. <b>Fatal MySQL error</b>.
  82. <br/> Query: " . $sql . "
  83. <br/> Error: (" . mysql_errno() . ") " . mysql_error());
  84. } else if ($type == "word") {
  85. $sql = "INSERT IGNORE INTO metadata
  86. (unit_id, unit_name, property_name, property_id, value, document_id)
  87. SELECT
  88. sentence_id, 'sentence', '$property_name', $property_id, '$set_id', document_id
  89. FROM sentence_xref_word
  90. WHERE word_id = $item_id;";
  91. $result = mysql_query($sql) or die("error inserting
  92. document set metadata
  93. at update.php l.79<br>
  94. <b>Fatal MySQL error</b>.
  95. <br/> Query: " . $sql . "
  96. <br/> Error: (" . mysql_errno() . ") " . mysql_error());
  97. }
  98. // update the main metadata count for this set
  99. updateMainMetadataCounts($set_id, $property_name);
  100. }
  101. function updateMainMetadataCounts($set_id, $property_name) {
  102. include_once "../document/get-metadata.php";
  103. global $main_metadata_counts_table;
  104. $sql = "DELETE from $main_metadata_counts_table
  105. WHERE property_name = '$property_name'
  106. AND (value = '$set_id' or value = 'undefined' or value = '');";
  107. $result = mysql_query($sql) or die(mysql_error()."<br>
  108. on query<br>
  109. $sql
  110. <br> made on update.php line 115");
  111. if ($property_name == "document_set") {
  112. $sql = "INSERT IGNORE INTO $main_metadata_counts_table
  113. (property_name, value, count)
  114. SELECT '$property_name',
  115. '$set_id',
  116. count(*)
  117. FROM metadata as m,
  118. sentence_xref_unit as s
  119. WHERE
  120. m.property_name = '$property_name'
  121. AND m.value = '$set_id'
  122. AND s.unit_id = m.unit_id;";
  123. $result = mysql_query($sql) or die(mysql_error()."<br>
  124. on query<br>
  125. $sql
  126. <br> made on update.php line 133");
  127. } else {
  128. $sql = "INSERT IGNORE INTO $main_metadata_counts_table
  129. (property_name, value, count)
  130. SELECT '$property_name',
  131. '$set_id',
  132. count(*)
  133. FROM metadata as m
  134. WHERE
  135. m.property_name = '$property_name'
  136. AND m.value = '$set_id'
  137. AND m.unit_name = 'sentence';";
  138. $result = mysql_query($sql) or die(mysql_error()."<br>
  139. on query<br>
  140. $sql
  141. <br> made on update.php line 150");
  142. }
  143. }
  144. if (strstr($_SERVER['REQUEST_URI'], 'update.php')) {
  145. include_once "../util.php";
  146. $wordseer_instance = getGetParam('instance');
  147. $path = '../../../instances/'.$wordseer_instance.'/config.php';
  148. include_once $path;
  149. updateMetadataBacklog("", "", "sentence_set");
  150. echo "sentence_set backlog updated ";
  151. updateMetadataBacklog("", "", "document_set");
  152. echo " document_set backlog updated";
  153. updateMetadataBacklog("", "", "word_set");
  154. echo " word_set backlog updated";
  155. }
  156. /** Adds metadatata records for items in the set that may not have been recorded
  157. as metadata, but only if the property doesn't yet exist in the metadata_structure
  158. table.
  159. @return property_id The ID of the metadata property for this set type.
  160. */
  161. function updateMetadataBacklog($set_id, $type, $property_name) {
  162. include_once "../document/get-metadata.php";
  163. global $main_metadata_counts_table;
  164. $sql = "SELECT property_id from metadata_structure
  165. WHERE property_name = '$property_name'";
  166. $unit_name = 'sentence';
  167. if ($type == "document") {
  168. $unit_name = "document";
  169. }
  170. $result = mysql_query($sql) or die("error clearing metadata backlog
  171. at update.php l.61<br>
  172. <b>Fatal MySQL error</b>.
  173. <br/> Query: " . $sql . "
  174. <br/> Error: (" . mysql_errno() . ") " . mysql_error());
  175. if (mysql_num_rows($result) == 0) {
  176. // Create the new property
  177. $sql = "INSERT INTO metadata_structure
  178. (property_name, unit_name, value_is_displayed, name_is_displayed, type, is_category)
  179. VALUES
  180. ('$property_name', '$unit_name', 0, 0, 'string', 1);";
  181. $result = mysql_query($sql) or die("error clearing metadata backlog
  182. at update.php l.72<br>
  183. <b>Fatal MySQL error</b>.
  184. <br/> Query: " . $sql . "
  185. <br/> Error: (" . mysql_errno() . ") " . mysql_error());
  186. // Get the new property ID
  187. $sql = "SELECT property_id from metadata_structure
  188. WHERE property_name = '$property_name'";
  189. $result = mysql_query($sql) or die("error clearing metadata backlog
  190. at update.php l.82<br>
  191. <b>Fatal MySQL error</b>.
  192. <br/> Query: " . $sql . "
  193. <br/> Error: (" . mysql_errno() . ") " . mysql_error());
  194. $row = mysql_fetch_assoc($result);
  195. $property_id = $row['property_id'];
  196. $sql = "SELECT id, item_table_name as type from working_set;";
  197. $res = mysql_query($sql);
  198. while ($r = mysql_fetch_assoc($res)) {
  199. // Insert the backlog for each working set.
  200. $set_id = $r['id'];
  201. $type = $r['type'];
  202. $sql = "SELECT item_id from working_set_contents
  203. WHERE working_set_id = $set_id;";
  204. $result = mysql_query($sql) or die("error clearing metadata backlog
  205. at update.php l.90<br>
  206. <b>Fatal MySQL error</b>.
  207. <br/> Query: " . $sql . "
  208. <br/> Error: (" . mysql_errno() . ") " . mysql_error());
  209. while ($row = mysql_fetch_assoc($result)) {
  210. addMetadataForSubset($row['item_id'], $set_id, $type);
  211. }
  212. }
  213. return $property_id;
  214. } else {
  215. $row = mysql_fetch_assoc($result);
  216. return $row['property_id'];
  217. }
  218. }
  219. /** Removes the given id's from the set with the given ID.
  220. @param {Integer} id The id of the set from which the items should be removed.
  221. @param {String} items A space-separated list of integer IDs for the items that
  222. should be removed to the set.
  223. */
  224. function removeItemFromSubset($id, $items){
  225. $sql = "SELECT type from working_set where id = $id;";
  226. $result = mysql_query($sql);
  227. $row = mysql_fetch_assoc($result);
  228. $type = $row['type'];
  229. $units = explode(' ', $items);
  230. foreach ($units as $unit) {
  231. $unit_ids = array($unit);
  232. if ($type == 'word') {
  233. $unit_ids = getWordIDs($unit);
  234. }
  235. foreach ($unit_ids as $unit_id) {
  236. $sql = "DELETE FROM working_set_contents
  237. WHERE working_set_id = $id
  238. AND item_id = $unit_id
  239. AND item_table_name = '$type';";
  240. $result = mysql_query($sql) or die("update.php l.19<br>
  241. <b>Fatal MySQL error</b>.
  242. <br/> Query: " . $sql . "
  243. <br/> Error: (" . mysql_errno() . ") " . mysql_error());
  244. removeMetadataForSubset($unit_id, $id, $type);
  245. }
  246. }
  247. $parents = getAllParentIDs($id);
  248. foreach ($parents as $parent) {
  249. if ($parent != 0) {
  250. removeItemFromSubset($parent, $items);
  251. }
  252. }
  253. return array("status"=>"ok");
  254. }
  255. /** Removes the sentence metadata records that mark that an item was added to
  256. a set.
  257. */
  258. function removeMetadataForSubset($item_id, $set_id, $type) {
  259. $property_name = "";
  260. if ($type == "sentence") {
  261. $property_name = "sentence_set";
  262. } else if ($type == "word") {
  263. $property_name = "_word_set";
  264. } else if ($type == "document") {
  265. $property_name = "document_set";
  266. }
  267. $property_id = updateMetadataBacklog($set_id, $type, $property_name);
  268. $sql = "SELECT property_id from metadata_structure
  269. where property_name = '$property_name';";
  270. if ($type == "sentence" || $type == "document") {
  271. $sql = "DELETE FROM metadata
  272. where unit_id = $item_id
  273. AND property_name = '$property_name'
  274. AND value = '$set_id';";
  275. $result = mysql_query($sql) or die("error inserting sentence set metadata
  276. at update.php l.61<br>
  277. <b>Fatal MySQL error</b>.
  278. <br/> Query: " . $sql . "
  279. <br/> Error: (" . mysql_errno() . ") " . mysql_error());
  280. } else if ($type == "word") {
  281. $sql = "SELECT
  282. sentence_id FROM sentence_xref_word
  283. WHERE sentence.word_id = $item_id;";
  284. $result = mysql_query($sql) or die("error inserting
  285. document set metadata
  286. at update.php l.79<br>
  287. <b>Fatal MySQL error</b>.
  288. <br/> Query: " . $sql . "
  289. <br/> Error: (" . mysql_errno() . ") " . mysql_error());
  290. while ($row = mysql_fetch_assoc($result)) {
  291. $sql = "DELETE from metadata WHERE unit_id = ".$row['id']."
  292. AND property_name = '$property_name'
  293. AND value = '$set_id'";
  294. $result = mysql_query($sql) or die("error inserting
  295. document set metadata
  296. at update.php l.79<br>
  297. <b>Fatal MySQL error</b>.
  298. <br/> Query: " . $sql . "
  299. <br/> Error: (" . mysql_errno() . ") " . mysql_error());
  300. }
  301. }
  302. // update the main metadata count for this set
  303. updateMainMetadataCounts($set_id, $property_name);
  304. }
  305. function addAnnotationToItem($username, $id, $itemType, $annotation_type, $a){
  306. $tableName = mysql_escape_string($itemType);
  307. if($itemType == "document"){
  308. $tableName = "narrative";
  309. }
  310. $documentID = -1;
  311. if($tableName == "highlight"){
  312. $sql = "SELECT * from highlight WHERE id = ".$id.";";
  313. $result = mysql_query($sql) or die("<b>Fatal MySQL error</b>.
  314. <br/> Query: " . $sql . "
  315. <br/> Error: (" . mysql_errno() . ") " . mysql_error());
  316. while($row = mysql_fetch_array($result)){
  317. $documentID = $row['narrative_id'];
  318. }
  319. }
  320. $annotation = mysql_escape_string($a);
  321. if($annotation_type == "note"){
  322. $sql = "INSERT INTO note
  323. (text, date, user)
  324. VALUES ('".$annotation."', CURDATE(), '".$username."');";
  325. $result = mysql_query($sql) or die("<b>Fatal MySQL error</b>.
  326. <br/> Query: " . $sql . "
  327. <br/> Error: (" . mysql_errno() . ") " . mysql_error());
  328. $note_id = mysql_insert_id();
  329. if($tableName == "highlight"){
  330. $sql = "INSERT INTO highlight_xref_note
  331. (highlight_id, note_id, narrative)
  332. VALUES (".$id.", ".$note_id.", ".$documentID.");";
  333. }else{
  334. $sql = "INSERT INTO item_notes_and_tags
  335. (item_id, item_table_name, annotation_table_name, annotation_id)
  336. VALUES (".$id.", '".$tableName."','note', ".$note_id.");";
  337. }
  338. }else{
  339. $sql = "INSERT IGNORE INTO tag
  340. (name)
  341. VALUES ('".$annotation."');";
  342. $result = mysql_query($sql) or die("<b>Fatal MySQL error</b>.
  343. <br/> Query: " . $sql . "
  344. <br/> Error: (" . mysql_errno() . ") " . mysql_error());
  345. $sql = "SELECT id from tag where name = '".$annotation."';";
  346. $result = mysql_query($sql) or die("<b>Fatal MySQL error</b>.
  347. <br/> Query: " . $sql . "
  348. <br/> Error: (" . mysql_errno() . ") " . mysql_error());
  349. $tag_id = -1;
  350. while($row = mysql_fetch_array($result)){
  351. $tag_id = $row['id'];
  352. }
  353. if($tableName == "highlight"){
  354. $sql = "INSERT INTO highlight_xref_tag
  355. (highlight_id, tag_id, narrative, user)
  356. VALUES (".$id.", ".$tag_id.", ".$documentID.", '".$username."');";
  357. }else{
  358. $sql = "INSERT INTO item_notes_and_tags
  359. (item_id, item_table_name, annotation_table_name, annotation_id)
  360. VALUES (".$id.", '".$tableName."','tag', ".$tag_id.");";
  361. }
  362. }
  363. $result = mysql_query($sql) or die("<b>Fatal MySQL error</b>.
  364. <br/> Query: " . $sql . "
  365. <br/> Error: (" . mysql_errno() . ") " . mysql_error());
  366. return array("status"=>"ok");
  367. }
  368. function deleteAnnotation($itemid, $itemtype, $annotationid, $annotationtype){
  369. $itemID = mysql_escape_string($itemid);
  370. $itemType = mysql_escape_string($itemtype);
  371. $itemType = ($itemType == "document")? "narrative":$itemType;
  372. $annotationID = mysql_escape_string($annotationid);
  373. $annotationType = mysql_escape_string($annotationtype);
  374. $highlight_table_name = "highlight_xref_".$annotationType;
  375. $annotation_id_field = $annotationType."_id";
  376. //delete the cross-reference
  377. if($itemType == "highlight"){
  378. $sql = "DELETE FROM ".$highlight_table_name."
  379. WHERE ".$annotation_id_field." = ".$annotationID."
  380. AND highlight_id = ".$itemID." ;";
  381. }
  382. else{
  383. $sql = "DELETE FROM item_notes_and_tags
  384. WHERE annotation_id = ".$annotationID."
  385. AND annotation_table_name = '".$annotationType."'
  386. AND item_id = ".$itemID."
  387. AND item_table_name = '".$itemType."';";
  388. }
  389. $result = mysql_query($sql) or die("<b>Fatal MySQL error</b>.
  390. <br/> Query: " . $sql . "
  391. <br/> Error: (" . mysql_errno() . ") " . mysql_error());
  392. // delete the annotation itself, if it's a note;
  393. if($itemType == "note"){
  394. $sql = "DELETE from note WHERE id = ".$annotationID.";";
  395. $result = mysql_query($sql) or die("<b>Fatal MySQL error</b>.
  396. <br/> Query: " . $sql . "
  397. <br/> Error: (" . mysql_errno() . ") " . mysql_error());
  398. }
  399. return array("status"=>"ok");
  400. }
  401. function editNote($noteID, $newText){
  402. $sql = "UPDATE note SET text = '".mysql_escape_string($newText)."'
  403. WHERE id = ".mysql_escape_string($noteID).";";
  404. $result = mysql_query($sql) or die("<b>Fatal MySQL error</b>.
  405. <br/> Query: " . $sql . "
  406. <br/> Error: (" . mysql_errno() . ") " . mysql_error());
  407. return array("status"=>"ok");
  408. }
  409. function renameSubset($id, $newName){
  410. $sql = "UPDATE working_set SET name = '".mysql_escape_string($newName)."' WHERE id = ".mysql_escape_string($id).";";
  411. $result = mysql_query($sql) or die("<b>Fatal MySQL error</b>.
  412. <br/> Query: " . $sql . "
  413. <br/> Error: (" . mysql_errno() . ") " . mysql_error());
  414. return array("status"=>"ok");
  415. }
  416. function moveSubset($id, $newParent){
  417. $sql = "UPDATE working_set SET parent = '".mysql_escape_string($newParent)."' WHERE id = ".mysql_escape_string($id).";";
  418. $result = mysql_query($sql) or die("<b>Fatal MySQL error</b>.
  419. <br/> Query: " . $sql . "
  420. <br/> Error: (" . mysql_errno() . ") " . mysql_error());
  421. $sql = "SELECT type from working_set where id = $id;";
  422. $result = mysql_query($sql);
  423. $row = mysql_fetch_assoc($result);
  424. $type = $row['type'];
  425. $sql = "SELECT * from working_set_contents = where working_set_id = $id";
  426. $result = mysql_query($sql) or die("<b>Fatal MySQL error</b>.
  427. update.php l. 415<br/> Query: " . $sql . "
  428. <br/> Error: (" . mysql_errno() . ") " . mysql_error());
  429. while ($row = mysql_fetch_assoc($result)) {
  430. $item = $row['item_id'];
  431. if ($type == 'word') {
  432. $item = getWord($item);
  433. }
  434. removeItemFromSubset($id, $item);
  435. addItemToSubset($id, $item);
  436. }
  437. return array("status"=>"ok");
  438. }
  439. function mergeSubsetInto($id, $mergeInto){
  440. $sql = "UPDATE working_set_contents SET working_set_id =".mysql_escape_string($mergeInto)."
  441. WHERE working_set_id = ".mysql_escape_string($id).";";
  442. $result = mysql_query($sql) or die("<b>Fatal MySQL error</b>.
  443. <br/> Query: " . $sql . "
  444. <br/> Error: (" . mysql_errno() . ") " . mysql_error());
  445. $sql = "DELETE from working_set WHERE id = ".mysql_escape_string($id).";";
  446. $result = mysql_query($sql) or die("<b>Fatal MySQL error</b>.
  447. <br/> Query: " . $sql . "
  448. <br/> Error: (" . mysql_errno() . ") " . mysql_error());
  449. return array("status"=>"ok");
  450. }
  451. ?>