comparison models/extractapp.php @ 94:b0cecc104639 extractapp

new: modified tags can work on tagged text
author Zoe Hong <zhong@mpiwg-berlin.mpg.de>
date Mon, 09 Nov 2015 12:00:24 +0100
parents 3e11a9c5a672
children 9a29e9d28ece
comparison
equal deleted inserted replaced
93:a05491461199 94:b0cecc104639
248 return true; 248 return true;
249 249
250 } 250 }
251 251
252 // === for tagging === 252 // === for tagging ===
253 private function ReplaceLgTextWithLatestTag() {
254 // modify $this->lg_text with the latest tags from database
255 // can do it by getting the tag's id using tag's information in the file, then by the id to get latest tag (in db)
256 $lg_text = $this->lg_text;
257
258 $taglist_indb = $this->GetTaglistByTopicId($this->GetTopic());
259 $taglist_infile = $this->taglist_infile;
260
261 if ($taglist_infile == "") return;
262
263 $count_tag_indb = count($taglist_indb);
264
265 foreach ($taglist_infile as $t1) {
266 $id = $t1[0];
267 $tag = $t1[2];
268 $latest_tag = "";
269
270 $cnt = 0;
271 foreach ($taglist_indb as $t2) {
272 if ($t2[0] == $id) {
273 $latest_tag = $t2[2];
274 }
275
276 if ($tag != $t2[2]) {
277 // not match with this t2
278 $cnt += 1;
279 } else {
280 break;
281 }
282
283 }
284 if ($cnt == $count_tag_indb) {
285 if ($latest_tag == "") {
286 // tag has been deleted in the db
287 // delele the tag in $this->lg_text
288 //echo "tag been deleted";
289
290 $lg_text = preg_replace("/<\/".$tag.">/u", "", $lg_text);
291 $lg_text = preg_replace("/<".$tag.">/u", "", $lg_text);
292
293 } else {
294 // replace all tags $tag into $latest_tag in $this->lg_text
295 //echo "replace tag: ".$tag." into ".$latest_tag."<br>";
296 $lg_text = preg_replace("/".$tag."/u", $latest_tag, $lg_text);
297 }
298 }
299 }
300
301
302 $this->lg_text = $lg_text;
303
304 }
253 public function StartTagging() { 305 public function StartTagging() {
254 /** 306 /**
255 * This is the main method for tagging text. It passes all the information to "views/Extractapp/TaggingText.php" view. 307 * This is the main method for tagging text. It passes all the information to "views/Extractapp/TaggingText.php" view.
256 * The information contain the text string, taglist array, wordlis array, topic, etc. 308 * The information contain the text string, taglist array, wordlis array, topic, etc.
257 */ 309 */
258 310
259 $section_id = $this->section_id; 311 $section_id = $this->section_id;
260 $stringInput = $this->lg_text; 312
261
262 $data = array(); // data array to be passed to view 313 $data = array(); // data array to be passed to view
263 314
264 //$taglistArray = $this->GetTaglistArray();
265 //for GetTaglistByTopicId: 315 //for GetTaglistByTopicId:
266 $taglistArray = $this->GetTaglistByTopicId($this->GetTopic()); 316 $taglistArray = $this->GetTaglistByTopicId($this->GetTopic());
267 317
268 // $this->taglist_infile is set (1) from file or (2) from _postdata['taglistArray'] which comes from frontend that user decided 318 // $this->taglist_infile is set (1) from file or (2) from _postdata['taglistArray'] which comes from frontend that user decided
269 // $this->taglist_infile is the most up-to-date taglist decided by user. Should be written into file. 319 // $this->taglist_infile is the most up-to-date taglist decided by user. Should be written into file.
270 if( $this->TaglistSubsetIn($this->taglist_infile, $taglistArray) ) { // TaglistSubsetIn($l1,$l2): $l1 is a subset of $l2 or not 320 if( $this->TaglistSubsetIn($this->taglist_infile, $taglistArray) ) { // TaglistSubsetIn($l1,$l2): $l1 is a subset of $l2 or not
271 $this->taglist_infile = ""; 321 $this->taglist_infile = "";
272 } 322
323 } else {
324 // taglist_infile is out-to-date
325 // replace all the old tag with new ones in database
326 // replace old tags for $this->lg_text with the latest tags from db
327 $this->ReplaceLgTextWithLatestTag();
328
329 }
330 $stringInput = $this->lg_text;
331
332
273 $data['taglist_infile'] = $this->taglist_infile; // if taglist_infile == "" means taglist in file is up-to-date (will use taglist in db), otherwise means the taglist in file 333 $data['taglist_infile'] = $this->taglist_infile; // if taglist_infile == "" means taglist in file is up-to-date (will use taglist in db), otherwise means the taglist in file
274
275 334
276 // book_meta 335 // book_meta
277 $data['book_meta'] = $this->book_meta; 336 $data['book_meta'] = $this->book_meta;
278 337
279 // topic list 338 // topic list
422 $text .= "</section>\n"; 481 $text .= "</section>\n";
423 482
424 // ---- taglist --- 483 // ---- taglist ---
425 // $taglist = $this->taglist_infile; 484 // $taglist = $this->taglist_infile;
426 // obtain the latest taglist from db 485 // obtain the latest taglist from db
486 // TDOO: possible bug: when taglist is modified by other user, the latest taglist from db of course will be changed.
487 // As the result, here the taglist we get from db will be inconsistent with the tag in file.
488 // which means the information in <tagitem> nodes are inconsistent with the text in <text_content> node.
489
427 $taglist = $this->GetTaglistByTopicId($this->GetTopic()); 490 $taglist = $this->GetTaglistByTopicId($this->GetTopic());
428 491
429 foreach ($taglist as $tagitem) { 492 foreach ($taglist as $tagitem) {
430 $text .= "<tagitem>\n"; 493 $text .= "<tagitem>\n";
431 $text .= "<id>".$tagitem[0]."</id>\n"; 494 $text .= "<id>".$tagitem[0]."</id>\n";
873 936
874 } 937 }
875 938
876 public function DeleteTag($postdata) { 939 public function DeleteTag($postdata) {
877 if ($postdata['id']) { 940 if ($postdata['id']) {
878 $queryInsert = sprintf("DELETE FROM `taglist` WHERE `id` = %s", stripslashes($postdata['id'])); 941 $tag_id = $postdata['id'];
879 $resultInsert = mysql_query($queryInsert); 942
880 } 943 // delete record in 'taglist' table
881 944 $query = sprintf("DELETE FROM `taglist` WHERE `id` = %s", stripslashes($tag_id));
945 $result = mysql_query($query);
946
947 // delete record in 'topic_tag_relation' table
948 $topic_id = $postdata['topic_id'];
949 $query = sprintf("DELETE FROM `topic_tag_relation` WHERE `tag_id` = %s and `topic_id` = %s", stripslashes($tag_id), stripcslashes($topic_id));
950 $result = mysql_query($query);
951
952 }
953
882 } 954 }
883 955
884 // === for config topic === 956 // === for config topic ===
885 public function ConfigTagsInTopic($postdata) { 957 public function ConfigTagsInTopic($postdata) {
886 /** 958 /**
972 $data['tag_others'] = $tag_others; 1044 $data['tag_others'] = $tag_others;
973 1045
974 return $data; 1046 return $data;
975 } 1047 }
976 1048
1049 public function CreateNewTopic($_postdata) {
1050
1051
1052 }
977 1053
978 public function UpdateTagsInTopic($_postdata) { 1054 public function UpdateTagsInTopic($_postdata) {
979 $topic_id = $_postdata['topic_id']; 1055 $topic_id = $_postdata['topic_id'];
980 $tag_ids = json_decode(str_replace('\\', '', $_postdata['ids'])); 1056 $tag_ids = json_decode(str_replace('\\', '', $_postdata['ids']));
981 1057
1305 if ($book_metaArray) { 1381 if ($book_metaArray) {
1306 $this->book_meta = $book_metaArray; 1382 $this->book_meta = $book_metaArray;
1307 } 1383 }
1308 */ 1384 */
1309 // ----- 1385 // -----
1310 // TODO: get section_id, section_name from file 1386 // get section_id, section_name from file
1311 if ($this->section_id == 0 && isset($xml->section)) { 1387 if ($this->section_id == 0 && isset($xml->section)) {
1312 if ($xml->section) { 1388 if ($xml->section) {
1313 $this->section_id = (string)$xml->section->id; 1389 $this->section_id = (string)$xml->section->id;
1314 $this->section_name = (string)$xml->section->name; 1390 $this->section_name = (string)$xml->section->name;
1315 } 1391 }
1324 1400
1325 $contentString = (string)($xml->text_content->asXML()); 1401 $contentString = (string)($xml->text_content->asXML());
1326 1402
1327 $removed_str = array("<text_content>","</text_content>"); 1403 $removed_str = array("<text_content>","</text_content>");
1328 $new_contentString = str_replace($removed_str, "", $contentString); 1404 $new_contentString = str_replace($removed_str, "", $contentString);
1405
1329 1406
1330 return $new_contentString; 1407 return $new_contentString;
1331 } 1408 }
1332 1409
1333 1410