diff models/extractapp.php @ 47:886f43b26ee2 extractapp

move/remove develop folder
author Zoe Hong <zhong@mpiwg-berlin.mpg.de>
date Tue, 17 Mar 2015 10:54:13 +0100
parents
children c98a0c6d7eb4
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/models/extractapp.php	Tue Mar 17 10:54:13 2015 +0100
@@ -0,0 +1,1343 @@
+
+
+<?php
+
+class ExtractappModel extends BaseModel{
+    
+	public function Index() {
+		return array("Index Value 1", "Value 2", "Value 3");
+	}
+    
+    protected $section_id = 0, $data_path, $file_id = 0, $current_fileId=0, 
+        $branch_id = 0, $user_id = 0, $lg_text = "", $topic, $taglist_infile = "", $book_meta = "";
+    public $messages = "";
+
+    private function Initialize($_urlvalues) {
+        $this->SetSectionId($_urlvalues);
+
+    }
+
+    public function GetTextFromFileId($_postdata) {
+        $this->file_id = $_postdata['fileId'];
+        $branch_id = $_postdata['branchId'];
+        $section_id = $_postdata['sectionId'];
+
+        $this->branch_id = $branch_id;
+        $this->user_id = $_postdata['userId'];
+        $this->section_id = $section_id;
+
+        $this->section_name = $_postdata['sectionName'];
+        $this->book_id = $_postdata['bookId'];
+        $this->book_name = $_postdata['bookName'];
+
+        // get from URL with file_id
+        $lg_text_url = $this->get_text_from_fileId_url.$this->file_id;
+        //$lg_text = file_get_contents($lg_text_url);
+        // --- parsing meta data
+        $lg_text = $this->ParseMetaData($lg_text_url);
+
+        // ----
+
+
+        $stringInput = $lg_text;
+        $stringInput = preg_replace("/ /u", "○", $stringInput);
+        $stringInput = preg_replace("/\n/u", "<br>", $stringInput);
+        $stringInput = preg_replace("/【(.*?)】/u", "【<a href=\"review_index_xml_images.php?books_id=".$bookId."&pages=\\1&entry=0\" target=\"_bookImg\">\\1</a>】", $stringInput);
+        $lg_text = $stringInput;
+
+        $this->lg_text = $lg_text;
+
+    }
+
+    public function GetTextFromSectionId($_postdata) {
+        $section_id = $_postdata['sectionId'];
+        $this->section_id = $section_id;
+        $this->user_id = $_postdata['userId'];
+
+        $this->section_name = $_postdata['sectionName'];
+        $this->book_id = $_postdata['bookId'];
+        $this->book_name = $_postdata['bookName'];
+
+        // get from URL with file_id
+        $lg_text_url = $this->get_text_from_sectionId_url.$section_id;
+        $lg_text = file_get_contents($lg_text_url);
+
+        $stringInput = $lg_text;
+        $stringInput = preg_replace("/<(.*?)>/u", "○", $stringInput);
+        $stringInput = preg_replace("/ /u", "○", $stringInput);
+        $stringInput = preg_replace("/\n/u", "<br>", $stringInput);
+        $stringInput = preg_replace("/【(.*?)】/u", "【<a href=\"review_index_xml_images.php?books_id=".$bookId."&pages=\\1&entry=0\" target=\"_bookImg\">\\1</a>】", $stringInput);
+        $lg_text = $stringInput;
+
+        $this->lg_text = $lg_text;
+    }
+
+    public function GetTextFromLocal($_id){
+        $this->section_id = $_id;
+        $this->messages .= "DEBUG: from my local"."<br>";
+        $this->lg_text = $this->GetSectionContent();
+
+    }
+
+    public function GetInfoFromPreviousPage($_postdata) {
+
+        if ($_postdata['fileId']) {
+            $this->file_id = $_postdata['fileId'];
+        }
+        if ($_postdata['sectionId']) {
+            $this->section_id = $_postdata['sectionId'];
+        }
+        if ($_postdata['text']) {
+            $this->lg_text = $_postdata['text'];
+        }
+        if ($_postdata['branchId']) {
+            $this->branch_id = $_postdata['branchId'];
+        }
+        if ($_postdata['userId']) {
+            $this->user_id = $_postdata['userId'];
+        }
+        if ($_postdata['topic_id']) {
+            $this->topic = $_postdata['topic_id'];
+        }
+
+        if ($_postdata['sectionName']) {
+            $this->section_name = $_postdata['sectionName'];
+        }
+        if ($_postdata['bookName']) {
+            $this->book_name = $_postdata['bookName'];
+        }
+        if ($_postdata['bookId']) {
+            $this->book_id = $_postdata['bookId'];
+        }
+        if ($_postdata['currentFileId']) {
+            $this->current_fileId = $_postdata['currentFileId'];
+        }
+        if ($_postdata['taglistArray']) {
+            $this->taglist_infile = json_decode($_postdata['taglistArray']);
+        }
+        if ($_postdata['book_meta']) {
+            $this->book_meta = json_decode($_postdata['book_meta']);
+        }
+
+    }
+    public function InitData($_postdata) {
+        $file_id = $_postdata['fileId'];
+        $branch_id = $_postdata['branchId'];
+        $section_id = $_postdata['sectionId'];
+
+        $this->branch_id = $branch_id;
+        $this->file_id = $file_id;
+        $this->user_id = $_postdata['userId'];
+        $this->section_id = $section_id;
+        
+        if ($file_id != 0 && $branch_id != 0) {
+            // get from URL with file_id
+            $lg_text_url = $this->get_text_from_fileId_url.$file_id;
+        } else if ($section_id != 0) {
+            // get from URL with section_id
+            $lg_text_url = $this->get_text_from_sectionId_url.$section_id;
+        } else {
+            echo "wrong url!!";
+            return;
+        }
+       
+
+        $lg_text = file_get_contents($lg_text_url);
+
+        /*
+        $stringInput = preg_replace("/ /u", "○", $stringInput);
+        $stringInput = preg_replace("/\n/u", "<br>", $stringInput);
+        $stringInput = preg_replace("/【(.*?)】/u", "【<a href=\"review_index_xml_images.php?books_id=".$bookId."&pages=\\1&entry=0\" target=\"_bookImg\">\\1</a>】", $stringInput);
+        */
+
+        // the text is from database
+        $stringInput = $lg_text;
+        $stringInput = preg_replace("/<(.*?)>/u", "○", $stringInput);
+        $stringInput = preg_replace("/ /u", "○", $stringInput);
+        $stringInput = preg_replace("/\n/u", "<br>", $stringInput);
+        $stringInput = preg_replace("/【(.*?)】/u", "【<a href=\"review_index_xml_images.php?books_id=".$bookId."&pages=\\1&entry=0\" target=\"_bookImg\">\\1</a>】", $stringInput);
+        $lg_text = $stringInput;
+
+        $this->lg_text = $lg_text;
+        
+
+    }
+    /*
+    public function Reload($_postdata) {
+
+        // update text using $this->current_fileId
+        // getTextbyFileId
+        $current_fileId = $_postdata['currentFileId'];
+        //$this->file_id = $_postdata['currentFileId'];
+        //$this->GetTextFromFileId($_postdata);
+        //$latest_editing = $this->lg_text;
+        // get from URL with file_id
+
+        $lg_text_url = $this->get_text_from_fileId_url.$current_fileId;
+        $lg_text = file_get_contents($lg_text_url);
+
+        $stringInput = $lg_text;
+        $stringInput = preg_replace("/ /u", "○", $stringInput);
+        $stringInput = preg_replace("/\n/u", "<br>", $stringInput);
+        $stringInput = preg_replace("/【(.*?)】/u", "【<a href=\"review_index_xml_images.php?books_id=".$bookId."&pages=\\1&entry=0\" target=\"_bookImg\">\\1</a>】", $stringInput);
+        $lg_text = $stringInput;
+
+
+        //var_dump($lg_text);
+
+        echo json_encode($lg_text);
+        //var_dump($this->file_id);
+
+    }
+    */
+
+
+    // TODO: comparison not correct
+    private function Taglist_infileUpToDate($taglistArray) {
+        // compare $this->taglist_infile is the same as $taglistArray
+        $taglist_infile = $this->taglist_infile;
+        if (count($taglist_infile) != count($taglistArray)) {
+            return false;
+        }
+
+        foreach ($taglistArray as $row_indb) {
+            $cnt = 0;
+            foreach ($taglist_infile as $row) {
+                //$taglistArray: array( $row['id'], $row['name'], $row['tag'], $row['color'] )
+                if ($row[0] == $row_indb[0] && $row[1] == $row_indb[1] && $row[2] == $row_indb[2] && $row[3] == $row_indb[3]) {
+
+                } else {
+                    $cnt ++;
+                }
+            }
+            if ($cnt == count($row)) {
+                return false;
+            }
+        }
+        return true;
+    }
+    // === for tagging ===
+    public function StartTagging() {
+       
+        $section_id = $this->section_id;
+        $stringInput = $this->lg_text;
+
+        $data = array();    // data array to be passed to view
+
+        //$taglistArray = $this->GetTaglistArray();
+        //for GetTaglistByTopicID: 
+        $taglistArray = $this->GetTaglistByTopicID($this->GetTopic());
+        
+        $data['taglist_infile'] = $this->taglist_infile;
+        // TODO: check if taglist_infile is up-to-date
+        /*
+        if ( !$this->Taglist_infileUpToDate($taglistArray)) {
+            $data['taglist_infile'] = $this->taglist_infile;
+        } else {
+            $data['taglist_infile'] = "";
+        }
+        */
+        
+        // book_meta
+        $data['book_meta'] = $this->book_meta;
+
+        // topic list
+        $topiclistArray = $this->GetTopiclistArray();
+
+
+        $wordlistArray = $this->GetWordlistArray();
+
+        $data['stringInput'] = $stringInput;
+        $data['taglistArray'] = $taglistArray;
+        $data['wordlistArray'] = $wordlistArray;
+        $data['section_id'] = $section_id;
+        $data['topiclistArray'] = $topiclistArray;
+        $data['default_topic_id'] = $this->GetTopic();
+        $data['topic_tag'] = $this->GetTopicTag($this->GetTopic());
+        $data['topic_name'] = $this->GetTopicName($this->GetTopic());
+
+
+        $data['info'] = array('file_id'=>$this->file_id, 'user_id'=>$this->user_id,
+                'branch_id'=>$this->branch_id, 'section_id'=>$this->section_id, 'book_id'=>$this->book_id, 
+                'book_name'=>$this->book_name, 'section_name'=>$this->section_name,
+                'current_fileId'=>$this->current_fileId);
+                //'current_fileId'=>$this->file_id);
+                //'current_fileId'=>'123');
+
+        $this->messages .= "Info: ";
+        $this->messages .= "file_id=".$this->file_id.", section_id=".$this->section_id;
+        $this->messages .= ", user_id=".$this->user_id.", branch_id=".$this->branch_id.", topic_id=".$this->topic;
+        $this->messages .= ", book_id=".$this->book_id.", book_name=".$this->book_name.", section_name=".$this->section_name;
+        $this->messages .= ", current_fileId=".$this->current_fileId."<br>";
+
+        $data['messages'] = $this->messages;
+
+        return $data;
+        
+    }
+
+    public function SaveFullText($postdata) {
+        if ($postdata['text']){
+            $date = date('Y_m_d_H_i_s', time());
+            if ( file_exists("data/parsing_files/".$postdata['filename'].".txt") ) {
+                $oldFile = file_get_contents("data/parsing_files/".$postdata['filename'].".txt");
+                file_put_contents("data/parsing_files/".$postdata['filename']."_".$date.".txt", $oldFile);
+            }
+            
+            if (get_magic_quotes_gpc()) {
+                $require = stripslashes($postdata['text']);
+            } else {
+                $require = $postdata['text'];
+            }
+            
+            $require = preg_replace("/【<a(.*?)>(.*?)<\/a>】/u", "【\\2】", $require);
+            $require = preg_replace('/&amp;/u', "&", $require); 
+            $require = preg_replace("/○/u", " ", $require); 
+            $require = preg_replace("/<br>/u", "\n", $require);
+            $require = preg_replace("/<br>/u", "\n", $require);
+            file_put_contents("data/parsing_files/".$postdata['filename'].".txt", $require);
+        }
+
+    }
+
+    public function UpdateInfoByResponseFromLGService($response) {
+         
+        /*
+        $response_file = $response["file"];
+        $response_branch = $response["branch"];
+
+        
+        $status = (string)$response["status"];
+
+        if ((string)$response["status"] == "error") {
+            $response_currentFile = $response["currentFile"];
+    
+            $this->current_fileId = (string)$response_currentFile['id'];
+            $this->messages .= "saving does not success! ".(string)$response["message"];
+
+            
+        } else {
+           
+            $this->messages .= "saving success.";
+            var_dump((string)$response_file["id"]);
+
+            $this->file_id = (string)$response_file["id"]; 
+            $this->branch_id = (string)$response_branch["id"];
+
+        }
+        */
+
+        
+        $response_file = $response["file"];
+        $response_branch = $response["branch"];
+
+        $status = (string)$response["status"];
+        if ($status == "ok") {
+            $this->messages .= "saving success.";
+            $this->file_id = (string)$response_file["id"]; 
+            $this->branch_id = (string)$response_branch["id"];
+
+        } else if ($status == "error") {
+            // saving not success
+            $this->messages .= "saving does not success! ".(string)$response["message"];
+            $response_currentFile = $response["currentFile"];
+            //$this->current_fileId = $response["currentFileId"];
+            $this->current_fileId = (string)$response_currentFile["id"];
+
+        }
+        
+
+    }
+    private function AppendMetaData($text_content) {
+        $text = '<?xml version="1.0" encoding="UTF-8"?>';
+        $text .= "\n<text>\n";
+        // topic
+        $text .= "<topic>".$this->topic."</topic>\n";
+        // book meta data
+        $book = $this->book_meta;
+        foreach ($book as $b) {
+            $text .= "<book>\n";
+            $text .= "<title>".$b[0]."</title>\n";
+            $text .= "<author>".$b[1]."</author>\n";
+            $text .= "<year>".$b[2]."</year>\n";
+            $text .= "<pagenumber>".$b[3]."</pagenumber>\n";
+            $text .= "</book>\n";
+        }
+        // taglist
+        $taglist = $this->taglist_infile;
+        foreach ($taglist as $tagitem) {
+            $text .= "<tagitem>\n";
+            $text .= "<id>".$tagitem[0]."</id>\n";
+            $text .= "<name>".$tagitem[1]."</name>\n";
+            $text .= "<tag>".$tagitem[2]."</tag>\n";
+            $text .= "<color>".$tagitem[3]."</color>\n";
+            $text .= "</tagitem>\n";
+        }
+        
+        // text_content
+        $text .= $text_content;
+        $text .= "\n</text>";
+
+        return $text;
+    }
+    public function SaveFullTextToLGService($_postdata) {
+        // save tagged text (full text) by Jorge's API to lg service
+
+        // --------
+        if ($_postdata['text']){
+            $date = date('Y_m_d_H_i_s', time());
+            if ( file_exists("data/parsing_files/".$_postdata['sectionId'].".txt") ) {
+                $oldFile = file_get_contents("data/parsing_files/".$_postdata['sectionId'].".txt");
+                //saving in my local machine in developing phrase
+                file_put_contents("data/parsing_files/".$_postdata['sectionId']."_".$date.".txt", $oldFile);
+            }
+            
+            if (get_magic_quotes_gpc()) {
+                $require = stripslashes($_postdata['text']);
+            } else {
+                $require = $_postdata['text'];
+            }
+ 
+            $require = preg_replace("/【<a(.*?)>(.*?)<\/a>】/u", "【\\2】", $require);
+            $require = preg_replace('/&amp;/u', "&", $require); 
+            $require = preg_replace("/○/u", " ", $require); 
+            $require = preg_replace("/<br>/u", "\n", $require);
+            //$require = preg_replace("/<br>/u", "\n", $require);
+
+            if ($_postdata['branchId'] == 0) {
+                // -- new branch case
+                $require = "<text_content>\n".$require."</text_content>\n";
+            }
+            $require = $this->AppendMetaData($require);
+                
+            //saving in my local machine in developing phrase
+            file_put_contents("data/parsing_files/".$_postdata['sectionId'].".txt", $require);
+        } 
+
+        // ------
+
+
+        if ($_postdata['branchId'] != 0) {
+            // -- exiting branch case
+            $postfields = array(
+                "text" => $require, 
+                "branchId" => $_postdata['branchId'],
+                "userId" => $_postdata['userId'],
+                "userPreviousFileId" => $_postdata['fileId'],
+            );  
+            $save_url = $this->save_to_LGService_url;     
+
+        } else {
+            // -- new branch case
+            echo "saveNew!";
+            $user_id = "0";
+            if ($_postdata['userId']) {
+                $user_id = $_postdata['userId'];
+            }
+            
+            $postfields = array(
+                "text" => $require, 
+                "sectionId" => $_postdata['sectionId'],
+                "userId" => $user_id,
+                "label" => $_postdata['label'],
+            ); 
+            $save_url = $this->save_new_to_LGService_url;
+        }   
+
+        
+        // set up the curl resource
+        $ch = curl_init();
+        curl_setopt($ch, CURLOPT_URL, $save_url);
+        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
+        curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
+        curl_setopt($ch, CURLOPT_POST, true);
+        curl_setopt($ch, CURLOPT_POSTFIELDS, $postfields);
+        //curl_setopt($ch, CURLOPT_HEADER, true);
+        curl_setopt($ch, CURLOPT_HTTPHEADER, array(                                                                          
+            'Content-type: multipart/form-data;charset=utf-8'                                                          
+        ));       
+
+        // execute the request
+        // **** commended to DEBUG ***
+        //$output = curl_exec($ch);
+        // *****
+
+        // output the profile information - includes the header
+        //echo($output) . PHP_EOL;
+
+        // close curl resource to free up system resources
+        curl_close($ch);
+        
+        $response = json_decode($output, true);
+        return $response;
+
+    }
+
+    // --- for regex ----
+    public function GetRegexFilenameById($topic_id) {
+        $query = sprintf("SELECT regex_filename FROM `topic_regex_relation` WHERE  topic_id=\"%s\"", $topic_id);
+        $result = mysql_query($query);
+        if (!$result) {
+            return json_encode("Failed during selecting topic_regex_relation table.");
+        }
+
+        $filenames = array();
+        while ($row = mysql_fetch_assoc($result)) {
+            array_push($filenames, $row['regex_filename']);
+        }
+
+        return $filenames;
+    }
+    public function SmartRegexLoad($topic_id) {
+
+        // Load regex file based on current topic. Only shows the regex in this topic --
+        $filenames = $this->GetRegexFilenameById($topic_id);
+        
+        // Get regex file from filesystem ----
+        $data_path = "./data/"; // get the current file path, which is getcwd(), and concatenate with "/data/"
+        $returnArray = array();
+        $files1 = scandir($data_path."regex_files");
+        foreach ( $files1 as $file ) {
+            if ( $file != "." && $file != ".." && $file != ".DS_Store") {
+                foreach ($filenames as $filename) {
+                    if ($file == $filename) {
+                        $returnArray[preg_replace("/\.txt/", "", $file)] = file_get_contents( $data_path."regex_files/".$file );
+                        break;
+                    }
+                }
+            }
+        }
+        echo json_encode($returnArray);
+        return;
+    }
+
+
+    public function SmartRegexSave($_postdata) {
+        if ($_postdata['text']){
+
+            // --- update topic_regex_relation table ---
+            $topic_id = $_postdata['topic_id'];
+            $filename = $_postdata['filename'].'.txt';
+            
+            // check if already existing a record for this regex file
+            $query = "SELECT * FROM topic_regex_relation WHERE topic_id=".$topic_id." AND regex_filename='".$filename."'";
+            $result = mysql_query($query);
+            if (!$result) {
+                echo json_encode("ErrorDB");
+            }
+            while ($row = mysql_fetch_assoc($result)) {
+                if ($row && !$_postdata['forcesave']) {
+                    // promt user a comfirm to force saving or not
+                    echo json_encode("ForceSave");
+                    return;
+                }
+            } 
+
+        
+            if (!$_postdata['forcesave']) {
+                $query = "INSERT INTO topic_regex_relation (topic_id, regex_filename) VALUES (".$topic_id.",'".$filename."')";
+                $result = mysql_query($query);
+                if (!$result) {
+                    echo json_encode("ErrorDB");
+                }
+            } 
+            // --- write to filesystem ---
+            
+            /*
+            $date = date('Y_m_d_H_i_s', time());
+            if ( file_exists("regex_files/".$_POST['filename'].".txt") ) {
+                $oldFile = file_get_contents("regex_files/".$_POST['filename'].".txt");
+                file_put_contents("regex_files/".$_POST['filename']."_".$date.".txt", $oldFile);
+            }
+            */
+            $data_path = "./data/"; // get the current file path, which is getcwd(), and concatenate with "/data/"
+            
+            if (get_magic_quotes_gpc()) {
+                $require = stripslashes($_postdata['text']);
+            } else {
+                $require = $_postdata['text'];
+            }
+
+            file_put_contents( $data_path."regex_files/".$_postdata['filename'].".txt", $require);   
+
+
+        }
+    }
+
+
+    // === for export table ===
+    public function ExportTable($postdata) {
+        // $this->Initialize($urlvalues);
+
+        $content = $postdata['content'];
+        $topic = $postdata['topic'];
+        $section_id = $postdata['sectionId'];
+
+        //$section_id = $this->section_id;
+        
+
+        // TODO: this should be get from LGService: sectionName, bookId, bookName
+        $sectionName = $postdata['sectionName'];
+        $bookId = $postdata['bookId'];
+        $bookName = $postdata['bookName'];
+
+
+        // --- replace if get info from LGService
+        /*
+        $section_info = $this->GetSectionInfo();
+
+        $sectionName = $section_info['sectionName'];
+        $bookId = $section_info['bookId'];
+
+        $books_info = $this->GetBooksInfo($bookId);
+        $bookName = $books_info['bookName'];
+        */
+        // =====
+
+
+        $outputTableArray = array();
+
+        //$taglistArray = $this->GetTaglistArray();
+        $taglistArray = $this->GetTaglistByTopicID($topic);
+
+        $outputTableArray[0]=array();
+        $outputTableArray[0][0]=array();
+        $outputTableArray[0][1]=array();
+        foreach ( $taglistArray as $value ) {
+            $outputTableArray[0][0][$value[2]] = $value[1];
+            $outputTableArray[0][1][$value[2]] = $value[1]."(Title)";
+        }
+        $outputTableArray[0]["other"] = "其他";
+        $outputTableArray[0]["page"] = "頁數";
+        $outputTableArray[0]["full"] = "全文";
+
+        foreach ( $taglistArray as $tagValue ) {
+            $content = preg_replace("/<\/".$tagValue[2].">○*<".$tagValue[2].">/u", "", $content);
+            $content = preg_replace("/<".$tagValue[2].">[ ]*<\/".$tagValue[2].">/u", "", $content);
+        }
+
+        $contentLineArray = explode( "<br>", $content );
+
+        $count=0;
+        $pageNow=NULL;
+        foreach ( $contentLineArray as $value ) {
+            $count++;
+            $recordString = $value;
+            $otherString = $recordString;
+            //echo $recordString."<br>\n";
+            if ( preg_match("/【<a(.*?)>(.*?)<\/a>】/u", $recordString, $matches) ) {
+                $pageNow = $matches[2];
+            }
+            foreach ( $taglistArray as $tagValue ) {
+                if ( preg_match_all("/<".$tagValue[2].">(.*?)<\/".$tagValue[2].">/u", $recordString, $matches, PREG_SET_ORDER) ) {
+                    foreach ( $matches as $matchesValue ) {
+                        $matchesValue[1] = preg_replace("/○/u", "", $matchesValue[1]);
+                        if ( preg_match_all("/〈(.*?)〉/u", $matchesValue[1], $matches2, PREG_SET_ORDER) ) {
+                            foreach ( $matches2 as $matches2Value ) {
+                                if ( isset($outputTableArray[$count][0][$tagValue[2]]) ) {
+                                    $outputTableArray[$count][0][$tagValue[2]] .= ";".$matches2Value[1];
+                                } else {
+                                    $outputTableArray[$count][0][$tagValue[2]] = $matches2Value[1];
+                                }
+                            }
+                        } else {
+                            if ( isset($outputTableArray[$count][0][$tagValue[2]]) ) {
+                                $outputTableArray[$count][0][$tagValue[2]] .= ";".$matchesValue[1];
+                            } else {
+                                $outputTableArray[$count][0][$tagValue[2]] = $matchesValue[1];
+                            }
+                        }
+                    }
+                    $otherString = preg_replace("/<".$tagValue[2].">(.*?)<\/".$tagValue[2].">/u", " ", $otherString);   
+                }
+            }
+            $otherString = preg_replace("/○/u", "", $otherString);
+            $outputTableArray[$count]["other"] = $otherString;
+            $outputTableArray[$count]["page"] = $pageNow;
+            $value = preg_replace("/>/u", "&gt;", $value);
+            $value = preg_replace("/</u", "&lt;", $value);
+            $outputTableArray[$count]["full"] = $value;
+        }
+        /*
+        echo "<br>"."DEBUG: outputTableArray:"."<br>";
+        var_dump($outputTableArray);
+        */
+        
+        $topic_tag = $this->GetTopicTag($topic);
+
+        foreach ( $outputTableArray as $arrayIndex => $arrayValue ) {
+            // output each row which the topic tag
+            // e.g. the original version is for 'person'           
+            if ( !isset($arrayValue[0][$topic_tag]) ) {
+                unset($outputTableArray[$arrayIndex]);
+            }
+
+            /*
+            if ($topic == 1) {
+                if ( !isset($arrayValue[0]["person"]) ) {
+                    unset($outputTableArray[$arrayIndex]);
+                }
+            } else if ($topic == 2) {
+                
+                // for object topic
+                if ( !isset($arrayValue[0]["object"]) ) {   // only the record with the tag of 'object' will become a row
+                    unset($outputTableArray[$arrayIndex]);
+                }
+            }
+            */
+            
+        }
+
+        $data = array();
+
+        $data['outputTableArray'] = $outputTableArray;
+        $data['bookId'] = $bookId;
+        $data['section_id'] = $section_id;
+        $data['bookName'] = $bookName;
+        $data['sectionName'] = $sectionName;
+
+        return $data;
+
+    }
+    
+    // === for manage tag list ===
+    public function EditTaglist($_postdata) {
+        $query = "SELECT AUTO_INCREMENT FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME='taglist'";
+        $result = mysql_query($query);
+        if (!$result) {
+            echo json_encode(mysql_error());
+        }
+        $row = mysql_fetch_assoc($result);
+        $largest_id = $row['AUTO_INCREMENT'];
+
+
+        $topic_id = $_postdata['topic_id'];
+        $result = $this->GetTaglistByTopicID($topic_id);
+
+        $taglistArray = array();
+
+        foreach ($result as $row) {
+            $taglistArray[$row[0]] = array($row[1], $row[2], $row[3]);
+            //$taglistArray[$row['id']] = array($row['name'], $row['tag'], $row['color']);
+            // TODO: the format is not good, so I use $row[0], $row[1],... This could be changed some time.
+        }
+
+        $topic_tag_name = $this->GetTopicTag($topic_id);
+
+        $query = "SELECT id FROM taglist WHERE taglist.tag='".$topic_tag_name."'";
+        $result = mysql_query($query);
+        if (!$result) {
+            echo json_encode(mysql_error());
+        }
+        $row = mysql_fetch_assoc($result);
+        $topic_tag_id = $row['id'];
+
+        $data = array();
+        $data['taglistArray'] = $taglistArray;
+        $data['topic_id'] = $topic_id;
+        $data['largest_id'] = $largest_id;
+        $data['topic_tag_id'] = $topic_tag_id;
+
+
+        return $data;
+       
+    }
+
+    private function _GetTag($_postdata) {
+        if (get_magic_quotes_gpc()) {
+            $id = stripslashes($_postdata['id']);
+            $name = stripslashes($_postdata['name']);
+            $tag = stripslashes($_postdata['tag']);
+            $color = stripslashes($_postdata['color']);
+        } else {
+            $id = $_postdata['id'];
+            $name = $_postdata['name'];
+            $tag = $_postdata['tag'];
+            $color = $_postdata['color'];
+        }
+        return array($id, $name, $tag, $color);
+    }
+
+    public function NewTagElement($postdata) {
+        if ($postdata['id']){   
+            list($id, $name, $tag, $color) = $this->_GetTag($postdata);
+
+            $query1 = sprintf("INSERT INTO `taglist` (`id`, `name`, `tag`, `color`, `systemName`) VALUES (%s, %s, %s, %s, %s)",
+                                $this->GetSQLValueString($id, "int"),
+                                $this->GetSQLValueString($name, "text"),
+                                $this->GetSQLValueString($tag, "text"),
+                                $this->GetSQLValueString($color, "text"),
+                                $this->GetSQLValueString($this->systemNAME, "text"));
+            $result1 = mysql_query($query1);
+
+
+            // add it to topic_tag_relation table
+            $topic_id = $postdata['topic_id'];
+
+            // tag_id is $id;
+            $query = sprintf("INSERT INTO `topic_tag_relation` (`topic_id`,`tag_id`) VALUES (%s,%s)", $topic_id, $id);
+            $result = mysql_query($query);
+            if (!$result) {
+                echo json_encode("error when insert into topic_tag_relation table");
+            }
+        }
+
+    }
+
+    public function SaveTagElement($postdata) {
+        if ($postdata['id']){   
+            list($id, $name, $tag, $color) = $this->_GetTag($postdata);
+            
+            $query = sprintf("UPDATE taglist SET `name`=%s, `tag`=%s, `color`=%s WHERE `id`=%s",
+                                $this->GetSQLValueString($name, "text"),
+                                $this->GetSQLValueString($tag, "text"),
+                                $this->GetSQLValueString($color, "text"),
+                                $this->GetSQLValueString($id, "int"));
+            $result = mysql_query($query);
+                     
+        }
+
+    }
+
+    public function DeleteTag($postdata) {
+        if ($postdata['id']) {
+            $queryInsert = sprintf("DELETE FROM `taglist` WHERE `id` = %s", stripslashes($postdata['id']));
+            $resultInsert = mysql_query($queryInsert);
+        }
+
+    }
+
+    // === for config topic ===
+    public function ConfigTagsInTopic($postdata) {
+        $topic = $postdata['topic'];
+        $result = $this->GetTopicByID($topic);
+        $row = mysql_fetch_assoc($result);
+        $topic_name = $row['name'];
+
+        /*
+        $query = "SELECT taglist.*, topic_tag_relation.topic_id FROM taglist LEFT JOIN topic_tag_relation ON taglist.id = topic_tag_relation.tag_id ORDER BY `topic_id`";
+        $result = mysql_query($query);
+        if (!$result) {
+            return json_encode("Failed during selecting/joining taglist and topic_tag_relation table.");
+        }
+        $taglistArray = array();
+        while ($row = mysql_fetch_assoc($result)) {
+            array_push($taglistArray, array('id'=>$row['id'],'name'=>$row['name'], 'tag'=>$row['tag'], 'color'=>$row['color'], 'topic_id'=>$row['topic_id']) );
+        }
+        */
+
+        // ------
+        $query = "SELECT taglist.*, topic_tag_relation.topic_id FROM taglist LEFT JOIN topic_tag_relation ON taglist.id = topic_tag_relation.tag_id ORDER BY `topic_id`";
+        $result = mysql_query($query);
+        if (!$result) {
+            return json_encode("Failed during selecting/joining taglist and topic_tag_relation table.");
+        }
+
+        $tag_intopic = array();
+        $tag_others = array();
+        $tag_tmp_others = array();
+        while ($row = mysql_fetch_assoc($result)) {
+            if ($row['topic_id'] == $topic) {
+                array_push($tag_intopic, array('id'=>$row['id'],'name'=>$row['name'], 'tag'=>$row['tag'], 'color'=>$row['color'], 'topic_id'=>$row['topic_id']));
+            } else {
+                array_push($tag_tmp_others, array('id'=>$row['id'],'name'=>$row['name'], 'tag'=>$row['tag'], 'color'=>$row['color'], 'topic_id'=>$row['topic_id']));
+            }
+        }
+
+        // --- check if there's any duplicated tags in tag_tmp_others. remove the duplicated tags
+        $num_others = count($tag_tmp_others);
+        for ($i=0; $i < $num_others; $i++) { 
+            $cnt = 0;
+            for ($j=$i+1; $j < $num_others; $j++) { 
+                if ($tag_tmp_others[$i]['tag'] == $tag_tmp_others[$j]['tag']) {
+                    break;
+                } else {
+                    $cnt++;
+                }
+            }
+            if ($cnt == ($num_others-$i-1) ) {
+                $row = $tag_tmp_others[$i];
+                array_push($tag_others, array('id'=>$row['id'],'name'=>$row['name'], 'tag'=>$row['tag'], 'color'=>$row['color'], 'topic_id'=>$row['topic_id']) );
+            }
+        }
+
+        // --- remove duplicated tags in tag_others that is duplicated with tags in tag_intopic
+        $tag_tmp_others = $tag_others;
+        $tag_others = array();
+        
+        foreach ($tag_tmp_others as $tmp) {
+            $cnt = 0;
+            foreach ($tag_intopic as $intopic) {
+                if ($tmp['tag'] == $intopic['tag']) {
+                    break;
+                } else {
+                    $cnt ++;
+                }
+            }
+            if ($cnt == count($tag_intopic)) {
+                // not appear in $tag_intopic
+                array_push($tag_others, $tmp);
+            }
+        }
+        
+        // -----
+
+
+        $data = array();
+        //$data['taglistArray'] = $taglistArray;
+        $data['topic'] = $topic;
+        $data['topic_name'] = $topic_name;
+
+        $data['tag_intopic'] = $tag_intopic;
+        $data['tag_others'] = $tag_others;
+
+        return $data;
+    }
+
+
+    public function UpdateTagsInTopic($_postdata) {
+        $topic_id = $_postdata['topic_id'];
+        $tag_ids = json_decode(str_replace('\\', '', $_postdata['ids']));
+
+        // update topic_tag_relation by tags_ids array as `tag_id` and topic_id as `topic_id`
+        // --- add new topic_tag_relation ---
+        foreach ($tag_ids as $tag_id) {
+            $query = "SELECT * FROM topic_tag_relation WHERE tag_id=".$tag_id;
+            $result = mysql_query($query);
+            if (!$result) {
+                echo json_encode("error when select from topic_tag_relation");
+            }
+            $topic_tag = array();
+            $flag = false;
+            while ($row = mysql_fetch_assoc($result)) {
+                if ($row['topic_id'] == $topic_id) {
+                    $flag = true;
+                    break;
+                }
+            }
+            if (!$flag) {
+                // insert a row into topic_tag_relation table
+                $queryUpdate = "INSERT INTO topic_tag_relation (topic_id, tag_id) VALUES (".$topic_id.",".$tag_id.")";
+                $resultUpdate = mysql_query($queryUpdate); 
+                if (!$resultUpdate) {
+                    return json_encode("error when insert topic_tag_relation table");
+                }   
+            }
+
+        }
+
+        // --- remove tags from this topic ---
+        $query = "SELECT * FROM topic_tag_relation WHERE topic_id=".$topic_id;
+        $result = mysql_query($query);
+        if (!$result) {
+            echo json_encode("error when select from topic_tag_relation");
+        }
+
+        while ($row = mysql_fetch_assoc($result)) {
+            $cnt = 0;
+            foreach ($tag_ids as $tag_id) {
+                if ($row['tag_id'] == $tag_id) {
+                    break;
+                } else {
+                    $cnt ++;
+                }
+            }
+            $_id = $row['id'];
+            if ($cnt == count($tag_ids)) {
+                // delete row with (topic_id, tag_ids)
+                $queryDelete = "DELETE FROM topic_tag_relation WHERE id=".$_id;
+                $resultDelete = mysql_query($queryDelete);
+                if (!$resultDelete) {
+                    echo json_encode("error when delete from topic_tag_relation");
+                }
+            }
+        }
+
+    
+
+        /*
+        $query = "SELECT * FROM topic_tag_relation";
+        $result = mysql_query($query);
+        if (!$result) {
+            echo json_encode("error when select from topic_tag_relation");
+        }
+        $topic_tag = array();
+        while ($row = mysql_fetch_assoc($result)) {
+            array_push($topic_tag, array('tag_id'=>$row['tag_id'], 'topic_id'=>$row['topic_id']));
+        }
+
+
+        foreach ($topic_tag as $value) {
+            $flag = false;
+            foreach ($tag_ids as $tag_id) {
+                if ($value['tag_id'] == $tag_id) {
+                    //update its topic_id to $topic_id
+                    $queryUpdate = "UPDATE topic_tag_relation SET topic_id=".$topic_id." WHERE tag_id=".$tag_id;
+                    $resultUpdate = mysql_query($queryUpdate); 
+                    if (!$resultUpdate) {
+                        return json_encode("error when update topic_tag_relation table");
+                    }   
+                    $flag = true;
+                    break;
+                }
+            }
+            if (!$flag && $value['topic_id'] == $topic_id) {
+                // set its topic_id to 0, indicating unsigned
+                $queryUpdate = "UPDATE topic_tag_relation SET topic_id=0 WHERE tag_id=".$value['tag_id'];
+                $resultUpdate = mysql_query($queryUpdate); 
+                if (!$resultUpdate) {
+                    return json_encode("error when update topic_tag_relation table");
+                }   
+            }
+        }
+        */
+
+    }
+
+
+    private function GetTaglistByTopicID($topic_id) {
+        $taglistArray = array();
+        // select taglist ids from topic_tag_relation table
+        $query = sprintf("SELECT * FROM `topic_tag_relation` WHERE `topic_id`='%s'", $topic_id);
+        $result = mysql_query($query);
+        if (!$result) {
+            return json_encode("Failed during selecting topic_tag_relation table.");
+        }
+        $taglist_ids = array();
+
+        while ($row = mysql_fetch_assoc($result)) {
+            array_push($taglist_ids, $row['tag_id']);
+        }
+
+        // select taglist by tag ids
+        foreach ($taglist_ids as $tag_id) {
+            $query = sprintf("SELECT * FROM `taglist` WHERE `id`='%s'", $tag_id);
+            $result = mysql_query($query);
+            if (!$result) {
+                echo mysql_error();
+                return json_encode("Failed during selecting taglist table.");
+            }
+
+            $row = mysql_fetch_assoc($result);
+            array_push($taglistArray, array( $row['id'], $row['name'], $row['tag'], $row['color'] ));
+
+        }
+        return $taglistArray;
+    }
+
+    public function SetTopic($topic) {
+        $this->topic = $topic;
+    }
+
+    public function GetTopic() {
+        return $this->topic;
+    }
+
+    private function GetTopiclistArray() {
+        $topiclistArray = array();
+        $result = $this->GetTopiclist();
+        while ($row = mysql_fetch_assoc($result)) {
+            array_push($topiclistArray, array('id'=>$row['id'],'name'=>$row['name'],'tag'=>$row['tag']));
+        }
+        return $topiclistArray;
+    }
+
+
+    private function GetTopicTag($topic_id) {
+        $result = $this->GetTopicByID($topic_id);
+        $row = mysql_fetch_assoc($result);
+        $tag = $row['tag'];
+        return $tag;
+
+    }
+    private function GetTopicName($topic_id) {
+        $result = $this->GetTopicByID($topic_id);
+        $row = mysql_fetch_assoc($result);
+        $name = $row['name'];
+        return $name;
+
+    }
+
+
+    // =========================== 
+
+    // === for manage wordlist ===
+    public function EditWordlist() {
+        $result = $this->GetWordlist();
+        $wordlistArray = array();
+        while ($row = mysql_fetch_assoc($result)) {
+            $wordlistArray[$row['id']] = $row['name'];
+        }
+
+        $data = array();
+        $data['wordlistArray'] = $wordlistArray;
+        return $data;
+    }
+
+
+    public function AddNewList($postdata) {
+        if ($postdata['text']){ 
+            if (get_magic_quotes_gpc()) {
+                $name = stripslashes($postdata['text']);
+            } else {
+                $name = $postdata['text'];
+            }
+
+            $query1 = sprintf("INSERT INTO `wordlist` (`name`, `systemName`) VALUES (%s, %s)",
+                            $this->GetSQLValueString($name, "text"),
+                            $this->GetSQLValueString($this->systemNAME, "text"));
+            $result1 = mysql_query($query1);
+            file_put_contents( "data/wordlist/".mysql_insert_id().".txt", "(empty now)");
+        }
+    }  
+
+
+    public function SaveWordlist($postdata) {
+
+        if ($postdata['text']){
+            $date = date('Y_m_d_H_i_s', time());
+            if ( file_exists("data/wordlist/".$postdata['filename'].".txt") ) {
+                $filename = "data/wordlist/".$postdata['filename']."_".$date.".txt";
+                $oldFile = file_get_contents("data/wordlist/".$postdata['filename'].".txt");
+                file_put_contents($filename, $oldFile);
+            } 
+            /*else {
+                $filename = "data/wordlist/".$postdata['filename'].".txt";
+            }
+            */
+
+
+            if (get_magic_quotes_gpc()) {
+                $require = stripslashes($postdata['text']);
+            } else {
+                $require = $postdata['text'];
+            }
+
+            $require = preg_replace("/<br>/u", "<br>", $require);
+            file_put_contents("data/wordlist/".$postdata['filename'].".txt", $require);
+        }
+        /*
+        if ($postdata['text']){
+            $date = date('Y_m_d_H_i_s', time());
+            if ( file_exists("data/wordlist/".$postdata['filename'].".txt") ) {
+                $oldFile = file_get_contents("data/wordlist/".$postdata['filename'].".txt");
+                file_put_contents("data/wordlist/".$postdata['filename']."_".$date.".txt", $oldFile);
+            }
+        
+            if (get_magic_quotes_gpc()) {
+                $require = stripslashes($postdata['text']);
+            } else {
+                $require = $postdata['text'];
+            }
+
+            // $require = preg_replace("/<br>/u", "", $require);
+            file_put_contents("data/wordlist/".$postdata['filename'].".txt", $require);
+        }
+        */
+    }
+
+
+    // =======================================
+
+    public function sortFunction($a,$b) {
+        return strlen($b)-strlen($a);
+    }
+
+    // TODO: delete this
+    private function SetSectionId($_urlvalues) {
+        // TODO: maybe get user info also
+        // get book id from url
+        if ($_urlvalues['id'] != "") {
+            $section_id = $_urlvalues['id'];
+        } else {
+            return json_encode("Error: No section id");
+            /* ???? */
+            /* 
+            $get_book_id = $urlvalues['book'];
+            $get_start = $urlvalues['start'];
+            $get_end = $urlvalues['end'];
+            */
+        }
+        $this->section_id = $section_id;
+        
+    }
+
+    private function GetSectionId() {
+
+        if (is_numeric($this->section_id)) {
+            return $this->section_id;
+        } else {
+            return json_encode("Error: No section id");
+        }
+    }
+    
+    private function GetSectionInfo() {
+        $section_id = $this->GetSectionId();
+        if (!is_numeric($section_id)){
+            return $section_id;
+        }
+
+        $result = $this->GetSectionsByID($section_id);
+
+        
+        while ($row = mysql_fetch_assoc($result)) {
+            $bookId=$row['books_id'];
+            $startPage=$row['start_page'];
+            $endPage=$row['end_page'];
+            $sectionName = $row['name'];
+        }
+
+        $data = array();
+        $data['bookId'] = $bookId;
+        $data['startPage'] = $startPage;
+        $data['endPage'] = $endPage;
+        $data['sectionName'] = $sectionName;
+
+
+        return $data;
+    }
+
+    private function ParseMetaData($filename) {
+        $text = file_get_contents($filename);
+        $xml = simplexml_load_string($text); //or die("Error: Cannot load from xml string");
+        if (!$xml) {
+            // when file created by section_id, read the plain text from file_get_contents
+            return $text;
+        }
+
+        $this->topic = (string)$xml->topic; // set topic id
+
+        // get taglist in file
+        $taglist_infile = $xml->tagitem;
+        $taglistArray = array();
+        foreach ($taglist_infile as $row) {
+            array_push($taglistArray, array((string)$row->id,(string)$row->name,(string)$row->tag,(string)$row->color ));
+        }
+        if ($taglistArray) {
+            $this->taglist_infile = $taglistArray; 
+        }
+
+        // get book meta data
+        $book_meta = $xml->book;
+        $book_metaArray = array();
+        foreach ($book_meta as $row) {
+            //array_push($book_metaArray, array('title'=>(string)$row->title,'author'=>(string)$row->author,'year'=>(string)$row->year,'pagenumber'=>(string)$row->pagenumber ));
+            array_push($book_metaArray, array((string)$row->title,(string)$row->author,(string)$row->year,(string)$row->pagenumber ));
+        }
+        if ($book_metaArray) {
+            $this->book_meta = $book_metaArray;
+        }
+
+        // echo $taglist->name.", ".$taglist->tag."," .$taglist->color;
+        // --- detect if the taglist set is up-to-date or not ---
+        $contentString = (string)$xml->text_content->asXML();
+        //$removed_str = array("<text_content>","</text_content>");
+        //$new_contentString = str_replace($removed_str, "", $contentString);
+
+        return $contentString;
+    }
+    private function GetSectionContent() {
+        $section_id = $this->GetSectionId();
+        $section_info = $this->GetSectionInfo();
+
+        $bookId = $section_info['bookId'];
+        $startPage = $section_info['startPage'];
+        $endPage = $section_info['endPage'];
+
+        $contentString="";
+        $data_path = $this->GetDataPath();
+        if ( file_exists($data_path."parsing_files/".$section_id.".txt") ) {
+            $filename = $data_path."parsing_files/".$section_id.".txt";
+            
+            // --- parsing meta data
+            $stringInput = $this->ParseMetaData($filename);
+            // ----
+
+            // if the text is from file system
+            $stringInput = preg_replace("/ /u", "○", $stringInput);
+            $stringInput = preg_replace("/\n/u", "<br>", $stringInput);
+            $stringInput = preg_replace("/【(.*?)】/u", "【<a href=\"review_index_xml_images.php?books_id=".$bookId."&pages=\\1&entry=0\" target=\"_bookImg\">\\1</a>】", $stringInput);
+        } else {
+            $query = sprintf("SELECT `content`, `line`, `books_id` FROM `contents` WHERE `books_id`=\"%s\" AND `line`>=%d AND `line`<=%d", $bookId, $startPage, $endPage);
+            $result = mysql_query($query);
+            if (!$result) {
+                return json_encode("Failed during selecting content table.");
+            }
+            while ($row = mysql_fetch_assoc($result)) {
+                $contentString.="【".$row['line']."】".$row['content']."\n";
+            }
+           
+            // the text is from database
+            $stringInput = $contentString;
+            $stringInput = preg_replace("/<(.*?)>/u", "○", $stringInput);
+            $stringInput = preg_replace("/ /u", "○", $stringInput);
+            $stringInput = preg_replace("/\n/u", "<br>", $stringInput);
+            $stringInput = preg_replace("/【(.*?)】/u", "【<a href=\"review_index_xml_images.php?books_id=".$bookId."&pages=\\1&entry=0\" target=\"_bookImg\">\\1</a>】", $stringInput);
+        }
+
+        return $stringInput;
+    }
+    
+    private function GetDataPath() {
+        return getcwd()."/data/"; // get the current file path, which is getcwd(), and concatenate with "/data/"
+    }
+
+    private function GetTaglistArray() {
+        $taglistArray = array();
+        $result = $this->GetTaglist();
+        while ($row = mysql_fetch_assoc($result)) {
+            array_push($taglistArray, array( $row['id'], $row['name'], $row['tag'], $row['color'] ));
+        }
+
+        return $taglistArray;
+    }
+
+    private function GetWordlistArray() {
+        $wordlistArray="";
+        $result = $this->GetWordlist();
+        while ($row = mysql_fetch_assoc($result)) {
+            $listString = file_get_contents("data/wordlist/".$row['id'].".txt");
+            $listString = preg_replace("/<div>/u", "\n", $listString);
+            $listString = preg_replace("/<\/div>/u", "", $listString);
+            $listString = preg_replace("/<span(.*?)>/u", "", $listString);
+            $listString = preg_replace("/<\/span>/u", "", $listString);
+            //$listString = preg_replace("/\n/u", "|", $listString);
+            
+            $wordlistArray2 = explode( "\n", $listString );
+            usort($wordlistArray2,'sortFunction');
+            foreach ( $wordlistArray2 as $index=>$value ) {
+                $wordlistArray2[$index] = implode("○?", preg_split("/(?<!^)(?!$)/u", $value));
+            }
+            foreach ( $wordlistArray2 as $index=>$value ) {
+                if ($value=="") unset($wordlistArray2[$index]);
+                
+            }
+            $listString = implode("|", $wordlistArray2);
+            
+            if ( $listString[0]=="|" ) $listString = substr($listString, 1);
+            $wordlistArray[] = array( $row['id'], $row['name'], $listString );
+        }
+
+
+        return $wordlistArray;
+
+    }
+
+    protected function GetBooksInfo($bookId) {
+        $result = $this->GetSectionsByID($bookId);
+        while ($row = mysql_fetch_assoc($result)) {
+            $bookName = $row['name'];
+        }
+
+        $data = array();
+        $data['bookName'] = $bookName;
+
+        return $data;
+    }
+
+    
+}
+
+
+
+?>