view develop/models/extractapp.php @ 12:e82ca7375e93

Integration with LocalGazetteerService (LGService), getting text from LGService and saving text to LGService. Adjust the control flow (controller).
author Zoe Hong <zhong@mpiwg-berlin.mpg.de>
date Mon, 16 Feb 2015 16:51:39 +0100
parents 3d6fba07bfbd
children cc36a20a68ab
line wrap: on
line source



<?php

class ExtractappModel extends BaseModel{
    
	public function Index() {
		return array("Index Value 1", "Value 2", "Value 3");
	}
    
    protected $section_id, $data_path, $file_id, $branch_id, $user_id, $lg_tex;

    private function Initialize($_urlvalues) {
        $this->SetSectionId($_urlvalues);

    }

    public function GetTextFromFileId($_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;
        
        // get from URL with file_id
        $lg_text_url = $this->get_text_from_fileId_url.$file_id;
        $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;

        $this->lg_text = $lg_text;

    }

    public function GetTextFromSectionId($_postdata) {
        
        $section_id = $_postdata['sectionId'];
        $this->section_id = $section_id;
        $this->user_id = $_postdata['userId'];

        // 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;
        echo "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'];
        }


    }
    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;
        

    }

    // === for tagging ===
    public function StartTagging() {
       
        // $this->Initialize($urlvalues);

        $section_id = $this->section_id;
        $stringInput = $this->lg_text;
        

        //$taglistArray = $this->GetTaglistArray();
        //for GetTaglistByTopicID: 
        $taglistArray = $this->GetTaglistByTopicID($this->GetTopic());
        // topic list
        $topiclistArray = $this->GetTopiclistArray();


        $wordlistArray = $this->GetWordlistArray();

        $data = array();
        $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['info'] = array('file_id'=>$this->file_id, 'user_id'=>$this->user_id, 'branch_id'=>$this->branch_id, 'section_id'=>$this->section_id);
        
        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 UpdateInfoByResonseFromLGService($response) {

        $response_file = $response["file"];
        $response_branch = $response["branch"];

        $this->file_id = (string)$response_file["id"];  // should updated
        echo "file_id: ".$this->file_id;
        echo "<br>";
        $this->branch_id = (string)$response_branch["id"];
        echo "branch_id: ".$this->branch_id;
        echo "<br>";

    }
    public function SaveFullTextToLGService($_postdata) {
        // save tagged text (full text) by Jorge's API to lg service

        // --------
        // saving in my local machine in developing phrase
       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");
                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);
            file_put_contents("data/parsing_files/".$_postdata['sectionId'].".txt", $require);
        } 

        echo getcwd()."<br>";
        // ------


        if ($_postdata['branchId'] != 0) {
            // exiting branch case
            $postfields = array(
                //"text" => $_postdata['text'], 
                "text" => $require, 
                "branchId" => $_postdata['branchId'],
                "userId" => $_postdata['userId'],
                "userPreviousFileId" => $_postdata['fileId'],
            );  
            $save_url = $this->save_to_LGService_url;     

        } else {
            // new branch case
            echo "saveNew!";
            $postfields = array(
                //"text" => $_postdata['text'], 
                "text" => $require, 
                "sectionId" => $_postdata['sectionId'],
                //"userId" => $_postdata['userId'],
                // TODO: change userId when we can query by sectionId from LGService using search
                "userId" => "12",
                // "label" => $_postdata['label'],
                // TODO: ask user for lable
                "label" => "label for section ".$_postdata['sectionId'],
            ); 
            $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

        $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 export table ===
    public function ExportTable($urlvalues, $postdata) {
        // $this->Initialize($urlvalues);
        $content = $postdata['content'];
        $topic = $postdata['topic'];
        
        // outputTableArray:
        // $section_id = $this->GetSectionId();
        $section_id = $this->section_id;
        if (!$section_id) {
            //$this->Initialize($urlvalues);
            $section_id = $this->GetSectionId();
        }

        $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);
        */

        foreach ( $outputTableArray as $arrayIndex => $arrayValue ) {
            // output each row which the topic tag
            // e.g. the original version is for 'person'
            
            // TODO: choose topic tag based on the topic
            // for person topic
            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($urlvalues) {
        // $this->Initialize($urlvalues);
        $result = $this->GetTaglist();
        $taglistArray = array();
        while ($row = mysql_fetch_assoc($result)) {
            $taglistArray[$row['id']] = array($row['name'], $row['tag'], $row['color']);
        }

        $data = array();
        $data['taglistArray'] = $taglistArray;
        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);
        }

    }

    public function SaveTagElement($postdata) {
        if ($postdata['id']){   
            list($id, $name, $tag, $color) = $this->_GetTag($postdata);
            
            $queryInsert = 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"));
            $resultInsert = mysql_query($queryInsert);
          
        }

    }

    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) {
        
        $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']) );
        }

        $topic = $postdata['topic'];
        $result = $this->GetTopicByID($topic);
        $row = mysql_fetch_assoc($result);
        $topic_name = $row['name'];

        $data = array();
        $data['taglistArray'] = $taglistArray;
        $data['topic'] = $topic;
        $data['topic_name'] = $topic_name;

        return $data;
    }

    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;

    }

    // =========================== 

    // === for manage wordlist ===
    public function EditWordlist($urlvalues) {
        //$this->Initialize($urlvalues);
        $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($filename, $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 GetSectionContent() {
        $section_id = $this->GetSectionId();
        $section_info = $this->GetSectionInfo();

        var_dump($section_id);
        var_dump($section_info);

        $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") ) {
            $contentString=file_get_contents($data_path."parsing_files/".$section_id.".txt");
            $stringInput = $contentString;

            // 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("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;
    }

    
}



?>