Full Code of horvey/Library-Manager for AI

master e3d3743f8c8f cached
247 files
1.3 MB
363.1k tokens
1241 symbols
1 requests
Download .txt
Showing preview only (1,491K chars total). Download the full file or copy to clipboard to get everything.
Repository: horvey/Library-Manager
Branch: master
Commit: e3d3743f8c8f
Files: 247
Total size: 1.3 MB

Directory structure:
gitextract__o9w64dy/

├── Admin/
│   ├── Controller/
│   │   ├── BookController.class.php
│   │   ├── BorrowController.class.php
│   │   ├── IndexController.class.php
│   │   └── UserController.class.php
│   ├── Model/
│   │   ├── BookModel.class.php
│   │   ├── BorrowModel.class.php
│   │   └── UserModel.class.php
│   └── View/
│       ├── Book/
│       │   ├── add.html
│       │   ├── detail.html
│       │   ├── edit.html
│       │   └── index.html
│       ├── Borrow/
│       │   └── index.html
│       ├── Index/
│       │   └── index.html
│       └── User/
│           ├── add.html
│           ├── index.html
│           └── manage.html
├── Base/
│   ├── Base.class.php
│   ├── BaseController.class.php
│   ├── BaseModel.class.php
│   └── Conf.php
├── Common/
│   ├── Controller/
│   │   └── LoginController.class.php
│   ├── Model/
│   │   └── UserModel.class.php
│   └── View/
│       └── login.html
├── Home/
│   ├── Controller/
│   │   ├── BookController.class.php
│   │   ├── BorrowController.class.php
│   │   ├── IndexController.class.php
│   │   └── UserController.class.php
│   ├── Model/
│   │   ├── BookModel.class.php
│   │   ├── BorrowModel.class.php
│   │   └── UserModel.class.php
│   └── View/
│       ├── Book/
│       │   ├── detail.html
│       │   └── index.html
│       ├── Index/
│       │   └── index.html
│       └── User/
│           └── index.html
├── LICENSE
├── README.md
├── Tool/
│   ├── Db.class.php
│   ├── MySmarty.class.php
│   ├── Pager.class.php
│   ├── Verify.class.php
│   └── smarty-3.1.32/
│       └── libs/
│           ├── Autoloader.php
│           ├── Smarty.class.php
│           ├── SmartyBC.class.php
│           ├── bootstrap.php
│           ├── debug.tpl
│           ├── plugins/
│           │   ├── block.textformat.php
│           │   ├── function.counter.php
│           │   ├── function.cycle.php
│           │   ├── function.fetch.php
│           │   ├── function.html_checkboxes.php
│           │   ├── function.html_image.php
│           │   ├── function.html_options.php
│           │   ├── function.html_radios.php
│           │   ├── function.html_select_date.php
│           │   ├── function.html_select_time.php
│           │   ├── function.html_table.php
│           │   ├── function.mailto.php
│           │   ├── function.math.php
│           │   ├── modifier.capitalize.php
│           │   ├── modifier.date_format.php
│           │   ├── modifier.debug_print_var.php
│           │   ├── modifier.escape.php
│           │   ├── modifier.mb_wordwrap.php
│           │   ├── modifier.regex_replace.php
│           │   ├── modifier.replace.php
│           │   ├── modifier.spacify.php
│           │   ├── modifier.truncate.php
│           │   ├── modifiercompiler.cat.php
│           │   ├── modifiercompiler.count_characters.php
│           │   ├── modifiercompiler.count_paragraphs.php
│           │   ├── modifiercompiler.count_sentences.php
│           │   ├── modifiercompiler.count_words.php
│           │   ├── modifiercompiler.default.php
│           │   ├── modifiercompiler.escape.php
│           │   ├── modifiercompiler.from_charset.php
│           │   ├── modifiercompiler.indent.php
│           │   ├── modifiercompiler.lower.php
│           │   ├── modifiercompiler.noprint.php
│           │   ├── modifiercompiler.string_format.php
│           │   ├── modifiercompiler.strip.php
│           │   ├── modifiercompiler.strip_tags.php
│           │   ├── modifiercompiler.to_charset.php
│           │   ├── modifiercompiler.unescape.php
│           │   ├── modifiercompiler.upper.php
│           │   ├── modifiercompiler.wordwrap.php
│           │   ├── outputfilter.trimwhitespace.php
│           │   ├── shared.escape_special_chars.php
│           │   ├── shared.literal_compiler_param.php
│           │   ├── shared.make_timestamp.php
│           │   ├── shared.mb_str_replace.php
│           │   ├── shared.mb_unicode.php
│           │   └── variablefilter.htmlspecialchars.php
│           └── sysplugins/
│               ├── smarty_cacheresource.php
│               ├── smarty_cacheresource_custom.php
│               ├── smarty_cacheresource_keyvaluestore.php
│               ├── smarty_data.php
│               ├── smarty_internal_block.php
│               ├── smarty_internal_cacheresource_file.php
│               ├── smarty_internal_compile_append.php
│               ├── smarty_internal_compile_assign.php
│               ├── smarty_internal_compile_block.php
│               ├── smarty_internal_compile_block_child.php
│               ├── smarty_internal_compile_block_parent.php
│               ├── smarty_internal_compile_break.php
│               ├── smarty_internal_compile_call.php
│               ├── smarty_internal_compile_capture.php
│               ├── smarty_internal_compile_child.php
│               ├── smarty_internal_compile_config_load.php
│               ├── smarty_internal_compile_continue.php
│               ├── smarty_internal_compile_debug.php
│               ├── smarty_internal_compile_eval.php
│               ├── smarty_internal_compile_extends.php
│               ├── smarty_internal_compile_for.php
│               ├── smarty_internal_compile_foreach.php
│               ├── smarty_internal_compile_function.php
│               ├── smarty_internal_compile_if.php
│               ├── smarty_internal_compile_include.php
│               ├── smarty_internal_compile_include_php.php
│               ├── smarty_internal_compile_insert.php
│               ├── smarty_internal_compile_ldelim.php
│               ├── smarty_internal_compile_make_nocache.php
│               ├── smarty_internal_compile_nocache.php
│               ├── smarty_internal_compile_parent.php
│               ├── smarty_internal_compile_private_block_plugin.php
│               ├── smarty_internal_compile_private_foreachsection.php
│               ├── smarty_internal_compile_private_function_plugin.php
│               ├── smarty_internal_compile_private_modifier.php
│               ├── smarty_internal_compile_private_object_block_function.php
│               ├── smarty_internal_compile_private_object_function.php
│               ├── smarty_internal_compile_private_php.php
│               ├── smarty_internal_compile_private_print_expression.php
│               ├── smarty_internal_compile_private_registered_block.php
│               ├── smarty_internal_compile_private_registered_function.php
│               ├── smarty_internal_compile_private_special_variable.php
│               ├── smarty_internal_compile_rdelim.php
│               ├── smarty_internal_compile_section.php
│               ├── smarty_internal_compile_setfilter.php
│               ├── smarty_internal_compile_shared_inheritance.php
│               ├── smarty_internal_compile_while.php
│               ├── smarty_internal_compilebase.php
│               ├── smarty_internal_config_file_compiler.php
│               ├── smarty_internal_configfilelexer.php
│               ├── smarty_internal_configfileparser.php
│               ├── smarty_internal_data.php
│               ├── smarty_internal_debug.php
│               ├── smarty_internal_errorhandler.php
│               ├── smarty_internal_extension_handler.php
│               ├── smarty_internal_method_addautoloadfilters.php
│               ├── smarty_internal_method_adddefaultmodifiers.php
│               ├── smarty_internal_method_append.php
│               ├── smarty_internal_method_appendbyref.php
│               ├── smarty_internal_method_assignbyref.php
│               ├── smarty_internal_method_assignglobal.php
│               ├── smarty_internal_method_clearallassign.php
│               ├── smarty_internal_method_clearallcache.php
│               ├── smarty_internal_method_clearassign.php
│               ├── smarty_internal_method_clearcache.php
│               ├── smarty_internal_method_clearcompiledtemplate.php
│               ├── smarty_internal_method_clearconfig.php
│               ├── smarty_internal_method_compileallconfig.php
│               ├── smarty_internal_method_compilealltemplates.php
│               ├── smarty_internal_method_configload.php
│               ├── smarty_internal_method_createdata.php
│               ├── smarty_internal_method_getautoloadfilters.php
│               ├── smarty_internal_method_getconfigvariable.php
│               ├── smarty_internal_method_getconfigvars.php
│               ├── smarty_internal_method_getdebugtemplate.php
│               ├── smarty_internal_method_getdefaultmodifiers.php
│               ├── smarty_internal_method_getglobal.php
│               ├── smarty_internal_method_getregisteredobject.php
│               ├── smarty_internal_method_getstreamvariable.php
│               ├── smarty_internal_method_gettags.php
│               ├── smarty_internal_method_gettemplatevars.php
│               ├── smarty_internal_method_literals.php
│               ├── smarty_internal_method_loadfilter.php
│               ├── smarty_internal_method_loadplugin.php
│               ├── smarty_internal_method_mustcompile.php
│               ├── smarty_internal_method_registercacheresource.php
│               ├── smarty_internal_method_registerclass.php
│               ├── smarty_internal_method_registerdefaultconfighandler.php
│               ├── smarty_internal_method_registerdefaultpluginhandler.php
│               ├── smarty_internal_method_registerdefaulttemplatehandler.php
│               ├── smarty_internal_method_registerfilter.php
│               ├── smarty_internal_method_registerobject.php
│               ├── smarty_internal_method_registerplugin.php
│               ├── smarty_internal_method_registerresource.php
│               ├── smarty_internal_method_setautoloadfilters.php
│               ├── smarty_internal_method_setdebugtemplate.php
│               ├── smarty_internal_method_setdefaultmodifiers.php
│               ├── smarty_internal_method_unloadfilter.php
│               ├── smarty_internal_method_unregistercacheresource.php
│               ├── smarty_internal_method_unregisterfilter.php
│               ├── smarty_internal_method_unregisterobject.php
│               ├── smarty_internal_method_unregisterplugin.php
│               ├── smarty_internal_method_unregisterresource.php
│               ├── smarty_internal_nocache_insert.php
│               ├── smarty_internal_parsetree.php
│               ├── smarty_internal_parsetree_code.php
│               ├── smarty_internal_parsetree_dq.php
│               ├── smarty_internal_parsetree_dqcontent.php
│               ├── smarty_internal_parsetree_tag.php
│               ├── smarty_internal_parsetree_template.php
│               ├── smarty_internal_parsetree_text.php
│               ├── smarty_internal_resource_eval.php
│               ├── smarty_internal_resource_extends.php
│               ├── smarty_internal_resource_file.php
│               ├── smarty_internal_resource_php.php
│               ├── smarty_internal_resource_registered.php
│               ├── smarty_internal_resource_stream.php
│               ├── smarty_internal_resource_string.php
│               ├── smarty_internal_runtime_cachemodify.php
│               ├── smarty_internal_runtime_cacheresourcefile.php
│               ├── smarty_internal_runtime_capture.php
│               ├── smarty_internal_runtime_codeframe.php
│               ├── smarty_internal_runtime_filterhandler.php
│               ├── smarty_internal_runtime_foreach.php
│               ├── smarty_internal_runtime_getincludepath.php
│               ├── smarty_internal_runtime_inheritance.php
│               ├── smarty_internal_runtime_make_nocache.php
│               ├── smarty_internal_runtime_tplfunction.php
│               ├── smarty_internal_runtime_updatecache.php
│               ├── smarty_internal_runtime_updatescope.php
│               ├── smarty_internal_runtime_writefile.php
│               ├── smarty_internal_smartytemplatecompiler.php
│               ├── smarty_internal_template.php
│               ├── smarty_internal_templatebase.php
│               ├── smarty_internal_templatecompilerbase.php
│               ├── smarty_internal_templatelexer.php
│               ├── smarty_internal_templateparser.php
│               ├── smarty_internal_testinstall.php
│               ├── smarty_internal_undefined.php
│               ├── smarty_resource.php
│               ├── smarty_resource_custom.php
│               ├── smarty_resource_recompiled.php
│               ├── smarty_resource_uncompiled.php
│               ├── smarty_security.php
│               ├── smarty_template_cached.php
│               ├── smarty_template_compiled.php
│               ├── smarty_template_config.php
│               ├── smarty_template_resource_base.php
│               ├── smarty_template_source.php
│               ├── smarty_undefined_variable.php
│               ├── smarty_variable.php
│               ├── smartycompilerexception.php
│               └── smartyexception.php
├── book.sql
└── index.php

================================================
FILE CONTENTS
================================================

================================================
FILE: Admin/Controller/BookController.class.php
================================================
<?php
namespace Admin\Controller;
use Base\BaseController;
use Admin\Model\BookModel;
use Admin\Model\BorrowModel;
use Tool\Pager;

final class Book extends BaseController{

    public function index(){
        $this->accessPage();

        //页面参数
        $currentPage = isset($_GET["page"]) ? $_GET["page"] : 1;    //当前页数
        $eachPerPage = 10;      //每页显示条数

        //获取搜索条件
        if(isset($_GET['keyword']) && !empty($_GET['keyword'])){
            $where = "name LIKE '%{$_GET['keyword']}%'";
            $parms = array("keyword"=>$_GET['keyword']);
            $mode  = "keyword";
        }else if(isset($_GET['bookId']) && !empty($_GET['bookId'])){
            $where = "id = '{$_GET['bookId']}'";
            $parms = array("bookId"=>$_GET['bookId']);
            $mode  = "bookId";
        }else{
            $where = "2>1";
            $parms = array();
            $mode  = "";
        }
        
        $bookModel = new BookModel;
        //获取图书总数用于计算总页数
        $count  = $bookModel->rowCount($where);

        //判断页数是否合法
        if($count != 0){
            if($currentPage < 1){
                $currentPage = 1;
            }else if($currentPage > ceil($count/$eachPerPage)){
                $currentPage = ceil($count/$eachPerPage);
            }
        }else{
            //记录数为0时,直接从第一页开始,避免offset计算错误
            $currentPage = 1;
        }

        //获取每页图书信息
        $offset = ($currentPage - 1) * $eachPerPage;
        $books = $bookModel->fetchAllWithJoin($where,"LIMIT {$offset},{$eachPerPage}");

        //分页
        $pager = new Pager($currentPage,$count,$eachPerPage,"?p=Admin&c=Book&a=index",$parms);
        
        $this->smarty->assign("books",$books);
        $this->smarty->assign("mode",$mode);
        $this->smarty->assign("pageStr",$pager->page());
        $this->smarty->display("Book/index.html");
    }

    //显示图书详情页面
    public function detail(){
        $this->accessPage();

        $id = $_GET['id'];

        $bookModel = new BookModel;
        $result = $bookModel->fetchOneWithJoin("book_info.id={$id}");
        
        $this->smarty->assign("book",$result);
        $this->smarty->display("Book/detail.html");
    }

    //显示添加图书页面
    public function add(){
        $this->accessPage();

        $this->smarty->display("Book/add.html");
    }

    //显示编辑图书页面
    public function edit(){
        $this->accessPage();

        $id = $_GET['id'];

        $bookModel =    new BookModel;
        $book      =    $bookModel->fetchOne("id={$id}");
        
        $this->smarty->assign("book",$book);
        $this->smarty->display("Book/edit.html");
    }

    //Json添加图书接口
    public function insert(){
        $this->accessJson();
        $bookInfo['name']       =    $_POST['name'];
        $bookInfo['author']     =    $_POST['author'];
        $bookInfo['press']      =    $_POST['press'];
        $bookInfo['press_time']  =   $_POST['pressTime'];
        $bookInfo['price']      =    $_POST['price'];
        $bookInfo['ISBN']       =    $_POST['ISBN'];
        $bookInfo['desc']       =    $_POST['desc'];

        //验证信息是否填写完整
        if(in_array("",$bookInfo)){
            $this->sendJsonMessage("请输入完整信息",1);
        }

        $bookModel = new BookModel;
        if($bookModel->insert($bookInfo)){
            $this->sendJsonMessage("添加成功",0);
        }else{
            $this->sendJsonMessage("添加失败",1);
        }
    }

    //Json接口修改图书
    public function update(){
        $this->accessJson();
        
        $id                      =    $_POST['id'];
        $bookInfo['name']        =    $_POST['name'];
        $bookInfo['author']      =    $_POST['author'];
        $bookInfo['press']       =    $_POST['press'];
        $bookInfo['press_time']  =    $_POST['press_time'];
        $bookInfo['price']       =    $_POST['price'];
        $bookInfo['ISBN']        =    $_POST['ISBN'];
        $bookInfo['desc']        =    $_POST['desc'];

        //验证信息是否填写完整
        if(in_array("",$bookInfo)){
            $this->sendJsonMessage("请输入完整信息",1);
        }

        $bookModel = new BookModel;
        if($bookModel->update($bookInfo,"id={$id}")){
            $this->sendJsonMessage("修改成功",0);
        }else{
            $this->sendJsonMessage("修改失败",1);
        }
    }

    //Json删除图书接口
    public function delete(){
        $this->accessJson();

        $id = $_POST['id'];

        $bookModel   = new BookModel;
        $borrowModel = new BorrowModel;
        if($bookModel->delete("id={$id}") && $borrowModel->delete("book_id={$id}")){
            $this->sendJsonMessage("删除成功",0);
        }else{
            $this->sendJsonMessage("删除失败",1);
        }
    }
}

================================================
FILE: Admin/Controller/BorrowController.class.php
================================================
<?php
namespace Admin\Controller;
use Base\BaseController;
use Admin\Model\BorrowModel;

final class Borrow extends BaseController{

    public function index(){
        $this->accessPage();

        $this->smarty->display("Borrow/index.html");
    }

    //Json借书和还书接口
    public function manage(){
        $this->accessJson();

        $bookId  =  $_POST['bookId'];
        $userId  =  $_POST['userId'];
        $action  =  $_POST['action'];

        if($userId == "" || $bookId == ""){
            $this->sendJsonMessage("请填写完整信息",1);
        }

        $borrowModel = new BorrowModel;
        if($action == "borrow"){
            //借书
            if($borrowModel->canBorrow($bookId,$userId)){
                $data = array(
                    "book_id"     =>  $bookId,
                    "user_id"     =>  $userId,
                    "borrow_date" =>  date("Y-m-d"),
                    "back_date"   =>  date("Y-m-d",strtotime("+2 month"))
                );
                if($borrowModel->insert($data)){
                    $this->sendJsonMessage("借书成功",0);
                }else{
                    $this->sendJsonMessage("借书失败",1);
                }
            }else{
                $this->sendJsonMessage("信息错误或该书已借出",1);
            }
        }else if($action == "return"){
            //还书
            if($borrowModel->canReturn($bookId,$userId)){
                if($borrowModel->delete("book_id={$bookId} AND user_id={$userId}")){
                    $this->sendJsonMessage("还书成功",0);
                }else{
                    $this->sendJsonMessage("还书失败",1);
                }
            }else{
                $this->sendJsonMessage("信息错误或该用户未借此书",1);
            }
        }else{
            $this->sendJsonMessage("参数错误",1);
        }
    }

    //Json续借接口
    public function prolong(){
        $this->accessJson();

        //未传参中断
        if(!isset($_POST['bookId']) || !isset($_POST['userId'])){
            $this->sendJsonMessage("缺少参数",1);
        }

        $bookId = $_POST['bookId'];
        $userId = $_POST['userId'];

        $borrowModel = new BorrowModel;
        $result = $borrowModel->fetchOne("book_id={$bookId} AND user_id={$userId}");

        //没有借书就不能续借
        if(empty($result)){
            $this->sendJsonMessage("该用户没有借阅此书",1);
        }
        //超期不能续借
        if(strtotime($result['back_date']) < time()){
            $this->sendJsonMessage("超期的书不能续借",1);
        }

        //计算应还时间
        $backTime = date("Y-m-d",strtotime("+1 month",strtotime($result['back_date'])));
        $data = array("back_date"=>$backTime);
        if($borrowModel->update($data,"book_id={$bookId} AND user_id={$userId}")){
            $this->sendJsonMessage("续借成功",0);
        }else{
            $this->sendJsonMessage("续借失败",1);
        }
    }

    //Json还书接口
    public function returnBook(){
        $this->accessJson();

        $bookId = $_POST['bookId'];
        $userId = $_POST['userId'];

        $borrowModel = new BorrowModel;
        if($borrowModel->canReturn($bookId,$userId)){
            if($borrowModel->delete("book_id={$bookId} AND user_id={$userId}")){
                $this->sendJsonMessage("还书成功",0);
            }else{
                $this->sendJsonMessage("还书失败",1);
            }
        }else{
            $this->sendJsonMessage("信息错误或该用户未借此书",1);
        }
    }
}

================================================
FILE: Admin/Controller/IndexController.class.php
================================================
<?php
namespace Admin\Controller;
use Base\BaseController;
use Admin\Model\UserModel;
use Admin\Model\BookModel;

final class Index extends BaseController{

    public function index(){
        $this->accessPage();

        $userModel = new UserModel;
        //查询用户人数
        $userNum   =  $userModel->rowCount("admin != 1");

        $bookModel = new BookModel;
        //查询图书数量
        $bookNum   =  $bookModel->rowCount();

        $this->smarty->assign("userNum",$userNum);
        $this->smarty->assign("bookNum",$bookNum);
        $this->smarty->display("Index/index.html"); 
    }

}

================================================
FILE: Admin/Controller/UserController.class.php
================================================
<?php
namespace Admin\Controller;
use Base\BaseController;
use Admin\Model\UserModel;
use Admin\Model\BorrowModel;
use Tool\Pager;

final class User extends BaseController{

    public function index(){
        $this->accessPage();

        //页面参数
        $currentPage = isset($_GET["page"]) ? $_GET["page"] : 1;    //当前页数
        $eachPerPage = 10;      //每页显示条数

        //获取搜索条件
        if(isset($_GET['name']) && !empty($_GET['name'])){
            $where = "name LIKE '%{$_GET['name']}%'";
            $parms = array("name"=>$_GET['name']);
            $mode  = "name";
        }else if(isset($_GET['userId']) && !empty($_GET['userId'])){
            $where = "id = '{$_GET['userId']}'";
            $parms = array("userId"=>$_GET['userId']);
            $mode  = "userId";
        }else{
            $where = "2>1";
            $parms = array();
            $mode  = "";
        }

        $userModel = new UserModel;
        //获取记录条数,用于计算总页面数目
        $count = $userModel->rowCount($where);

        //判断页数是否合法
        if($count != 0){
            if($currentPage < 1){
                $currentPage = 1;
            }else if($currentPage > ceil($count/$eachPerPage)){
                $currentPage = ceil($count/$eachPerPage);
            }
        }else{
            //记录数为0时,直接从第一页开始,避免offset计算错误
            $currentPage = 1;
        }

        //获取每页用户信息
        $offset = ($currentPage - 1) * $eachPerPage;
        $users = $userModel->fetchAllUser($where,"LIMIT {$offset},{$eachPerPage}");        

        //分页
        $pager = new Pager($currentPage,$count,$eachPerPage,"?p=Admin&c=User&a=index",$parms);

        $this->smarty->assign("users",$users);
        $this->smarty->assign("mode",$mode);
        $this->smarty->assign("pageStr",$pager->page());
        $this->smarty->display("User/index.html");
    }

    //显示添加用户界面
    public function add(){
        $this->accessPage();

        $this->smarty->display("User/add.html");
    }

    //显示管理用户界面
    public function manage(){
        $this->accessPage();

        $id = $_GET['id'];

        $userModel = new UserModel;
        //获取用户信息
        $userInfo  = $userModel->fetchOne("id={$id}");
        
        //阻止url非法传参
        if(empty($userInfo)){
            echo "<script>alert('该用户不存在');</script>";
            die();
        }

        $borrowModel = new BorrowModel;
        //获取用户借阅信息
        $borrowInfo = $borrowModel->getBorrowInfo("borrow_list.user_id={$id}");
        
        $this->smarty->assign("userInfo",$userInfo);
        $this->smarty->assign("borrowInfo",$borrowInfo);
        $this->smarty->display("User/manage.html");
    }

    //Json添加用户接口
    public function insert(){
        $this->accessJson();

        $user['id']      =  $_POST['userId'];
        $user['pwd']     =  md5($_POST['password']);
        $user['name']    =  $_POST['name'];
        $user['class']   =  $_POST['class'];
        $user['status']  =  $_POST['status'] ? 1 : 0;

        $usermodel = new UserModel;

        if(in_array("",$user)){
            $this->sendJsonMessage("请将信息填写完整",1);
        }

        if($usermodel->rowCount("id={$user['id']}")){
            $this->sendJsonMessage("该用户ID已存在",1);
        }

        if($usermodel->insert($user)){
            $this->sendJsonMessage("添加用户成功",0);
        }else{
            $this->sendJsonMessage("添加用户失败",1);
        }
    }

    //Json修改用户接口
    public function changeInfo(){
        $this->accessJson();

        $id             =  $_POST['userId'];
        $data['name']   =  $_POST['name'];
        $data['class']  =  $_POST['class'];

        if(in_array("",$data)){
            $this->sendJsonMessage("请填写完整信息",1);
        }

        $userModel = new UserModel;

        if($userModel->update($data,"id={$id}")){
            $this->sendJsonMessage("修改成功",0);
        }else{
            $this->sendJsonMessage("修改失败",1);
        }
    }

    //Json挂失用户接口
    public function lost(){
        $this->accessJson();

        $id  =  $_POST['userId'];

        $userModel = new UserModel;
        if($userModel->update(array("status"=>0),"id={$id}")){
            $this->sendJsonMessage("挂失成功",0);
        }else{
            $this->sendJsonMessage("挂失失败",1);
        }
    }

    //Json启用用户接口
    public function open(){
        $this->accessJson();

        $id  =  $_POST['userId'];

        $userModel = new UserModel;
        if($userModel->update(array("status"=>1),"id={$id}")){
            $this->sendJsonMessage("启用成功",0);
        }else{
            $this->sendJsonMessage("启用失败",1);
        }
    }

    //Json修改用户密码接口
    public function changePwd(){
        $this->accessJson();

        if(!$_POST['pwd']){
            $this->sendJsonMessage("请输入密码",1);
        }

        $id   = $_POST['userId'];
        $pwd  = md5($_POST['pwd']);

        $userModel = new UserModel;
        if($userModel->update(array("pwd"=>$pwd),"id={$id}")){
            $this->sendJsonMessage("修改成功",0);
        }else{
            $this->sendJsonMessage("修改失败",1);
        }
    }

    //Json删除用户接口
    public function delete(){
        $this->accessJson();

        $id  =  $_POST['userId'];

        $userModel   = new UserModel;
        $borrowModel = new BorrowModel;
        if($userModel->delete("id={$id}") && $borrowModel->delete("user_id={$id}")){
            $this->sendJsonMessage("删除成功",0);
        }else{
            $this->sendJsonMessage("删除失败",1);
        }
    }
}

================================================
FILE: Admin/Model/BookModel.class.php
================================================
<?php
namespace Admin\Model;
use Base\BaseModel;

final class BookModel extends BaseModel{

    //要操作的数据表名
    protected $table = "book_info";

    public function fetchAllWithJoin($where = "2>1",$limit = ""){

        $sql  = "SELECT id,name,author,user_id FROM {$this->table} ";
        $sql .= "LEFT JOIN borrow_list ON id=borrow_list.book_id ";
        $sql .= "WHERE {$where} ";
        $sql .= "{$limit}";
        
        $result = $this->Db->query($sql);

        //条数为1时,把一维数组转换成二维数组,避免某些foreach循环出错
        if(count($result) == count($result,1) && !empty($result)){
            $result = array($result);
        }
        
        return $result;
    }

    public function fetchOneWithJoin($where = "2>1"){

        $sql  = "SELECT {$this->table}.*,borrow_list.back_date,user.name AS user_name FROM {$this->table} ";
        $sql .= "LEFT JOIN borrow_list ON {$this->table}.id=borrow_list.book_id ";
        $sql .= "LEFT JOIN user ON user.id=borrow_list.user_id ";
        $sql .= "WHERE {$where} ";
        $sql .= "LIMIT 1";

        return $this->Db->query($sql);
    }

}

================================================
FILE: Admin/Model/BorrowModel.class.php
================================================
<?php
namespace Admin\Model;
use Base\BaseModel;

final class BorrowModel extends BaseModel{

    //操作的数据表名
    protected $table = "borrow_list";

    public function canBorrow($bookId,$userId){
        $sql  = "SELECT user.id FROM user,book_info ";
        $sql .= "WHERE user.id='{$userId}' AND book_info.id='{$bookId}' AND user.admin!=1 AND book_info.id NOT IN ";
        $sql .= "(SELECT book_id FROM {$this->table})";

        if($this->Db->rowCount($sql)){
            return true;
        }else{
            return false;
        }
    }

    public function canReturn($bookId,$userId){
        $sql  = "SELECT * FROM {$this->table} ";
        $sql .= "WHERE user_id='{$userId}' AND book_id='{$bookId}'";

        if($this->Db->rowCount($sql)){
            return true;
        }else{
            return false;
        }
    }

    public function getBorrowInfo($where){
        $sql  = "SELECT book_info.id,book_info.name,borrow_list.borrow_date,borrow_list.back_date FROM book_info ";
        $sql .= "LEFT JOIN {$this->table} ON book_info.id=borrow_list.book_id ";
        $sql .= "WHERE {$where}";

        $result =  $this->Db->query($sql);

        //条数为1时,把一维数组转换成二维数组,避免某些foreach循环出错
        if(count($result) == count($result,1) && !empty($result)){
            $result = array($result);
        }

        return $result;
    }
}

================================================
FILE: Admin/Model/UserModel.class.php
================================================
<?php
namespace Admin\Model;
use Base\BaseModel;

final class UserModel extends BaseModel{

    //操作的数据表名
    protected $table = "user";

    //获取所有除管理员外的用户信息
    public function fetchAllUser($where = "2>1",$limit = ""){
        $sql  = "SELECT id,name,class,status,last_login_time FROM {$this->table} ";
        $sql .= "WHERE {$where} AND admin!=1 ";
        $sql .= "{$limit}";
        
        $result =  $this->Db->query($sql);

        //条数为1时,把一维数组转换成二维数组,避免某些foreach循环出错
        if(count($result) == count($result,1) && !empty($result)){
            $result = array($result);
        }
        return $result;
    }

    //重写rowCount方法,将管理员排除在统计范围外
    public function rowCount($where = "2>1")
    {
        $sql  = "SELECT * FROM {$this->table} ";
        $sql .= "WHERE {$where} AND admin!=1";

        return $this->Db->rowCount($sql);
    }
}

================================================
FILE: Admin/View/Book/add.html
================================================
<!DOCTYPE html>
<html lang="zh-CN">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>图书馆管理系统</title>
    <!--jquery-->
    <script src="./Resources/jquery.min.js"></script>
    <!-- 最新版本的 Bootstrap 核心 CSS 文件 -->
    <link rel="stylesheet" href="./Resources/bootstrap.min.css">
    <!-- 最新的 Bootstrap 核心 JavaScript 文件 -->
    <script src="./Resources/bootstrap.min.js"></script>
</head>

<body>
    <nav class="navbar navbar-default">
        <div class="container-fluid">
            <!-- Brand and toggle get grouped for better mobile display -->
            <div class="navbar-header">
                <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#nav" aria-expanded="false">
                    <span class="icon-bar"></span>
                    <span class="icon-bar"></span>
                    <span class="icon-bar"></span>
                </button>
                <a class="navbar-brand" href="JavaScript:void(0)">
                    <b>图书馆管理系统</b>
                </a>
            </div>

            <!-- Collect the nav links, forms, and other content for toggling -->
            <div class="collapse navbar-collapse" id="nav">
                <ul class="nav navbar-nav">
                    <li>
                        <a href="?p=Admin&c=Index&a=index">主页</a>
                    </li>
                    <li class="active">
                        <a href="?p=Admin&c=Book&a=index">图书管理</a>
                    </li>
                    <li>
                        <a href="?p=Admin&c=User&a=index">用户管理</a>
                    </li>
                    <li>
                        <a href="?p=Admin&c=Borrow&a=index">借阅管理</a>
                    </li>
                </ul>
                <ul class="nav navbar-nav navbar-right">
                    <li>
                        <a href="JavaScript:void(0)" style="cursor:default">{<$smarty.session.userId>}</a>
                    </li>
                    <li>
                        <a href="?p=Common&c=Login&a=logout">退出</a>
                    </li>
                </ul>
            </div>
            <!-- /.navbar-collapse -->
        </div>
        <!-- /.container-fluid -->
    </nav>
    <div class="h3 text-center">
        <b>添加图书</b>
    </div>
    <form id="form" class="form-horizontal text-center" style="width:500px;margin: 20px auto 0;">
        <div class="form-group">
            <div class="input-group">
                <div class="input-group-addon">图书名</div>
                <input type="text" class="form-control" placeholder="请输入图书名" name="name">
            </div>
        </div>
        <div class="form-group">
            <div class="input-group">
                <div class="input-group-addon">作者</div>
                <input type="text" class="form-control" placeholder="请输入作者" name="author">
            </div>
        </div>
        <div class="form-group">
            <div class="input-group">
                <div class="input-group-addon">出版社</div>
                <input type="text" class="form-control" placeholder="请输入出版社" name="press">
            </div>
        </div>
        <div class="form-group">
            <div class="input-group">
                <div class="input-group-addon">出版时间</div>
                <input type="" class="form-control" placeholder="请输入出版时间" name="pressTime">
            </div>
        </div>
        <div class="form-group">
            <div class="input-group">
                <div class="input-group-addon">价格</div>
                <input type="text" class="form-control" placeholder="请输入价格" name="price">
                <div class="input-group-addon">元</div>
            </div>
        </div>
        <div class="form-group">
            <div class="input-group">
                <div class="input-group-addon">ISBN</div>
                <input type="text" class="form-control" placeholder="请输入ISBN" name="ISBN">
            </div>
        </div>
        <div class="form-group">
            <label class="text-left" style="width: 100%">作品简介:</label>
            <textarea class="form-control" id="text1" style="height: 200px;resize: none;" name="desc"></textarea>
        </div>
        <div class="form-group">
            <button type="button" id="submit" class="btn btn-primary" style="margin-right: 20px">添&nbsp;加</button>
            <button type="reset" class="btn btn-danger" style="margin-left: 20px">重&nbsp;置</button>
        </div>
    </form>
</body>
<script>

    $(function(){
        $("#submit").click(function(){
            $.post({
                url:"?p=Admin&c=Book&a=insert",
                data:$("#form").serialize(),
                success:function(data){
                    alert(data.message);
                    if(data.code == 0){
                        location.href = "?p=Admin&c=Book&a=index";
                    }
                }
            });
        });
    })

</script>
</html>

================================================
FILE: Admin/View/Book/detail.html
================================================
<!DOCTYPE html>
<html lang="zh-CN">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>图书馆管理系统</title>
    <!--jquery-->
    <script src="./Resources/jquery.min.js"></script>
    <!-- 最新版本的 Bootstrap 核心 CSS 文件 -->
    <link rel="stylesheet" href="./Resources/bootstrap.min.css">
    <!-- 最新的 Bootstrap 核心 JavaScript 文件 -->
    <script src="./Resources/bootstrap.min.js"></script>
</head>

<body>
    <nav class="navbar navbar-default">
        <div class="container-fluid">
            <!-- Brand and toggle get grouped for better mobile display -->
            <div class="navbar-header">
                <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#nav"
                    aria-expanded="false">
                    <span class="icon-bar"></span>
                    <span class="icon-bar"></span>
                    <span class="icon-bar"></span>
                </button>
                <a class="navbar-brand" href="JavaScript:void(0)">
                    <b>图书馆管理系统</b>
                </a>
            </div>

            <!-- Collect the nav links, forms, and other content for toggling -->
            <div class="collapse navbar-collapse" id="nav">
                <ul class="nav navbar-nav">
                    <li>
                        <a href="?p=Admin&c=Index&a=index">主页</a>
                    </li>
                    <li class="active">
                        <a href="?p=Admin&c=Book&a=index">图书管理</a>
                    </li>
                    <li>
                        <a href="?p=Admin&c=User&a=index">用户管理</a>
                    </li>
                    <li>
                        <a href="?p=Admin&c=Borrow&a=index">借阅管理</a>
                    </li>
                </ul>
                <ul class="nav navbar-nav navbar-right">
                    <li>
                        <a href="JavaScript:void(0)" style="cursor:default">{<$smarty.session.userId>}</a>
                    </li>
                    <li>
                        <a href="?p=Common&c=Login&a=logout">退出</a>
                    </li>
                </ul>
            </div>
            <!-- /.navbar-collapse -->
        </div>
        <!-- /.container-fluid -->
    </nav>
    <div class="h3 text-center">
        <b>图书详情</b>
    </div>
    <div class="form-horizontal text-center" style="width:500px;margin: 20px auto 0;">
        <div class="form-group">
            <div class="input-group">
                <div class="input-group-addon">图书名:</div>
                <input type="text" class="form-control" readonly value="{<$book.name>}">
            </div>
        </div>
        <div class="form-group">
            <div class="input-group">
                <div class="input-group-addon">作者:</div>
                <input type="text" class="form-control" readonly value="{<$book.author>}">
            </div>
        </div>
        <div class="form-group">
            <div class="input-group">
                <div class="input-group-addon">出版社:</div>
                <input type="text" class="form-control" readonly value="{<$book.press>}">
            </div>
        </div>
        <div class="form-group">
            <div class="input-group">
                <div class="input-group-addon">出版时间:</div>
                <input type="" class="form-control" readonly value="{<$book.press_time>}">
            </div>
        </div>
        <div class="form-group">
            <div class="input-group">
                <div class="input-group-addon">价格:</div>
                <input type="text" class="form-control" readonly value="{<$book.price>}">
                <div class="input-group-addon">元</div>
            </div>
        </div>
        <div class="form-group">
            <div class="input-group">
                <div class="input-group-addon">ISBN:</div>
                <input type="text" class="form-control" readonly value="{<$book.ISBN>}">
            </div>
        </div>
        <div class="form-group">
            <label class="text-left" style="width: 100%">作品简介:</label>
            <textarea class="form-control" style="height: 150px;resize:none;" readonly>{<$book.desc>}</textarea>
        </div>
        <div class="center-block" style="width:200px;">
            <div class="form-group">
                <div class="input-group">
                    <div class="input-group-addon">借出人</div>
                    <input type="text" class="form-control" readonly value="{<$book.user_name>}">
                </div>
            </div>
            <div class="form-group">
                <div class="input-group">
                    <div class="input-group-addon">应还日期</div>
                    <input type="text" class="form-control" readonly value="{<$book.back_date>}">
                </div>
            </div>
        </div>
    </div>
</body>

</html>

================================================
FILE: Admin/View/Book/edit.html
================================================
<!DOCTYPE html>
<html lang="zh-CN">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>图书馆管理系统</title>
    <!--jquery-->
    <script src="./Resources/jquery.min.js"></script>
    <!-- 最新版本的 Bootstrap 核心 CSS 文件 -->
    <link rel="stylesheet" href="./Resources/bootstrap.min.css">
    <!-- 最新的 Bootstrap 核心 JavaScript 文件 -->
    <script src="./Resources/bootstrap.min.js"></script>
</head>

<body>
    <nav class="navbar navbar-default">
        <div class="container-fluid">
            <!-- Brand and toggle get grouped for better mobile display -->
            <div class="navbar-header">
                <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#nav" aria-expanded="false">
                    <span class="icon-bar"></span>
                    <span class="icon-bar"></span>
                    <span class="icon-bar"></span>
                </button>
                <a class="navbar-brand" href="JavaScript:void(0)">
                    <b>图书馆管理系统</b>
                </a>
            </div>

            <!-- Collect the nav links, forms, and other content for toggling -->
            <div class="collapse navbar-collapse" id="nav">
                <ul class="nav navbar-nav">
                    <li>
                        <a href="?p=Admin&c=Index&a=index">主页</a>
                    </li>
                    <li class="active">
                        <a href="?p=Admin&c=Book&a=index">图书管理</a>
                    </li>
                    <li>
                        <a href="?p=Admin&c=User&a=index">用户管理</a>
                    </li>
                    <li>
                        <a href="?p=Admin&c=Borrow&a=index">借阅管理</a>
                    </li>
                </ul>
                <ul class="nav navbar-nav navbar-right">
                    <li>
                        <a href="JavaScript:void(0)" style="cursor:default">{<$smarty.session.userId>}</a>
                    </li>
                    <li>
                        <a href="?p=Common&c=Login&a=logout">退出</a>
                    </li>
                </ul>
            </div>
            <!-- /.navbar-collapse -->
        </div>
        <!-- /.container-fluid -->
    </nav>
    <div class="h3 text-center">
        <b>编辑图书</b>
    </div>
    <form id="form" class="form-horizontal text-center" style="width:500px;margin: 20px auto 0;">
        <div class="form-group">
            <div class="input-group">
                <div class="input-group-addon">图书名:</div>
                <input type="text" class="form-control" name="name" value="{<$book.name>}">
            </div>
        </div>
        <div class="form-group">
            <div class="input-group">
                <div class="input-group-addon">作者:</div>
                <input type="text" class="form-control" name="author" value="{<$book.author>}">
            </div>
        </div>
        <div class="form-group">
            <div class="input-group">
                <div class="input-group-addon">出版社:</div>
                <input type="text" class="form-control" name="press" value="{<$book.press>}">
            </div>
        </div>
        <div class="form-group">
            <div class="input-group">
                <div class="input-group-addon">出版时间:</div>
                <input type="" class="form-control" name="press_time" value="{<$book.press_time>}">
            </div>
        </div>
        <div class="form-group">
            <div class="input-group">
                <div class="input-group-addon">价格:</div>
                <input type="text" class="form-control" name="price" value="{<$book.price>}">
                <div class="input-group-addon">元</div>
            </div>
        </div>
        <div class="form-group">
            <div class="input-group">
                <div class="input-group-addon">ISBN:</div>
                <input type="text" class="form-control" name="ISBN" value="{<$book.ISBN>}">
            </div>
        </div>
        <div class="form-group">
            <label class="text-left" style="width: 100%">作品简介:</label>
            <textarea class="form-control" style="height: 200px; resize:none;" name="desc">{<$book.desc>}</textarea>
        </div>
        <div class="form_group">
            <input type="hidden" name="id" value="{<$book.id>}">
        </div>
        <div class="form-group">
            <button type="button" id="submit" class="btn btn-primary" style="margin-right: 20px">确&nbsp;认</button>
            <button type="reset" class="btn btn-danger" style="margin-left: 20px">重&nbsp;置</button>
        </div>
    </form>
</body>

<script>

    $(function(){

        $("#submit").click(function(){
            $.post({
                url: "?p=Admin&c=Book&a=update",
                data: $("#form").serialize(),
                success:function(data){
                    alert(data.message);
                    if(data.code == 0){
                        location.href = "?p=Admin&c=Book&a=index";
                    }
                }
            });
        });

    })

</script>

</html>

================================================
FILE: Admin/View/Book/index.html
================================================
<!DOCTYPE html>
<html lang="zh-CN">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>图书馆管理系统</title>
    <!--jquery-->
    <script src="./Resources/jquery.min.js"></script>
    <!-- 最新版本的 Bootstrap 核心 CSS 文件 -->
    <link rel="stylesheet" href="./Resources/bootstrap.min.css">
    <!-- 最新的 Bootstrap 核心 JavaScript 文件 -->
    <script src="./Resources/bootstrap.min.js"></script>
    <style type="text/css">
        td {
            vertical-align: middle !important;
        }
    </style>
</head>

<body>
    <nav class="navbar navbar-default">
        <div class="container-fluid">
            <!-- Brand and toggle get grouped for better mobile display -->
            <div class="navbar-header">
                <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#nav" aria-expanded="false">
                    <span class="icon-bar"></span>
                    <span class="icon-bar"></span>
                    <span class="icon-bar"></span>
                </button>
                <a class="navbar-brand" href="JavaScript:void(0)">
                    <b>图书馆管理系统</b>
                </a>
            </div>

            <!-- Collect the nav links, forms, and other content for toggling -->
            <div class="collapse navbar-collapse" id="nav">
                <ul class="nav navbar-nav">
                    <li>
                        <a href="?p=Admin&c=Index&a=index">主页</a>
                    </li>
                    <li class="active">
                        <a href="?p=Admin&c=Book&a=index">图书管理</a>
                    </li>
                    <li>
                        <a href="?p=Admin&c=User&a=index">用户管理</a>
                    </li>
                    <li>
                        <a href="?p=Admin&c=Borrow&a=index">借阅管理</a>
                    </li>
                </ul>
                <ul class="nav navbar-nav navbar-right">
                    <li>
                        <a href="JavaScript:void(0)" style="cursor:default">{<$smarty.session.userId>}</a>
                    </li>
                    <li>
                        <a href="?p=Common&c=Login&a=logout">退出</a>
                    </li>
                </ul>
            </div>
            <!-- /.navbar-collapse -->
        </div>
        <!-- /.container-fluid -->
    </nav>
    <div class="container-fluid">
        <div style="width:300px;" class="center-block">
            <div class="form-inline">
                <div class="form-group">
                    <input type="text" id="input" class="form-control" placeholder="输入搜索内容" name="keyword" style="width:130px;"
                           {<if $mode == keyword>}value='{<$smarty.get.keyword>}'{<else if $mode == bookId>}value='{<$smarty.get.bookId>}'{</if>}>
                </div>
                <div class="form-group">
                    <select name="type" class="form-control">
                        <option value="name" {<if $mode == keyword>}selected{</if>}>书名查询</option>
                        <option value="num" {<if $mode == bookId>}selected{</if>}>书号查询</option>
                    </select>
                </div>
                <div class="form-group">
                    <button type="button" id="research" class="btn btn-primary">搜索</button>
                </div>
            </div>
        </div>
        <a class="btn btn-info pull-right" href="?p=Admin&c=Book&a=add" style="margin:15px 10px 10px;">添加图书</a>
        <table class="table table-bordered table-hover text-center">
            <thead>
                <tr class="active">
                    <th class="text-center">图书号</th>
                    <th class="text-center">图书名</th>
                    <th class="text-center">作者</th>
                    <th class="text-center" style="width: 90px;">状态</th>
                    <th class="text-center" style="width: 100px;">操作</th>
                </tr>
            </thead>
            <tbody>
                {<if empty($books)>}
                    <tr>
                        <td colspan="5">无记录!</td>
                    </tr>
                {</if>}
                {<foreach $books as $book>}
                    <tr>
                        <td>{<$book.id>}</td>
                        <td>
                            <a href="?p=Admin&c=Book&a=detail&id={<$book.id>}">{<$book.name>}</a>
                        </td>
                        <td>{<$book.author>}</td>
                        {<if $book.user_id == "">}
                            <td class="success">在馆</td>
                        {<else>}
                            <td class="danger">已借出</td>
                        {</if>}
                        <td>
                            <a href="?p=Admin&c=Book&a=edit&id={<$book.id>}" class="btn btn-success btn-xs">修改</a>&nbsp;
                            <button class="btn btn-danger btn-xs delete" bookId="{<$book.id>}">删除</button>
                        </td>
                    </tr>
                {</foreach>}
            </tbody>
        </table>

        <!-- 分页 -->
        {<$pageStr>}

    </div>
</body>
<script>
    
    $(function(){

        //注册回车查找
        $("#input").keydown(function(event){
            if(event.keyCode == 13){
                $("#research").click();
            }
        });
        //查找
        $("#research").click(function(){
            if($("#input").val().length > 0){
                if($("[name='type']").val() == "name"){
                    var mode = "keyword";
                }else if($("[name='type']").val() == "num"){
                    var mode = "bookId";
                }
                location.href = "?p=Admin&c=Book&a=index&"+ mode + "=" + $("#input").val();
            }else{
                alert("请输入搜索条件");
            }
        });

        //删除
        $(".delete").click(function(){
            if(confirm("真的要删除吗?")){
                $.post({
                    url: "?p=Admin&c=Book&a=delete",
                    data: {"id":$(this).attr("bookId")},
                    success:function(data){
                        alert(data.message);
                        location.reload();
                    }
                });
            }
        })
    });

</script>

</html>

================================================
FILE: Admin/View/Borrow/index.html
================================================
<!DOCTYPE html>
<html lang="zh-CN">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>图书馆管理系统</title>
    <!--jquery-->
    <script src="./Resources/jquery.min.js"></script>
    <!-- 最新版本的 Bootstrap 核心 CSS 文件 -->
    <link rel="stylesheet" href="./Resources/bootstrap.min.css">
    <!-- 最新的 Bootstrap 核心 JavaScript 文件 -->
    <script src="./Resources/bootstrap.min.js"></script>
    <style type="text/css">
        td {
            vertical-align: middle !important;
        }
    </style>
</head>

<body>
    <nav class="navbar navbar-default">
        <div class="container-fluid">
            <!-- Brand and toggle get grouped for better mobile display -->
            <div class="navbar-header">
                <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#nav" aria-expanded="false">
                    <span class="icon-bar"></span>
                    <span class="icon-bar"></span>
                    <span class="icon-bar"></span>
                </button>
                <a class="navbar-brand" href="JavaScript:void(0)">
                    <b>图书馆管理系统</b>
                </a>
            </div>

            <!-- Collect the nav links, forms, and other content for toggling -->
            <div class="collapse navbar-collapse" id="nav">
                <ul class="nav navbar-nav">
                    <li>
                        <a href="?p=Admin&c=Index&a=index">主页</a>
                    </li>
                    <li>
                        <a href="?p=Admin&c=Book&a=index">图书管理</a>
                    </li>
                    <li>
                        <a href="?p=Admin&c=User&a=index">用户管理</a>
                    </li>
                    <li class="active">
                        <a href="?p=Admin&c=Borrow&a=index">借阅管理</a>
                    </li>
                </ul>
                <ul class="nav navbar-nav navbar-right">
                    <li>
                        <a href="JavaScript:void(0)" style="cursor:default">{<$smarty.session.userId>}</a>
                    </li>
                    <li>
                        <a href="?p=Common&c=Login&a=logout">退出</a>
                    </li>
                </ul>
            </div>
            <!-- /.navbar-collapse -->
        </div>
        <!-- /.container-fluid -->
    </nav>
    <div class="h3 text-center" style="margin: 100px 0 25px;">
        <b>借阅管理(模拟机器扫描操作)</b>
    </div>
    <div class="container" style="width: 350px;">
        <form id="form">
            <div class="form-group">
                <div class="input-group">
                    <div class="input-group-addon">读者ID</div>
                    <input type="text" class="form-control" name="userId" placeholder="请输入读者ID">
                </div>
            </div>
            <div class="form-group">
                <div class="input-group">
                    <div class="input-group-addon">图书号</div>
                    <input type="text" class="form-control" name="bookId" placeholder="请输入图书号">
                </div>
            </div>
            <div class="from-control text-center" style="margin-top: 25px;">
                <b>操作:&nbsp;&nbsp;</b>
                <label>
                    <input type="radio" name="action" value="borrow" checked>
                    <span>借&nbsp;书</span>
                </label>
                &nbsp;&nbsp;
                <label>
                    <input type="radio" name="action" value="return">
                    <span>还&nbsp;书</span>
                </label>
            </div>
            <div class="text-center" style="margin-top: 20px;">
                <button type="button" id="submit" class="btn btn-info">确&nbsp;定</button>&nbsp;&nbsp;&nbsp;&nbsp;
                <button type="reset" class="btn btn-danger">重&nbsp;置</button>
            </div>
        </form>
    </div>
</body>
<script>
    $(function(){

        $("#submit").click(function(){
            if($("[name='userId']").val().length == 0 || $("[name='bookId']").val().length == 0){
                alert("请填写完整信息");
                return false;
            }
            $.post({
                url: "?p=Admin&c=Borrow&a=manage",
                data: $("#form").serialize(),
                success:function(data){
                    alert(data.message);
                }
            })
        })

    })
</script>
</html>

================================================
FILE: Admin/View/Index/index.html
================================================
<!DOCTYPE html>
<html lang="zh-CN" style="height: 100%;">

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <meta http-equiv="X-UA-Compatible" content="ie=edge">
  <title>图书馆管理系统</title>
  <!--jquery-->
  <script src="./Resources/jquery.min.js"></script>
  <!-- 最新版本的 Bootstrap 核心 CSS 文件 -->
  <link rel="stylesheet" href="./Resources/bootstrap.min.css">
  <!-- 最新的 Bootstrap 核心 JavaScript 文件 -->
  <script src="./Resources/bootstrap.min.js"></script>
</head>

<body style="background-image: url(./Resources/index.jpg);background-size:100% 100%;">
  <nav class="navbar navbar-default">
    <div class="container-fluid">
      <!-- Brand and toggle get grouped for better mobile display -->
      <div class="navbar-header">
        <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#nav" aria-expanded="false">
          <span class="icon-bar"></span>
          <span class="icon-bar"></span>
          <span class="icon-bar"></span>
        </button>
        <a class="navbar-brand" href="JavaScript:void(0)">
          <b>图书馆管理系统</b>
        </a>
      </div>

      <!-- Collect the nav links, forms, and other content for toggling -->
      <div class="collapse navbar-collapse" id="nav">
        <ul class="nav navbar-nav">
          <li class="active">
            <a href="?p=Admin&c=Index&a=index">主页</a>
          </li>
          <li>
            <a href="?p=Admin&c=Book&a=index">图书管理</a>
          </li>
          <li>
            <a href="?p=Admin&c=User&a=index">用户管理</a>
          </li>
          <li>
            <a href="?p=Admin&c=Borrow&a=index">借阅管理</a>
          </li>
        </ul>
        <ul class="nav navbar-nav navbar-right">
          <li>
            <a href="JavaScript:void(0)" style="cursor:default">{<$smarty.session.userId>}</a>
          </li>
          <li>
            <a href="?p=Common&c=Login&a=logout">退出</a>
          </li>
          </li>
        </ul>
      </div>
      <!-- /.navbar-collapse -->
    </div>
    <!-- /.container-fluid -->
  </nav>
  <div class="container">
    <div class="center-block" style="margin-top:50px;padding:20px;width:500px;background-color:rgba(255, 255, 255, 0.55);border-radius:30px;">
      <h3 class="text-center">{<$smarty.session.userId>}管理员,你好!</h3>
      <h3 class="text-center" style="margin-top:70px;">当前共有{<$bookNum>}本图书</h3>
      <h3 class="text-center">当前共有{<$userNum>}位读者</h3>
      <h4 class="text-center" style="margin-top:70px;">上次登录时间:</h4>
      <h4 class="text-center">{<$smarty.session.last_login_time>}</h4>
    </div>
  </div>
</body>

</html>

================================================
FILE: Admin/View/User/add.html
================================================
<!DOCTYPE html>
<html lang="zh-CN">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>图书馆管理系统</title>
    <!--jquery-->
    <script src="./Resources/jquery.min.js"></script>
    <!-- 最新版本的 Bootstrap 核心 CSS 文件 -->
    <link rel="stylesheet" href="./Resources/bootstrap.min.css">
    <!-- 最新的 Bootstrap 核心 JavaScript 文件 -->
    <script src="./Resources/bootstrap.min.js"></script>
</head>

<body>
    <nav class="navbar navbar-default">
        <div class="container-fluid">
            <!-- Brand and toggle get grouped for better mobile display -->
            <div class="navbar-header">
                <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#nav" aria-expanded="false">
                    <span class="icon-bar"></span>
                    <span class="icon-bar"></span>
                    <span class="icon-bar"></span>
                </button>
                <a class="navbar-brand" href="JavaScript:void(0)">
                    <b>图书馆管理系统</b>
                </a>
            </div>

            <!-- Collect the nav links, forms, and other content for toggling -->
            <div class="collapse navbar-collapse" id="nav">
                <ul class="nav navbar-nav">
                    <li>
                        <a href="?p=Admin&c=Index&a=index">主页</a>
                    </li>
                    <li>
                        <a href="?p=Admin&c=Book&a=index">图书管理</a>
                    </li>
                    <li class="active">
                        <a href="?p=Admin&c=User&a=index">用户管理</a>
                    </li>
                    <li>
                        <a href="?p=Admin&c=Borrow&a=index">借阅管理</a>
                    </li>
                </ul>
                <ul class="nav navbar-nav navbar-right">
                    <li>
                        <a href="JavaScript:void(0)" style="cursor:default">{<$smarty.session.userId>}</a>
                    </li>
                    <li>
                        <a href="?p=Common&c=Login&a=logout">退出</a>
                    </li>
                </ul>
            </div>
            <!-- /.navbar-collapse -->
        </div>
        <!-- /.container-fluid -->
    </nav>
    <div class="h3 text-center" style="margin-top: 100px;">
        <b>添加用户</b>
    </div>
    <form id="form" class="form-horizontal text-center" style="width:250px;margin: 20px auto 0;">
        <div class="form-group">
            <div class="input-group">
                <div class="input-group-addon">用户ID</div>
                <input type="text" class="form-control" placeholder="请输入用户ID" name="userId">
            </div>
        </div>
        <div class="form-group">
            <div class="input-group">
                <div class="input-group-addon">密码</div>
                <input type="password" class="form-control" placeholder="请输入密码" name="password">
            </div>
        </div>
        <div class="form-group">
            <div class="input-group">
                <div class="input-group-addon">姓名</div>
                <input type="text" class="form-control" placeholder="请输入姓名" name="name">
            </div>
        </div>
        <div class="form-group">
            <div class="input-group">
                <div class="input-group-addon">班级</div>
                <input type="text" class="form-control" placeholder="请输入班级" name="class">
            </div>
        </div>
        <div class="form-group">
            <div class="input-group">
                <div class="input-group-addon">状态</div>
                <select name="status" class="form-control">
                    <option value="1">正常</option>
                    <option value="0">挂失</option>
                </select>
            </div>
        </div>
        <div class="form-group">
            <button type="button" id="submit" class="btn btn-primary" style="margin-right: 10px">添&nbsp;加</button>
            <button type="reset" id="reset" class="btn btn-danger" style="margin-left: 10px">重&nbsp;置</button>
        </div>
    </form>
</body>

<script>

    $(function(){

        $("#submit").click(function(){
            $.post({
                url: "?p=Admin&c=User&a=insert",
                data: $("#form").serialize(),
                success: function(data){
                    alert(data.message);
                    if(data.code == 0){
                        $("#reset").click();
                    }
                }
            })
        });

    })

</script>

</html>

================================================
FILE: Admin/View/User/index.html
================================================
<!DOCTYPE html>
<html lang="zh-CN">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>图书馆管理系统</title>
    <!--jquery-->
    <script src="./Resources/jquery.min.js"></script>
    <!-- 最新版本的 Bootstrap 核心 CSS 文件 -->
    <link rel="stylesheet" href="./Resources/bootstrap.min.css">
    <!-- 最新的 Bootstrap 核心 JavaScript 文件 -->
    <script src="./Resources/bootstrap.min.js"></script>
    <style type="text/css">
        td {
            vertical-align: middle !important;
        }
    </style>
</head>

<body>
    <nav class="navbar navbar-default">
        <div class="container-fluid">
            <!-- Brand and toggle get grouped for better mobile display -->
            <div class="navbar-header">
                <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#nav" aria-expanded="false">
                    <span class="icon-bar"></span>
                    <span class="icon-bar"></span>
                    <span class="icon-bar"></span>
                </button>
                <a class="navbar-brand" href="JavaScript:void(0)">
                    <b>图书馆管理系统</b>
                </a>
            </div>

            <!-- Collect the nav links, forms, and other content for toggling -->
            <div class="collapse navbar-collapse" id="nav">
                <ul class="nav navbar-nav">
                    <li>
                        <a href="?p=Admin&c=Index&a=index">主页</a>
                    </li>
                    <li>
                        <a href="?p=Admin&c=Book&a=index">图书管理</a>
                    </li>
                    <li class="active">
                        <a href="?p=Admin&c=User&a=index">用户管理</a>
                    </li>
                    <li>
                        <a href="?p=Admin&c=Borrow&a=index">借阅管理</a>
                    </li>
                </ul>
                <ul class="nav navbar-nav navbar-right">
                    <li>
                        <a href="JavaScript:void(0)" style="cursor:default">{<$smarty.session.userId>}</a>
                    </li>
                    <li>
                        <a href="?p=Common&c=Login&a=logout">退出</a>
                    </li>
                </ul>
            </div>
            <!-- /.navbar-collapse -->
        </div>
        <!-- /.container-fluid -->
    </nav>
    <div class="container-fluid">
        <div style="width:300px;" class="center-block">
            <div class="form-inline">
                <div class="form-group">
                    <input type="text" class="form-control" placeholder="输入搜索内容" id="input" style="width:130px;"
                    {<if $mode == name>}value='{<$smarty.get.name>}'{<else if $mode == userId>}value='{<$smarty.get.userId>}'{</if>}>
                </div>
                <div class="form-group">
                    <select name="type" class="form-control">
                        <option value="num" {<if $mode == userId>}selected{</if>}>ID查询</option>
                        <option value="name" {<if $mode == name>}selected{</if>}>姓名查询</option>
                    </select>
                </div>
                <div class="form-group">
                    <button type="button" id="research" class="btn btn-primary">搜索</button>
                </div>
            </div>
        </div>
        <div class="container">
            <a class="btn btn-info pull-right" href="?p=Admin&c=User&a=add" style="margin:15px 10px 10px;">添加用户</a>
            <table class="table table-bordered table-hover text-center">
                <thead>
                    <tr class="active">
                        <th class="text-center">用户ID</th>
                        <th class="text-center">姓名</th>
                        <th class="text-center">班级</th>
                        <th class="text-center">最后登陆时间</th>
                        <th class="text-center">状态</th>
                        <th class="text-center" style="width:70px;">操作</th>
                    </tr>
                </thead>
                <tbody>
                    {<if empty($users)>}
                        <tr>
                            <td colspan="6">无记录!</td>
                        </tr>
                    {</if>}
                    {<foreach $users as $user>}
                        <tr>
                            <td>{<$user.id>}</td>
                            <td>{<$user.name>}</td>
                            <td>{<$user.class>}</td>
                            <td>{<$user.last_login_time>}</td>
                            {<if $user.status == 1>}
                                <td class="success">正常</td>
                            {<else>}
                                <td class="danger">挂失</td>
                            {</if>}
                            <td>
                                <a href="?p=Admin&c=User&a=manage&id={<$user.id>}" class="btn btn-primary btn-xs">详情</a>
                            </td>
                        </tr>
                    {</foreach>}
                </tbody>
            </table>
        </div>
        <!-- 分页 -->
        {<$pageStr>}
</body>
<script>

    $(function(){

        //注册回车查找
        $("#input").keydown(function(event){
            if(event.keyCode == 13){
                $("#research").click();
            }
        });
        //查找
        $("#research").click(function(){
            if($("#input").val().length > 0){
                if($("[name='type']").val() == "name"){
                    var mode = "name";
                }else if($("[name='type']").val() == "num"){
                    var mode = "userId";
                }
                location.href = "?p=Admin&c=User&a=index&"+ mode + "=" + $("#input").val();
            }else{
                alert("请输入搜索条件");
            }
        });

    })

</script>

</html>

================================================
FILE: Admin/View/User/manage.html
================================================
<!DOCTYPE html>
<html lang="zh-CN">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>图书馆管理系统</title>
    <!--jquery-->
    <script src="./Resources/jquery.min.js"></script>
    <!-- 最新版本的 Bootstrap 核心 CSS 文件 -->
    <link rel="stylesheet" href="./Resources/bootstrap.min.css">
    <!-- 最新的 Bootstrap 核心 JavaScript 文件 -->
    <script src="./Resources/bootstrap.min.js"></script>
    <style type="text/css">
        td {
            vertical-align: middle !important;
        }
    </style>
</head>

<body>
    <nav class="navbar navbar-default">
        <div class="container-fluid">
            <!-- Brand and toggle get grouped for better mobile display -->
            <div class="navbar-header">
                <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#nav"
                    aria-expanded="false">
                    <span class="icon-bar"></span>
                    <span class="icon-bar"></span>
                    <span class="icon-bar"></span>
                </button>
                <a class="navbar-brand" href="JavaScript:void(0)">
                    <b>图书馆管理系统</b>
                </a>
            </div>

            <!-- Collect the nav links, forms, and other content for toggling -->
            <div class="collapse navbar-collapse" id="nav">
                <ul class="nav navbar-nav">
                    <li>
                        <a href="?p=Admin&c=Index&a=index">主页</a>
                    </li>
                    <li>
                        <a href="?p=Admin&c=Book&a=index">图书管理</a>
                    </li>
                    <li class="active">
                        <a href="?p=Admin&c=User&a=index">用户管理</a>
                    </li>
                    <li>
                        <a href="?p=Admin&c=Borrow&a=index">借阅管理</a>
                    </li>
                </ul>
                <ul class="nav navbar-nav navbar-right">
                    <li>
                        <a href="JavaScript:void(0)" style="cursor:default">{<$smarty.session.userId>}</a>
                    </li>
                    <li>
                        <a href="?p=Common&c=Login&a=logout">退出</a>
                    </li>
                </ul>
            </div>
            <!-- /.navbar-collapse -->
        </div>
        <!-- /.container-fluid -->
    </nav>
    <div class="text-center container" style="width:65%;margin-top:40px;padding-top:10px;background-color: #f5f5f5;border-radius:20px;">
        <div class="h4">
            <b>用户信息</b>
        </div>
        <p>用户ID:{<$userInfo.id>}</p>
        <p>用户姓名:{<$userInfo.name>}</p>
        <p>用户班级:{<$userInfo.class>}</p>
        <p>用户状态:{<if $userInfo.status>}正常{<else>}<font color='red'>挂失</font>{</if>}</p>
        <div style="width: 450px;margin:20px auto;overflow: hidden;display: flex;justify-content: space-between">
            <button class="btn btn-success" data-toggle="modal" data-target="#info">修改账户</button>
            <button class="btn btn-primary" data-toggle="modal" data-target="#lock"> {<if $userInfo.status>}挂失{<else>}启用{</if>}账户</button>
            <button class="btn btn-warning" data-toggle="modal" data-target="#pwd">修改密码</button>
            <button class="btn btn-danger" data-toggle="modal" data-target="#del">删除账户</button>
        </div>
    </div>
    <div class="container text-center" style="width: 65%;margin-top:30px;padding:0;">
        <div class="h4">
            <b>用户借阅信息</b>
        </div>
        <table class="table table-bordered table-hover">
            <thead>
                <tr class="active">
                    <th class="text-center">图书号</th>
                    <th class="text-center">图书名称</th>
                    <th class="text-center">借书时间</th>
                    <th class="text-center">应还时间</th>
                    <th class="text-center" style="width:100px;">操作</th>
                </tr>
            </thead>
            <tbody>
                {<if empty($borrowInfo)>}
                    <tr>
                        <td colspan="5">无记录!</td>
                    </tr>
                {</if>}
                {<foreach $borrowInfo as $one>}
                    <tr {<if strtotime($one.back_date) < time()>}class="danger"{</if>}>
                        <td>{<$one.id>}</td>
                        <td>{<$one.name>}</td>
                        <td>{<$one.borrow_date>}</td>
                        <td>{<$one.back_date>}</td>
                        <td bookId="{<$one.id>}">
                            <button class="btn btn-info btn-xs prolong {<if strtotime($one.back_date) < time()>}disabled{</if>}">续借</button>&nbsp;
                            <button class="btn btn-success btn-xs return">归还</button>
                        </td>
                    </tr>
                {</foreach>}
            </tbody>
        </table>
    </div>

    <div class="container-fluid text-center">
        <!-- 修改用户信息模态框(Modal) -->
        <div class="modal fade" id="info" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
            <div class="modal-dialog" style="margin-top:150px;">
                <div class="modal-content">
                    <form id="changeInfo">
                        <div class="modal-header">
                            <h4 class="modal-title" id="myModalLabel">
                                修改用户信息
                            </h4>
                        </div>
                        <div class="modal-body center-block" style="width:45%">
                            <div class="form-group">
                                <div class="input-group">
                                    <div class="input-group-addon">姓名</div>
                                    <input name="name" type="text" class="form-control" value="{<$userInfo.name>}">
                                </div>
                            </div>
                            <div class="form-group" style="margin-bottom:0">
                                <div class="input-group">
                                    <div class="input-group-addon">班级</div>
                                    <input name="class" type="text" class="form-control" value="{<$userInfo.class>}">
                                </div>
                            </div>
                        </div>
                        <div class="modal-footer">
                            <button id="changeButton" type="button" class="btn btn-primary">确认</button>
                            <button type="button" class="btn btn-default" data-dismiss="modal">关闭</button>
                        </div>
                    </form>
                </div>
                <!-- /.modal-content -->
            </div>
            <!-- /.modal -->
        </div>

        <!-- 挂失用户模态框(Modal) -->
        <div class="modal fade" id="lock" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
            <div class="modal-dialog" style="margin-top:150px;">
                <div class="modal-content">
                    <div class="modal-header">
                        <h4 class="modal-title" id="myModalLabel">
                            {<if $userInfo.status>}挂失{<else>}启用{</if>}账户
                        </h4>
                    </div>
                    <div class="modal-body">
                        <h4>确认要{<if $userInfo.status>}挂失{<else>}启用{</if>}账号为{<$userInfo.id>}的账户?</h3>
                    </div>
                    <div class="modal-footer">
                        <button id="{<if $userInfo.status>}lostButton{<else>}openButton{</if>}" class="btn btn-primary">确认</button>
                        <button type="button" class="btn btn-default" data-dismiss="modal">关闭</button>
                    </div>
                </div>
                <!-- /.modal-content -->
            </div>
            <!-- /.modal -->
        </div>

        <!-- 修改密码模态框(Modal) -->
        <div class="modal fade" id="pwd" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
            <div class="modal-dialog" style="margin-top:150px;">
                <div class="modal-content">
                    <div>
                        <div class="modal-header">
                            <h4 class="modal-title" id="myModalLabel">
                                修改密码
                            </h4>
                        </div>
                        <div class="modal-body center-block" style="width:45%">
                            <div class="form-group " style="margin-bottom:0">
                                <div class="input-group">
                                    <div class="input-group-addon">新密码</div>
                                    <input id="newPwd" type="password" class="form-control" placeholder="请输入新密码">
                                </div>
                            </div>
                        </div>
                        <div class="modal-footer">
                            <button id="pwdButton" type="button" class="btn btn-primary">确认</button>
                            <button type="button" class="btn btn-default" data-dismiss="modal">关闭</button>
                        </div>
                    </div>
                </div>
                <!-- /.modal-content -->
            </div>
            <!-- /.modal -->
        </div>

        <!-- 删除用户模态框(Modal) -->
        <div class="modal fade" id="del" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
            <div class="modal-dialog" style="margin-top:150px;">
                <div class="modal-content">
                    <div class="modal-header">
                        <h4 class="modal-title" id="myModalLabel">
                            删除账户
                        </h4>
                    </div>
                    <div class="modal-body">
                        <h4>确认要删除账号为{<$userInfo.id>}的账户?</h3>
                    </div>
                    <div class="modal-footer">
                        <button id="deleteButton" class="btn btn-primary">确认</button>
                        <button type="button" class="btn btn-default" data-dismiss="modal">关闭</button>
                    </div>
                </div>
                <!-- /.modal-content -->
            </div>
            <!-- /.modal -->
        </div>
    </div>
</body>
<script>

    $(function(){

        //更改信息
        $("#changeButton").click(function(){
            $.post({
                url: "?p=Admin&c=User&a=changeInfo",
                data: "userId={<$userInfo.id>}&" + $("#changeInfo").serialize(),
                success:function(data){
                    alert(data.message);
                    if(data.code == 0){
                        location.reload();
                    }
                }
            })
        });

        //挂失和启用
        $("#{<if $userInfo.status>}lostButton{<else>}openButton{</if>}").click(function(){
            $.post({
                url: "?p=Admin&c=User&a={<if $userInfo.status>}lost{<else>}open{</if>}",
                data:{
                    userId : "{<$userInfo.id>}"
                },
                success:function(data){
                    alert(data.message);
                    if(data.code == 0){
                        location.reload();
                    }
                }
            })
        });

        //修改密码
        $("#pwdButton").click(function(){
            $.post({
                url: "?p=Admin&c=User&a=changePwd",
                data:{
                    userId : "{<$userInfo.id>}",
                    pwd : $("#newPwd").val()
                },
                success:function(data){
                    alert(data.message);
                    if(data.code == 0){
                        location.reload();
                    }
                }
            })
        });

        //删除用户
        $("#deleteButton").click(function(){
            $.post({
                url: "?p=Admin&c=User&a=delete",
                data:{
                    userId : "{<$userInfo.id>}"
                },
                success:function(data){
                    alert(data.message);
                    if(data.code == 0){
                        location.href = "?p=Admin&c=User&a=index";
                    }
                }
            })
        });

        //续借
        $(".prolong").click(function(){
            $.post({
                url: "?p=Admin&c=Borrow&a=prolong",
                data:{
                    bookId : $(this).parent().attr("bookID"),
                    userId : "{<$userInfo.id>}"
                },
                success:function(data){
                    alert(data.message);
                    if(data.code == 0){
                        location.reload();
                    }
                }
            })
        });

        //还书
        $(".return").click(function(){
            $.post({
                url: "?p=Admin&c=Borrow&a=returnBook",
                data:{
                    bookId : $(this).parent().attr("bookID"),
                    userId : "{<$userInfo.id>}"
                },
                success:function(data){
                    alert(data.message);
                    if(data.code == 0){
                        location.reload();
                    }
                }
            })
        });

    })

</script>

</html>

================================================
FILE: Base/Base.class.php
================================================
<?php
abstract class Base{

    public static function Run(){
        self::pageInit();
        self::dirInit();
        self::autoLoad();
        self::readConf();
        self::getRequest();
        self::distributeRequest();
    }

    private static function pageInit(){
        header("Content-Type:text/html;charset:UTF-8");
        session_start();
    }
    
    private static function dirInit(){
        //文件路径初始化
        define("DS",DIRECTORY_SEPARATOR);
        define("ROOT",getcwd().DS);
    }

    private static function autoLoad(){
        //设置类的自动加载
        spl_autoload_register(function($className){
            $className = str_replace("\\",DS,$className);
            //获取类文件路径名
            $files = array(
                "Controller.class.php",
                ".class.php",
            );
            //循环包含需要的文件
            foreach($files as $file){
                $fileName = ROOT . $className . $file;
                if(file_exists($fileName)){
                    require_once($fileName);
                    break;
                }
            }
        });
    }

    private static function readConf(){
        $GLOBALS['conf'] = require_once("./Base/Conf.php");
    }

    //获取路由参数
    private static function getRequest(){
        $p = isset($_GET["p"]) ? $_GET['p'] : $GLOBALS['conf']['default_plantform'];
        $c = isset($_GET["c"]) ? $_GET['c'] : $GLOBALS['conf']['default_controller'];
        $a = isset($_GET["a"]) ? $_GET['a'] : $GLOBALS['conf']['default_action'];
        define("P",$p);
        define("C",$c);
        define("A",$a);
        //定义视图文件路径
        define("VIEWPATH",ROOT.P.DS."View".DS);
    }

    //分发请求
    private static function distributeRequest(){
        $className = "\\" . P . "\\Controller\\" . C;
        //  \Admin\Controller\Index
        $action = A;

        if(class_exists($className)){
            $Controller = new $className;
        }else{
            echo "c参数错误";
            die();
        }

        if(method_exists($Controller,$action)){
            $Controller->$action();
        }else{
            echo "a参数错误";
            die();
        }
    }

}

================================================
FILE: Base/BaseController.class.php
================================================
<?php
namespace Base;
use Tool\MySmarty;

abstract class BaseController{

    protected $smarty;
    
    public function __construct(){
        $this->smarty = MySmarty::getInstance();
    }

    //验证页面权限
    protected function accessPage(){
        if(isset($_SESSION['userId'])){
            if($_SESSION['admin'] == 1 && P == "Admin");
            else if($_SESSION['admin'] == 0 && P == "Home");
            else{
                $p = $_SESSION['admin'] ? "Admin" : "Home";
                header("location:?p={$p}&c=Index&a=index");
                die();
            }
        }else{
            header("location:?p=Common&c=Login&a=index");
            die();
        }
    }

    //验证接口权限
    protected function accessJson(){
        header("Content-Type:application/json");
        if(isset($_SESSION['userId'])){
            if($_SESSION['admin'] == 1 && P == "Admin");
            else if($_SESSION['admin'] == 0 && P == "Home");
            else{
                $this->sendJsonMessage("操作权限不足",1);
            }
        }else{
            $this->sendJsonMessage("未登陆",1);
        }
    }

    //返回Json信息
    protected function sendJsonMessage($message,$code){
        $message = array("message"=>$message,"code"=>$code);
        echo json_encode($message,JSON_UNESCAPED_UNICODE);
        die();
    }

}

================================================
FILE: Base/BaseModel.class.php
================================================
<?php
namespace Base;
use Tool\Db;

abstract class BaseModel{

    protected $Db;
    protected $table;   //操作的数据表名

    public function __construct(){
        $this->Db = Db::getInstance();
    }

    //获取一条数据
    public function fetchOne($where){
        $sql = "SELECT * FROM {$this->table} WHERE {$where}";
        return $this->Db->query($sql);
    }

    //获取全部数据
    public function fetchAll($where = "2>1"){
        $sql = "SELECT * FROM {$this->table} WHERE {$where}";
        $result =  $this->Db->query($sql);

        //条数为1时,把一维数组转换成二维数组,避免某些foreach循环出错
        if(count($result) == count($result,1) && !empty($result)){
            $result = array($result);
        }

        return $result;
    }

    //获取数据条数
    public function rowCount($where = "2>1"){
        $sql = "SELECT * FROM {$this->table} WHERE {$where}";
        return $this->Db->rowCount($sql);
    }

    //插入数据
    public function insert($data){
        $keys = "";
        $values  = "";
        foreach($data as $key=>$value){
            $keys .= "`{$key}`,";
            if($value == ""){
                $values .= "null,";
            }else{
                $values .= "'{$value}',";
            }
        }
        $keys = rtrim($keys,",");
        $values  = rtrim($values,",");
        $sql = "INSERT INTO {$this->table}({$keys}) VALUE({$values})";
        return $this->Db->exec($sql);
    }

    //更新数据
    public function update($data,$where){
        $update = "";
        foreach($data as $key => $value){
            $update .= "`{$key}`='{$value}',";
        }
        $update = rtrim($update,",");
        $sql = "UPDATE {$this->table} SET {$update} WHERE {$where}";
        return $this->Db->exec($sql);
    }

    //删除数据
    public function delete($where){
        $sql = "DELETE FROM {$this->table} WHERE {$where}";
        return $this->Db->exec($sql);
    }
}

================================================
FILE: Base/Conf.php
================================================
<?php
return array(
    //数据库配置
    'db_host'   =>  "127.0.0.1",
    'db_user'   =>  "root",
    'db_pwd'    =>  "root",
    'db_name'   =>  "mybook",
    'db_port'   =>  "3306",
    'charset'   =>  "utf8",

    //默认路由配置
    'default_plantform'   => "Common",
    'default_controller'  => "Login",
    'default_action'      => "index"
);

================================================
FILE: Common/Controller/LoginController.class.php
================================================
<?php
namespace Common\Controller;
use Base\BaseController;
use Common\Model\UserModel;
use Tool\Verify;

final class Login extends BaseController{
    
    //检测用户是否登陆,有则导向对应的主页
    private function checkLogin(){
        if(isset($_SESSION['userId'])){
            $p = $_SESSION['admin'] ? "Admin" : "Home";
            header("location:?p={$p}&c=Index&a=index");
            die();
        }
    }

    public function index(){
        $this->checkLogin();
        $this->smarty->display("login.html");
    }

    public function showVerify(){
        new Verify;
    }

    //Json登陆接口
    public function login(){
        header("Content-Type:application/json");

        $rightCode  =   strtolower($_SESSION['verifyCode']);//正确的验证码
        $code       =   strtolower($_POST['verify']);   //输入的验证码
        $userId     =   htmlentities($_POST['userId']);     //账号
        $password   =   md5($_POST['password']);            //密码

        //先验证验证码,正确再验证账号密码,减小数据库压力
        if($code != $rightCode){
            $this->sendJsonMessage("验证码错误",1);
        }
        
        //验证账号密码
        $userModel = new UserModel;
        $where = "id='{$userId}' and pwd='{$password}'";
        $result = $userModel->fetchOne($where);
        if(!empty($result) && $result['status'] == 1){

            $_SESSION['userId']           =     $userId;
            $_SESSION['admin']            =     $result['admin'];
            $_SESSION['last_login_time']  =     $result['last_login_time'];

            $message = array("message"=>"OK","code"=>0,"admin"=>"{$result['admin']}");
            //更新最后登陆时间
            $time = date('Y-m-d H:i:s');
            $userModel->update(array("last_login_time"=>$time),$where);
            
        }else if(!empty($result) && $result['status'] == 0){
            $message = array("message"=>"该账户已挂失,请联系管理员解决","code"=>1);
        }else{
            $message = array("message"=>"账号或密码错误","code"=>1);
            //销毁验证码session使其重新生成
            $_SESSION = array();
            session_destroy();  
        }
        echo json_encode($message,JSON_UNESCAPED_UNICODE);
    }

    //退出登陆
    public function logout(){
        $_SESSION = array();
        session_destroy();
        header("location:?p=Common&c=Login&a=index");
    }

}

================================================
FILE: Common/Model/UserModel.class.php
================================================
<?php
namespace Common\Model;
use Base\BaseModel;

final class UserModel extends BaseModel{
    
    //操作的数据表名
    protected $table = "user";

}

================================================
FILE: Common/View/login.html
================================================
<!DOCTYPE html>
<html lang="zh-CN" style="height: 100%;">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>图书馆管理系统</title>
    <!--jquery-->
    <script src="./Resources/jquery.min.js"></script>
    <!-- 最新版本的 Bootstrap 核心 CSS 文件 -->
    <link rel="stylesheet" href="./Resources/bootstrap.min.css">
    <!-- 最新的 Bootstrap 核心 JavaScript 文件 -->
    <script src="./Resources/bootstrap.min.js"></script>
</head>

<body style="background-image: url(./Resources/index.jpg);background-size:100% 100%;">
    <div class="container" style="padding:200px 0px">
        <div class="login" style="width:300px;height:280px;margin:0 auto;padding: 1px 40px;background-color: rgba(255, 255, 255, 0.55);border-radius:20px;display: none;">
            <h2 class="text-center">图书馆管理系统</h2>
            <form id="form" style="margin-top:20px;">
                <div class="form-group">
                    <div class="input-group" style="width:100%">
                        <input type="text" class="form-control" name="userId" placeholder="请输入账号">
                    </div>
                </div>
                <div class="form-group">
                    <div class="input-group" style="width:100%">
                        <input type="password" class="form-control" name="password" placeholder="请输入密码">
                    </div>
                </div>
                <div class="form-group form-inline">
                    <div class="input-group" style="width:155px">
                        <input type="text" class="form-control" name="verify" placeholder="请输入验证码">
                    </div>
                    <div class="input-group">
                        <img src="?p=Common&c=Login&a=showVerify" id="verifyPic" style="width:60px;height:34px;border-radius:4px;">
                    </div>
                </div>
                <button type="button" class="form-control btn btn-primary" id="submit">登录</button>
            </form>
        </div>
    </div>
</body>
<script>

    $(function(){
        $(".login").fadeIn(800);
        
        //注册点击更换验证码事件
        $("#verifyPic").click(function(){
            $(this).attr('src',"?p=Common&c=Login&a=showVerify&" + Math.random()); 
        });

        //注册回车登陆事件
        $("[name='verify']").keydown(function(event){
            if(event.keyCode == 13){
                $("#submit").click();
            }
        });
        //登陆
        $("#submit").click(function(){
            if($("[name='userId']").val().length == 0 || $("[name='password']").val().length == 0){
                alert("请输入账号或密码!");
                return false;
            }else if($("[name='verify']").val().length != 4){
                alert("验证码必须为4位!");
                return false;
            }
            $.post({
                url:"?p=Common&c=Login&a=login",
                data:$("#form").serialize(),
                success:function(data){
                    if(data.code == 0 && data.admin == 1){
                        //管理员登陆
                        location.href = "?p=Admin&c=Index&a=index";
                    }else if(data.code == 0 && data.admin == 0){
                        //普通用户登陆
                        location.href = "?p=Home&c=Index&a=index";
                    }else{
                        alert(data.message);
                        $("#verifyPic").click();
                        $("[name='verify']").val("");
                    }
                }
            });
        })
    });
</script>

</html>

================================================
FILE: Home/Controller/BookController.class.php
================================================
<?php
namespace Home\Controller;
use Base\BaseController;
use Home\Model\BookModel;
use Tool\Pager;

final class Book extends BaseController{

    public function index(){
        $this->accessPage();

        //页面参数
        $currentPage = isset($_GET["page"]) ? $_GET["page"] : 1;    //当前页数
        $eachPerPage = 10;      //每页显示条数

        //获取搜索条件
        if(isset($_GET['keyword']) && !empty($_GET['keyword'])){
            $where = "name LIKE '%{$_GET['keyword']}%'";
            $parms = array("keyword"=>$_GET['keyword']);
            $mode  = "keyword";
        }else if(isset($_GET['bookId']) && !empty($_GET['bookId'])){
            $where = "id = '{$_GET['bookId']}'";
            $parms = array("bookId"=>$_GET['bookId']);
            $mode  = "bookId";
        }else{
            $where = "2>1";
            $parms = array();
            $mode  = "";
        }
        
        $bookModel = new BookModel;
        //获取图书总数用于计算总页数
        $count  = $bookModel->rowCount($where);

        //判断页数是否合法
        if($count != 0){
            if($currentPage < 1){
                $currentPage = 1;
            }else if($currentPage > ceil($count/$eachPerPage)){
                $currentPage = ceil($count/$eachPerPage);
            }
        }else{
            //记录数为0时,直接从第一页开始,避免offset计算错误
            $currentPage = 1;
        }

        //获取每页图书信息
        $offset = ($currentPage - 1) * $eachPerPage;
        $books = $bookModel->fetchAllWithJoin($where,"LIMIT {$offset},{$eachPerPage}");

        //分页
        $pager = new Pager($currentPage,$count,$eachPerPage,"?p=Home&c=Book&a=index",$parms);

        $this->smarty->assign("books",$books);
        $this->smarty->assign("mode",$mode);
        $this->smarty->assign("pageStr",$pager->page());
        $this->smarty->display("Book/index.html");
    }

    public function detail(){
        $this->accessPage();

        $id = $_GET['id'];

        $bookModel = new BookModel;
        $result = $bookModel->fetchOneWithJoin("book_info.id={$id}");
        
        $this->smarty->assign("book",$result);
        $this->smarty->display("Book/detail.html");
    }

}

================================================
FILE: Home/Controller/BorrowController.class.php
================================================
<?php
namespace Home\Controller;
use Base\BaseController;
use Home\Model\BorrowModel;

final class Borrow extends BaseController{

    protected $table = "borrow_list";

    //Json续借接口
    public function prolong(){
        $this->accessJson();

        //未传参中断
        if(!isset($_POST['bookId'])){
            $this->sendJsonMessage("缺少bookId参数",1);
        }

        $bookId = $_POST['bookId'];

        $borrowModel = new BorrowModel;
        $result = $borrowModel->fetchOne("book_id={$bookId} AND user_id={$_SESSION['userId']}");

        //没有借书就不能续借
        if(empty($result)){
            $this->sendJsonMessage("该用户没有借阅此书",1);
        }
        //超期不能续借
        if(strtotime($result['back_date']) < time()){
            $this->sendJsonMessage("超期的书不能续借",1);
        }

        //计算应还时间
        $backTime = date("Y-m-d",strtotime("+1 month",strtotime($result['back_date'])));
        $data = array("back_date"=>$backTime);
        if($borrowModel->update($data,"book_id={$bookId} AND user_id={$_SESSION['userId']}")){
            $this->sendJsonMessage("续借成功",0);
        }else{
            $this->sendJsonMessage("续借失败",1);
        }
    }
}

================================================
FILE: Home/Controller/IndexController.class.php
================================================
<?php
namespace Home\Controller;
use Base\BaseController;
use Home\Model\UserModel;
use Home\Model\BookModel;
use Home\Model\BorrowModel;

final class Index extends BaseController{

    public function index(){
        $this->accessPage();

        //用户信息
        $userModel   =  new UserModel;
        $userName    =  $userModel->fetchOne("id={$_SESSION['userId']}")['name'];

        //图书总数
        $bookModel   =  new BookModel;
        $bookNum     =  $bookModel->rowCount();

        //借阅信息
        $borrowModel   = new BorrowModel;
        $bookInfo      = $borrowModel->fetchAll("user_id={$_SESSION['userId']}");
        $borrowBookNum = count($bookInfo);
        $outDateBook   = 0;
        foreach($bookInfo as $value){
            if(strtotime($value['back_date']) < time()){
                $outDateBook++;
            }
        }
        
        $this->smarty->assign("userName",$userName);
        $this->smarty->assign("bookNum",$bookNum);
        $this->smarty->assign("borrowBookNum",$borrowBookNum);
        $this->smarty->assign("outDateBook",$outDateBook);
        $this->smarty->display("Index/index.html");
    }

}

================================================
FILE: Home/Controller/UserController.class.php
================================================
<?php
namespace Home\Controller;
use Base\BaseController;
use Home\Model\UserModel;
use Home\Model\BorrowModel;

final class User extends BaseController{

    public function index(){
        $this->accessPage();

        //用户信息
        $userModel = new UserModel;
        $userInfo  = $userModel->fetchOne("id={$_SESSION['userId']}");

        //借阅书籍详情
        $borrowModel = new BorrowModel;
        $borrowInfo  = $borrowModel->getBorrowInfo();

        $this->smarty->assign("borrowInfo",$borrowInfo);
        $this->smarty->assign("userInfo",$userInfo);
        $this->smarty->display("User/index.html");
    }

    //Json挂失接口
    public function lost(){
        $this->accessJson();

        $id = $_SESSION['userId'];

        $userModel = new UserModel;
        if($userModel->update(array("status"=>0),"id={$id}")){
            //挂失成功后销毁session,使登陆失效
            $_SESSION = array();
            session_destroy();
            $this->sendJsonMessage("挂失成功",0);
        }else{
            $this->sendJsonMessage("挂失失败",1);
        }
    }

    //Json修改密码接口
    public function changePwd(){
        $this->accessJson();

        $originPwd  =   md5($_POST['originPwd']);
        $newPwd     =   md5($_POST['newPwd']);
        $confrimPwd =   md5($_POST['confirmPwd']);

        //确认密码二次验证,防止非法提交
        if($newPwd != $confrimPwd){
            $this->sendJsonMessage("两次输入的密码不一致",1);
        }
        
        $userModel = new UserModel;
        if($userModel->rowCount("id={$_SESSION['userId']} and pwd='{$originPwd}'")){
            if($userModel->update(array("pwd"=>$newPwd),"id={$_SESSION['userId']} and pwd='{$originPwd}'")){
                //更改密码后销毁当前session
                $_SESSION = array();
                session_destroy();
                $this->sendJsonMessage("密码修改成功",0);
            }else{
                $this->sendJsonMessage("密码修改失败",1);
            }
        }else{
            $this->sendJsonMessage("原密码错误",1);
        }
    }

}

================================================
FILE: Home/Model/BookModel.class.php
================================================
<?php
namespace Home\Model;
use Base\BaseModel;

final class BookModel extends BaseModel{

    protected $table = "book_info";

    public function fetchAllWithJoin($where = "2>1",$limit = ""){

        $sql  = "SELECT id,name,author,user_id FROM {$this->table} ";
        $sql .= "LEFT JOIN borrow_list ON id=borrow_list.book_id ";
        $sql .= "WHERE {$where} ";
        $sql .= "{$limit}";
        
        $result = $this->Db->query($sql);

        //条数为1时,把一维数组转换成二维数组,避免某些foreach循环出错
        if(count($result) == count($result,1) && !empty($result)){
            $result = array($result);
        }
        
        return $result;
    }

    public function fetchOneWithJoin($where = "2>1"){

        $sql  = "SELECT {$this->table}.*,borrow_list.back_date,user.name AS user_name FROM {$this->table} ";
        $sql .= "LEFT JOIN borrow_list ON {$this->table}.id=borrow_list.book_id ";
        $sql .= "LEFT JOIN user ON user.id=borrow_list.user_id ";
        $sql .= "WHERE {$where} ";
        $sql .= "LIMIT 1";

        return $this->Db->query($sql);
    }

}

================================================
FILE: Home/Model/BorrowModel.class.php
================================================
<?php
namespace Home\Model;
use Base\BaseModel;

final class BorrowModel extends BaseModel{

    protected $table = "borrow_list";

    //获取用户借阅信息
    public function getBorrowInfo(){

        $sql  = "SELECT book_id,book_info.name,borrow_date,back_date FROM {$this->table},book_info ";
        $sql .= "WHERE {$this->table}.book_id=book_info.id AND user_id={$_SESSION['userId']}";

        $result =  $this->Db->query($sql);

        //条数为1时,把一维数组转换成二维数组,避免某些foreach循环出错
        if(count($result) == count($result,1) && !empty($result)){
            $result = array($result);
        }
        return $result;
    }
    
}

================================================
FILE: Home/Model/UserModel.class.php
================================================
<?php
namespace Home\Model;
use Base\BaseModel;

final class UserModel extends BaseModel{

    //操作的数据表名
    protected $table = "user";

}

================================================
FILE: Home/View/Book/detail.html
================================================
<!DOCTYPE html>
<html lang="zh-CN">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>图书馆管理系统</title>
    <!--jquery-->
    <script src="./Resources/jquery.min.js"></script>
    <!-- 最新版本的 Bootstrap 核心 CSS 文件 -->
    <link rel="stylesheet" href="./Resources/bootstrap.min.css">
    <!-- 最新的 Bootstrap 核心 JavaScript 文件 -->
    <script src="./Resources/bootstrap.min.js"></script>
</head>

<body>
    <nav class="navbar navbar-default">
        <div class="container-fluid">
            <!-- Brand and toggle get grouped for better mobile display -->
            <div class="navbar-header">
                <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#nav"
                    aria-expanded="false">
                    <span class="icon-bar"></span>
                    <span class="icon-bar"></span>
                    <span class="icon-bar"></span>
                </button>
                <a class="navbar-brand" href="JavaScript:void(0)">
                    <b>图书馆管理系统</b>
                </a>
            </div>

            <!-- Collect the nav links, forms, and other content for toggling -->
            <div class="collapse navbar-collapse" id="nav">
                <ul class="nav navbar-nav">
                    <li>
                        <a href="?p=Home&c=Index&a=index">主页</a>
                    </li>
                    <li class="active">
                        <a href="?p=Home&c=Book&a=index">图书查询</a>
                    </li>
                    <li>
                        <a href="?p=Home&c=User&a=index">个人中心</a>
                    </li>
                </ul>
                <ul class="nav navbar-nav navbar-right">
                    <li>
                        <a href="JavaScript:void(0)" style="cursor:default">{<$smarty.session.userId>}</a>
                    </li>
                    <li>
                        <a href="?p=Common&c=Login&a=logout">退出</a>
                    </li>
                </ul>
            </div>
            <!-- /.navbar-collapse -->
        </div>
        <!-- /.container-fluid -->
    </nav>
    <div class="h3 text-center">
        <b>图书详情</b>
    </div>
    <div class="form-horizontal text-center" style="width:500px;margin: 20px auto 0;">
        <div class="form-group">
            <div class="input-group">
                <div class="input-group-addon">图书名:</div>
                <input type="text" class="form-control" readonly value="{<$book.name>}">
            </div>
        </div>
        <div class="form-group">
            <div class="input-group">
                <div class="input-group-addon">作者:</div>
                <input type="text" class="form-control" readonly value="{<$book.author>}">
            </div>
        </div>
        <div class="form-group">
            <div class="input-group">
                <div class="input-group-addon">出版社:</div>
                <input type="text" class="form-control" readonly value="{<$book.press>}">
            </div>
        </div>
        <div class="form-group">
            <div class="input-group">
                <div class="input-group-addon">出版时间:</div>
                <input type="" class="form-control" readonly value="{<$book.press_time>}">
            </div>
        </div>
        <div class="form-group">
            <div class="input-group">
                <div class="input-group-addon">价格:</div>
                <input type="text" class="form-control" readonly value="{<$book.price>}">
                <div class="input-group-addon">元</div>
            </div>
        </div>
        <div class="form-group">
            <div class="input-group">
                <div class="input-group-addon">ISBN:</div>
                <input type="text" class="form-control" readonly value="{<$book.ISBN>}">
            </div>
        </div>
        <div class="form-group">
            <label class="text-left" style="width: 100%">作品简介:</label>
            <textarea class="form-control" style="height: 150px;resize:none;" readonly>{<$book.desc>}</textarea>
        </div>
        <div class="center-block" style="width:150px;">
            <div class="form-group">
                <div class="input-group">
                    <div class="input-group-addon">借出人</div>
                    <input type="text" class="form-control" readonly value="{<$book.user_name>}">
                </div>
            </div>
            <div class="form-group">
                <div class="input-group">
                    <div class="input-group-addon">应还日期</div>
                    <input type="text" class="form-control" readonly value="{<$book.back_date>}">
                </div>
            </div>
        </div>
    </div>
</body>

</html>

================================================
FILE: Home/View/Book/index.html
================================================
<!DOCTYPE html>
<html lang="zh-CN">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>图书馆管理系统</title>
    <!--jquery-->
    <script src="./Resources/jquery.min.js"></script>
    <!-- 最新版本的 Bootstrap 核心 CSS 文件 -->
    <link rel="stylesheet" href="./Resources/bootstrap.min.css">
    <!-- 最新的 Bootstrap 核心 JavaScript 文件 -->
    <script src="./Resources/bootstrap.min.js"></script>
    <style type="text/css">
        td {
            vertical-align: middle !important;
        }
    </style>
</head>

<body>
    <nav class="navbar navbar-default">
        <div class="container-fluid">
            <!-- Brand and toggle get grouped for better mobile display -->
            <div class="navbar-header">
                <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#nav" aria-expanded="false">
                    <span class="icon-bar"></span>
                    <span class="icon-bar"></span>
                    <span class="icon-bar"></span>
                </button>
                <a class="navbar-brand" href="JavaScript:void(0)">
                    <b>图书馆管理系统</b>
                </a>
            </div>

            <!-- Collect the nav links, forms, and other content for toggling -->
            <div class="collapse navbar-collapse" id="nav">
                <ul class="nav navbar-nav">
                    <li>
                        <a href="?p=Home&c=Index&a=index">主页</a>
                    </li>
                    <li class="active">
                        <a href="?p=Home&c=Book&a=index">图书查询</a>
                    </li>
                    <li>
                        <a href="?p=Home&c=User&a=index">个人中心</a>
                    </li>
                </ul>
                <ul class="nav navbar-nav navbar-right">
                    <li>
                        <a href="JavaScript:void(0)" style="cursor:default">{<$smarty.session.userId>}</a>
                    </li>
                    <li>
                        <a href="?p=Common&c=Login&a=logout">退出</a>
                    </li>
                </ul>
            </div>
            <!-- /.navbar-collapse -->
        </div>
        <!-- /.container-fluid -->
    </nav>
    <div class="container-fluid">
        <div style="width:300px;" class="center-block">
            <div class="form-inline">
                <div class="form-group">
                    <input type="text" id="input" class="form-control" placeholder="输入搜索内容" name="keyword" style="width:130px;"
                           {<if $mode == keyword>}value='{<$smarty.get.keyword>}'{<else if $mode == bookId>}value='{<$smarty.get.bookId>}'{</if>}>
                </div>
                <div class="form-group">
                    <select name="type" class="form-control">
                        <option value="name" {<if $mode == keyword>}selected{</if>}>书名查询</option>
                        <option value="num" {<if $mode == bookId>}selected{</if>}>书号查询</option>
                    </select>
                </div>
                <div class="form-group">
                    <button type="button" id="research" class="btn btn-primary">搜索</button>
                </div>
            </div> 
        </div>
        <table class="table table-bordered table-hover text-center" style="margin-top:30px;">
            <thead>
                <tr class="active">
                    <th class="text-center">图书号</th>
                    <th class="text-center">图书名</th>
                    <th class="text-center">作者</th>
                    <th class="text-center" style="width: 90px;">状态</th>
                </tr>
            </thead>
            <tbody>
                {<if empty($books)>}
                    <tr>
                        <td colspan="4">无记录!</td>
                    </tr>
                {</if>}
                {<foreach $books as $book>}
                    <tr>
                        <td>{<$book.id>}</td>
                        <td>
                            <a href="?p=Home&c=Book&a=detail&id={<$book.id>}">{<$book.name>}</a>
                        </td>
                        <td>{<$book.author>}</td>
                        {<if $book.user_id == "">}
                        <td class="success">在馆</td>
                        {<else>}
                        <td class="danger">已借出</td>
                        {</if>}
                    </tr>
                {</foreach>}
            </tbody>
        </table>

        <!-- 分页 -->
        {<$pageStr>}
        
    </div>
</body>
<script>
    
    $(function(){

        //注册回车查找
        $("#input").keydown(function(event){
            if(event.keyCode == 13){
                $("#research").click();
            }
        });
        //查找
        $("#research").click(function(){
            if($("#input").val().length > 0){
                if($("[name='type']").val() == "name"){
                    var mode = "keyword";
                }else if($("[name='type']").val() == "num"){
                    var mode = "bookId";
                }
                location.href = "?p=Home&c=Book&a=index&"+ mode + "=" + $("#input").val();
            }else{
                alert("请输入搜索条件");
            }
        });
    });

</script>

</html>

================================================
FILE: Home/View/Index/index.html
================================================
<!DOCTYPE html>
<html lang="zh-CN" style="height: 100%;">

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <meta http-equiv="X-UA-Compatible" content="ie=edge">
  <title>图书馆管理系统</title>
  <!--jquery-->
  <script src="./Resources/jquery.min.js"></script>
  <!-- 最新版本的 Bootstrap 核心 CSS 文件 -->
  <link rel="stylesheet" href="./Resources/bootstrap.min.css">
  <!-- 最新的 Bootstrap 核心 JavaScript 文件 -->
  <script src="./Resources/bootstrap.min.js"></script>
</head>

<body style="background-image: url(./Resources/index.jpg);background-size:100% 100%;">
  <nav class="navbar navbar-default">
    <div class="container-fluid">
      <!-- Brand and toggle get grouped for better mobile display -->
      <div class="navbar-header">
        <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#nav" aria-expanded="false">
          <span class="icon-bar"></span>
          <span class="icon-bar"></span>
          <span class="icon-bar"></span>
        </button>
        <a class="navbar-brand" href="JavaScript:void(0)">
          <b>图书馆管理系统</b>
        </a>
      </div>

      <!-- Collect the nav links, forms, and other content for toggling -->
      <div class="collapse navbar-collapse" id="nav">
        <ul class="nav navbar-nav">
          <li class="active">
            <a href="?p=Home&c=Index&a=index">主页</a>
          </li>
          <li>
            <a href="?p=Home&c=Book&a=index">图书查询</a>
          </li>
          <li>
            <a href="?p=Home&c=User&a=index">个人中心</a>
          </li>
        </ul>
        <ul class="nav navbar-nav navbar-right">
          <li>
            <a href="JavaScript:void(0)" style="cursor:default">{<$smarty.session.userId>}</a>
          </li>
          <li>
            <a href="?p=Common&c=Login&a=logout">退出</a>
          </li>
        </ul>
      </div>
      <!-- /.navbar-collapse -->
    </div>
    <!-- /.container-fluid -->
  </nav>
  <div class="container">
    <div class="center-block" style="margin-top:50px;padding:20px;width:500px;background-color:rgba(255, 255, 255, 0.55);border-radius:30px;">
      <h3 class="text-center">{<$userName>}同学,你好!</h3>
      <h3 class="text-center" style="margin-top:70px;">当前共有{<$bookNum>}本图书</h3>
      <h3 class="text-center">你已借{<$borrowBookNum>}本书</h3>
      <h3 class="text-center">已超期{<$outDateBook>}本书</h3>
      <h4 class="text-center" style="margin-top:70px;">上次登录时间:</h4>
      <h4 class="text-center">{<$smarty.session.last_login_time>}</h4>
    </div>
  </div>
</body>

</html>

================================================
FILE: Home/View/User/index.html
================================================
<!DOCTYPE html>
<html lang="zh-CN">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>图书馆管理系统</title>
    <!--jquery-->
    <script src="./Resources/jquery.min.js"></script>
    <!-- 最新版本的 Bootstrap 核心 CSS 文件 -->
    <link rel="stylesheet" href="./Resources/bootstrap.min.css">
    <!-- 最新的 Bootstrap 核心 JavaScript 文件 -->
    <script src="./Resources/bootstrap.min.js"></script>
    <style type="text/css">
        td {
            vertical-align: middle !important;
        }
    </style>
</head>

<body>
    <nav class="navbar navbar-default">
        <div class="container-fluid">
            <!-- Brand and toggle get grouped for better mobile display -->
            <div class="navbar-header">
                <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#nav"
                    aria-expanded="false">
                    <span class="icon-bar"></span>
                    <span class="icon-bar"></span>
                    <span class="icon-bar"></span>
                </button>
                <a class="navbar-brand" href="JavaScript:void(0)">
                    <b>图书馆管理系统</b>
                </a>
            </div>

            <!-- Collect the nav links, forms, and other content for toggling -->
            <div class="collapse navbar-collapse" id="nav">
                <ul class="nav navbar-nav">
                    <li>
                        <a href="?p=Home&c=Index&a=index">主页</a>
                    </li>
                    <li>
                        <a href="?p=Home&c=Book&a=index">图书查询</a>
                    </li>
                    <li class="active">
                        <a href="?p=Home&c=User&a=index">个人中心</a>
                    </li>
                </ul>
                <ul class="nav navbar-nav navbar-right">
                    <li>
                        <a href="JavaScript:void(0)" style="cursor:default">{<$smarty.session.userId>}</a>
                    </li>
                    <li>
                        <a href="?p=Common&c=Login&a=logout">退出</a>
                    </li>
                </ul>
            </div>
            <!-- /.navbar-collapse -->
        </div>
        <!-- /.container-fluid -->
    </nav>
    <div class="text-center container" style="width:65%;margin-top:40px;padding-top:10px;background-color: #f5f5f5;border-radius:20px;">
        <div class="h4">
            <b>用户信息</b>
        </div>
        <p>用户账号:{<$smarty.session.userId>}</p>
        <p>用户姓名:{<$userInfo.name>}</p>
        <p>用户班级:{<$userInfo.class>}</p>
        <p>用户状态:{<if $userInfo.status == 1>}正常{<else>}<font color="red">挂失</font>{</if>}</p>
        <div style="width: 200px;margin:20px auto;overflow: hidden;display: flex;justify-content: space-between">
            <button class="btn btn-primary" data-toggle="modal" data-target="#lost">挂失账户</a>
                <button class="btn btn-warning" data-toggle="modal" data-target="#pwd">修改密码</a>
        </div>
    </div>
    <div class="container text-center" style="width: 65%;margin-top:30px;padding:0;">
        <div class="h4">
            <b>我的借阅信息</b>
        </div>
        <table class="table table-bordered table-hover">
            <thead>
                <tr class="active">
                    <th class="text-center">图书号</th>
                    <th class="text-center">图书名称</th>
                    <th class="text-center">借书时间</th>
                    <th class="text-center">应还时间</th>
                    <th class="text-center">操作</th>
                </tr>
            </thead>
            <tbody>
                {<if empty($borrowInfo)>}
                    <tr>
                        <td colspan="5">无记录!</td>
                    </tr>
                {</if>}
                {<foreach $borrowInfo as $one>}
                    <tr {<if strtotime($one.back_date) < time()>}class="danger"{</if>}>
                        <td>{<$one.book_id>}</td>
                        <td>{<$one.name>}</td>
                        <td>{<$one.borrow_date>}</td>
                        <td>{<$one.back_date>}</td>
                        <td>
                            <button class="btn btn-info btn-xs {<if strtotime($one.back_date) < time()>}disabled{</if>}"
                                    id="prolong" bookId="{<$one.book_id>}">续借
                            </button>
                        </td>
                    </tr>
                {</foreach>}
            </tbody>
        </table>
    </div>

    <div class="container-fluid text-center">
        <!-- 挂失用户模态框(Modal) -->
        <div class="modal fade" id="lost" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
            <div class="modal-dialog" style="margin-top:150px;">
                <div class="modal-content">
                    <div class="modal-header">
                        <h4 class="modal-title" id="myModalLabel">
                            挂失账户
                        </h4>
                    </div>
                    <div class="modal-body">
                        <h4>确认要挂失账号为{<$smarty.session.userId>}的账户?</h3>
                    </div>
                    <div class="modal-footer">
                        <button type="button" id="lostSubmit" class="btn btn-primary" data-dismiss="modal">确认</button>
                        <button type="button" class="btn btn-default" data-dismiss="modal">关闭</button>
                    </div>
                </div>
                <!-- /.modal-content -->
            </div>
            <!-- /.modal -->
        </div>

        <!-- 修改密码模态框(Modal) -->
        <div class="modal fade" id="pwd" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
            <div class="modal-dialog" style="margin-top:150px;">
                <div class="modal-content">
                    <form id="form">
                        <div class="modal-header">
                            <h4 class="modal-title" id="myModalLabel">
                                修改密码
                            </h4>
                        </div>
                        <div class="modal-body center-block" style="width: 45%">
                            <div class="form-group">
                                <div class="input-group">
                                    <div class="input-group-addon">原密码</div>
                                    <input type="text" class="form-control" name="originPwd" placeholder="请输入原密码">
                                </div>
                            </div>
                            <div class="form-group">
                                <div class="input-group">
                                    <div class="input-group-addon">新密码</div>
                                    <input type="password" class="form-control" name="newPwd" placeholder="请输入新密码">
                                </div>
                            </div>
                            <div class="form-group" style="margin-bottom:0">
                                <div class="input-group">
                                    <div class="input-group-addon">确认密码</div>
                                    <input type="password" class="form-control" name="confirmPwd" placeholder="请输入确认密码">
                                </div>
                            </div>
                        </div>
                        <div class="modal-footer">
                            <button type="button" id="pwdSubmit" class="btn btn-primary">确认</button>
                            <button type="button" class="btn btn-default" data-dismiss="modal">关闭</button>
                        </div>
                    </form>
                </div>
                <!-- /.modal-content -->
            </div>
            <!-- /.modal -->
        </div>
    </div>
</body>

<script>
    
    $(function(){

        //挂失
        $("#lostSubmit").click(function(){
            $.post({
                url: "?p=Home&c=User&a=lost",
                data: {},
                success:function(data){
                    alert(data.message);
                    location.reload();
                }
            });
        });

        //注册回车改密码事件
        $("[name='originPwd'],[name='newPwd'],[name='confirmPwd']").keydown(function(event){
            if(event.keyCode == 13){
                $("#pwdSubmit").click();
            }
        });
        //修改密码
        $("#pwdSubmit").click(function(){
            if($("[name='originPwd']").val().length == 0 || $("[name='newPwd']").val().length == 0 || $("[name='confirmPwd']").val().length == 0){
                alert("请将信息填写完整");
                return false;
            }
            if($("[name='newPwd']").val() != $("[name='confirmPwd']").val()){
                alert("两次输入的密码不一致");
                return false;
            }
            $.post({
                url:"?p=Home&c=User&a=changePwd",
                data:$("#form").serialize(),
                success:function(data){
                    alert(data.message);
                    if(data.code == 0){
                        location.reload();
                    }
                }
            });
        });

        //续借
        $("#prolong").click(function(){
            $.post({
                url:"?p=Home&c=Borrow&a=prolong",
                data:{bookId:$(this).attr("bookId")},
                success:function(data){
                    alert(data.message);
                    if(data.code == 0){
                        location.reload();
                    }
                }
            });
        });
    });
    
</script>

</html>

================================================
FILE: LICENSE
================================================
                    GNU GENERAL PUBLIC LICENSE
                       Version 3, 29 June 2007

 Copyright (C) 2007 Free Software Foundation, Inc. <https://fsf.org/>
 Everyone is permitted to copy and distribute verbatim copies
 of this license document, but changing it is not allowed.

                            Preamble

  The GNU General Public License is a free, copyleft license for
software and other kinds of works.

  The licenses for most software and other practical works are designed
to take away your freedom to share and change the works.  By contrast,
the GNU General Public License is intended to guarantee your freedom to
share and change all versions of a program--to make sure it remains free
software for all its users.  We, the Free Software Foundation, use the
GNU General Public License for most of our software; it applies also to
any other work released this way by its authors.  You can apply it to
your programs, too.

  When we speak of free software, we are referring to freedom, not
price.  Our General Public Licenses are designed to make sure that you
have the freedom to distribute copies of free software (and charge for
them if you wish), that you receive source code or can get it if you
want it, that you can change the software or use pieces of it in new
free programs, and that you know you can do these things.

  To protect your rights, we need to prevent others from denying you
these rights or asking you to surrender the rights.  Therefore, you have
certain responsibilities if you distribute copies of the software, or if
you modify it: responsibilities to respect the freedom of others.

  For example, if you distribute copies of such a program, whether
gratis or for a fee, you must pass on to the recipients the same
freedoms that you received.  You must make sure that they, too, receive
or can get the source code.  And you must show them these terms so they
know their rights.

  Developers that use the GNU GPL protect your rights with two steps:
(1) assert copyright on the software, and (2) offer you this License
giving you legal permission to copy, distribute and/or modify it.

  For the developers' and authors' protection, the GPL clearly explains
that there is no warranty for this free software.  For both users' and
authors' sake, the GPL requires that modified versions be marked as
changed, so that their problems will not be attributed erroneously to
authors of previous versions.

  Some devices are designed to deny users access to install or run
modified versions of the software inside them, although the manufacturer
can do so.  This is fundamentally incompatible with the aim of
protecting users' freedom to change the software.  The systematic
pattern of such abuse occurs in the area of products for individuals to
use, which is precisely where it is most unacceptable.  Therefore, we
have designed this version of the GPL to prohibit the practice for those
products.  If such problems arise substantially in other domains, we
stand ready to extend this provision to those domains in future versions
of the GPL, as needed to protect the freedom of users.

  Finally, every program is threatened constantly by software patents.
States should not allow patents to restrict development and use of
software on general-purpose computers, but in those that do, we wish to
avoid the special danger that patents applied to a free program could
make it effectively proprietary.  To prevent this, the GPL assures that
patents cannot be used to render the program non-free.

  The precise terms and conditions for copying, distribution and
modification follow.

                       TERMS AND CONDITIONS

  0. Definitions.

  "This License" refers to version 3 of the GNU General Public License.

  "Copyright" also means copyright-like laws that apply to other kinds of
works, such as semiconductor masks.

  "The Program" refers to any copyrightable work licensed under this
License.  Each licensee is addressed as "you".  "Licensees" and
"recipients" may be individuals or organizations.

  To "modify" a work means to copy from or adapt all or part of the work
in a fashion requiring copyright permission, other than the making of an
exact copy.  The resulting work is called a "modified version" of the
earlier work or a work "based on" the earlier work.

  A "covered work" means either the unmodified Program or a work based
on the Program.

  To "propagate" a work means to do anything with it that, without
permission, would make you directly or secondarily liable for
infringement under applicable copyright law, except executing it on a
computer or modifying a private copy.  Propagation includes copying,
distribution (with or without modification), making available to the
public, and in some countries other activities as well.

  To "convey" a work means any kind of propagation that enables other
parties to make or receive copies.  Mere interaction with a user through
a computer network, with no transfer of a copy, is not conveying.

  An interactive user interface displays "Appropriate Legal Notices"
to the extent that it includes a convenient and prominently visible
feature that (1) displays an appropriate copyright notice, and (2)
tells the user that there is no warranty for the work (except to the
extent that warranties are provided), that licensees may convey the
work under this License, and how to view a copy of this License.  If
the interface presents a list of user commands or options, such as a
menu, a prominent item in the list meets this criterion.

  1. Source Code.

  The "source code" for a work means the preferred form of the work
for making modifications to it.  "Object code" means any non-source
form of a work.

  A "Standard Interface" means an interface that either is an official
standard defined by a recognized standards body, or, in the case of
interfaces specified for a particular programming language, one that
is widely used among developers working in that language.

  The "System Libraries" of an executable work include anything, other
than the work as a whole, that (a) is included in the normal form of
packaging a Major Component, but which is not part of that Major
Component, and (b) serves only to enable use of the work with that
Major Component, or to implement a Standard Interface for which an
implementation is available to the public in source code form.  A
"Major Component", in this context, means a major essential component
(kernel, window system, and so on) of the specific operating system
(if any) on which the executable work runs, or a compiler used to
produce the work, or an object code interpreter used to run it.

  The "Corresponding Source" for a work in object code form means all
the source code needed to generate, install, and (for an executable
work) run the object code and to modify the work, including scripts to
control those activities.  However, it does not include the work's
System Libraries, or general-purpose tools or generally available free
programs which are used unmodified in performing those activities but
which are not part of the work.  For example, Corresponding Source
includes interface definition files associated with source files for
the work, and the source code for shared libraries and dynamically
linked subprograms that the work is specifically designed to require,
such as by intimate data communication or control flow between those
subprograms and other parts of the work.

  The Corresponding Source need not include anything that users
can regenerate automatically from other parts of the Corresponding
Source.

  The Corresponding Source for a work in source code form is that
same work.

  2. Basic Permissions.

  All rights granted under this License are granted for the term of
copyright on the Program, and are irrevocable provided the stated
conditions are met.  This License explicitly affirms your unlimited
permission to run the unmodified Program.  The output from running a
covered work is covered by this License only if the output, given its
content, constitutes a covered work.  This License acknowledges your
rights of fair use or other equivalent, as provided by copyright law.

  You may make, run and propagate covered works that you do not
convey, without conditions so long as your license otherwise remains
in force.  You may convey covered works to others for the sole purpose
of having them make modifications exclusively for you, or provide you
with facilities for running those works, provided that you comply with
the terms of this License in conveying all material for which you do
not control copyright.  Those thus making or running the covered works
for you must do so exclusively on your behalf, under your direction
and control, on terms that prohibit them from making any copies of
your copyrighted material outside their relationship with you.

  Conveying under any other circumstances is permitted solely under
the conditions stated below.  Sublicensing is not allowed; section 10
makes it unnecessary.

  3. Protecting Users' Legal Rights From Anti-Circumvention Law.

  No covered work shall be deemed part of an effective technological
measure under any applicable law fulfilling obligations under article
11 of the WIPO copyright treaty adopted on 20 December 1996, or
similar laws prohibiting or restricting circumvention of such
measures.

  When you convey a covered work, you waive any legal power to forbid
circumvention of technological measures to the extent such circumvention
is effected by exercising rights under this License with respect to
the covered work, and you disclaim any intention to limit operation or
modification of the work as a means of enforcing, against the work's
users, your or third parties' legal rights to forbid circumvention of
technological measures.

  4. Conveying Verbatim Copies.

  You may convey verbatim copies of the Program's source code as you
receive it, in any medium, provided that you conspicuously and
appropriately publish on each copy an appropriate copyright notice;
keep intact all notices stating that this License and any
non-permissive terms added in accord with section 7 apply to the code;
keep intact all notices of the absence of any warranty; and give all
recipients a copy of this License along with the Program.

  You may charge any price or no price for each copy that you convey,
and you may offer support or warranty protection for a fee.

  5. Conveying Modified Source Versions.

  You may convey a work based on the Program, or the modifications to
produce it from the Program, in the form of source code under the
terms of section 4, provided that you also meet all of these conditions:

    a) The work must carry prominent notices stating that you modified
    it, and giving a relevant date.

    b) The work must carry prominent notices stating that it is
    released under this License and any conditions added under section
    7.  This requirement modifies the requirement in section 4 to
    "keep intact all notices".

    c) You must license the entire work, as a whole, under this
    License to anyone who comes into possession of a copy.  This
    License will therefore apply, along with any applicable section 7
    additional terms, to the whole of the work, and all its parts,
    regardless of how they are packaged.  This License gives no
    permission to license the work in any other way, but it does not
    invalidate such permission if you have separately received it.

    d) If the work has interactive user interfaces, each must display
    Appropriate Legal Notices; however, if the Program has interactive
    interfaces that do not display Appropriate Legal Notices, your
    work need not make them do so.

  A compilation of a covered work with other separate and independent
works, which are not by their nature extensions of the covered work,
and which are not combined with it such as to form a larger program,
in or on a volume of a storage or distribution medium, is called an
"aggregate" if the compilation and its resulting copyright are not
used to limit the access or legal rights of the compilation's users
beyond what the individual works permit.  Inclusion of a covered work
in an aggregate does not cause this License to apply to the other
parts of the aggregate.

  6. Conveying Non-Source Forms.

  You may convey a covered work in object code form under the terms
of sections 4 and 5, provided that you also convey the
machine-readable Corresponding Source under the terms of this License,
in one of these ways:

    a) Convey the object code in, or embodied in, a physical product
    (including a physical distribution medium), accompanied by the
    Corresponding Source fixed on a durable physical medium
    customarily used for software interchange.

    b) Convey the object code in, or embodied in, a physical product
    (including a physical distribution medium), accompanied by a
    written offer, valid for at least three years and valid for as
    long as you offer spare parts or customer support for that product
    model, to give anyone who possesses the object code either (1) a
    copy of the Corresponding Source for all the software in the
    product that is covered by this License, on a durable physical
    medium customarily used for software interchange, for a price no
    more than your reasonable cost of physically performing this
    conveying of source, or (2) access to copy the
    Corresponding Source from a network server at no charge.

    c) Convey individual copies of the object code with a copy of the
    written offer to provide the Corresponding Source.  This
    alternative is allowed only occasionally and noncommercially, and
    only if you received the object code with such an offer, in accord
    with subsection 6b.

    d) Convey the object code by offering access from a designated
    place (gratis or for a charge), and offer equivalent access to the
    Corresponding Source in the same way through the same place at no
    further charge.  You need not require recipients to copy the
    Corresponding Source along with the object code.  If the place to
    copy the object code is a network server, the Corresponding Source
    may be on a different server (operated by you or a third party)
    that supports equivalent copying facilities, provided you maintain
    clear directions next to the object code saying where to find the
    Corresponding Source.  Regardless of what server hosts the
    Corresponding Source, you remain obligated to ensure that it is
    available for as long as needed to satisfy these requirements.

    e) Convey the object code using peer-to-peer transmission, provided
    you inform other peers where the object code and Corresponding
    Source of the work are being offered to the general public at no
    charge under subsection 6d.

  A separable portion of the object code, whose source code is excluded
from the Corresponding Source as a System Library, need not be
included in conveying the object code work.

  A "User Product" is either (1) a "consumer product", which means any
tangible personal property which is normally used for personal, family,
or household purposes, or (2) anything designed or sold for incorporation
into a dwelling.  In determining whether a product is a consumer product,
doubtful cases shall be resolved in favor of coverage.  For a particular
product received by a particular user, "normally used" refers to a
typical or common use of that class of product, regardless of the status
of the particular user or of the way in which the particular user
actually uses, or expects or is expected to use, the product.  A product
is a consumer product regardless of whether the product has substantial
commercial, industrial or non-consumer uses, unless such uses represent
the only significant mode of use of the product.

  "Installation Information" for a User Product means any methods,
procedures, authorization keys, or other information required to install
and execute modified versions of a covered work in that User Product from
a modified version of its Corresponding Source.  The information must
suffice to ensure that the continued functioning of the modified object
code is in no case prevented or interfered with solely because
modification has been made.

  If you convey an object code work under this section in, or with, or
specifically for use in, a User Product, and the conveying occurs as
part of a transaction in which the right of possession and use of the
User Product is transferred to the recipient in perpetuity or for a
fixed term (regardless of how the transaction is characterized), the
Corresponding Source conveyed under this section must be accompanied
by the Installation Information.  But this requirement does not apply
if neither you nor any third party retains the ability to install
modified object code on the User Product (for example, the work has
been installed in ROM).

  The requirement to provide Installation Information does not include a
requirement to continue to provide support service, warranty, or updates
for a work that has been modified or installed by the recipient, or for
the User Product in which it has been modified or installed.  Access to a
network may be denied when the modification itself materially and
adversely affects the operation of the network or violates the rules and
protocols for communication across the network.

  Corresponding Source conveyed, and Installation Information provided,
in accord with this section must be in a format that is publicly
documented (and with an implementation available to the public in
source code form), and must require no special password or key for
unpacking, reading or copying.

  7. Additional Terms.

  "Additional permissions" are terms that supplement the terms of this
License by making exceptions from one or more of its conditions.
Additional permissions that are applicable to the entire Program shall
be treated as though they were included in this License, to the extent
that they are valid under applicable law.  If additional permissions
apply only to part of the Program, that part may be used separately
under those permissions, but the entire Program remains governed by
this License without regard to the additional permissions.

  When you convey a copy of a covered work, you may at your option
remove any additional permissions from that copy, or from any part of
it.  (Additional permissions may be written to require their own
removal in certain cases when you modify the work.)  You may place
additional permissions on material, added by you to a covered work,
for which you have or can give appropriate copyright permission.

  Notwithstanding any other provision of this License, for material you
add to a covered work, you may (if authorized by the copyright holders of
that material) supplement the terms of this License with terms:

    a) Disclaiming warranty or limiting liability differently from the
    terms of sections 15 and 16 of this License; or

    b) Requiring preservation of specified reasonable legal notices or
    author attributions in that material or in the Appropriate Legal
    Notices displayed by works containing it; or

    c) Prohibiting misrepresentation of the origin of that material, or
    requiring that modified versions of such material be marked in
    reasonable ways as different from the original version; or

    d) Limiting the use for publicity purposes of names of licensors or
    authors of the material; or

    e) Declining to grant rights under trademark law for use of some
    trade names, trademarks, or service marks; or

    f) Requiring indemnification of licensors and authors of that
    material by anyone who conveys the material (or modified versions of
    it) with contractual assumptions of liability to the recipient, for
    any liability that these contractual assumptions directly impose on
    those licensors and authors.

  All other non-permissive additional terms are considered "further
restrictions" within the meaning of section 10.  If the Program as you
received it, or any part of it, contains a notice stating that it is
governed by this License along with a term that is a further
restriction, you may remove that term.  If a license document contains
a further restriction but permits relicensing or conveying under this
License, you may add to a covered work material governed by the terms
of that license document, provided that the further restriction does
not survive such relicensing or conveying.

  If you add terms to a covered work in accord with this section, you
must place, in the relevant source files, a statement of the
additional terms that apply to those files, or a notice indicating
where to find the applicable terms.

  Additional terms, permissive or non-permissive, may be stated in the
form of a separately written license, or stated as exceptions;
the above requirements apply either way.

  8. Termination.

  You may not propagate or modify a covered work except as expressly
provided under this License.  Any attempt otherwise to propagate or
modify it is void, and will automatically terminate your rights under
this License (including any patent licenses granted under the third
paragraph of section 11).

  However, if you cease all violation of this License, then your
license from a particular copyright holder is reinstated (a)
provisionally, unless and until the copyright holder explicitly and
finally terminates your license, and (b) permanently, if the copyright
holder fails to notify you of the violation by some reasonable means
prior to 60 days after the cessation.

  Moreover, your license from a particular copyright holder is
reinstated permanently if the copyright holder notifies you of the
violation by some reasonable means, this is the first time you have
received notice of violation of this License (for any work) from that
copyright holder, and you cure the violation prior to 30 days after
your receipt of the notice.

  Termination of your rights under this section does not terminate the
licenses of parties who have received copies or rights from you under
this License.  If your rights have been terminated and not permanently
reinstated, you do not qualify to receive new licenses for the same
material under section 10.

  9. Acceptance Not Required for Having Copies.

  You are not required to accept this License in order to receive or
run a copy of the Program.  Ancillary propagation of a covered work
occurring solely as a consequence of using peer-to-peer transmission
to receive a copy likewise does not require acceptance.  However,
nothing other than this License grants you permission to propagate or
modify any covered work.  These actions infringe copyright if you do
not accept this License.  Therefore, by modifying or propagating a
covered work, you indicate your acceptance of this License to do so.

  10. Automatic Licensing of Downstream Recipients.

  Each time you convey a covered work, the recipient automatically
receives a license from the original licensors, to run, modify and
propagate that work, subject to this License.  You are not responsible
for enforcing compliance by third parties with this License.

  An "entity transaction" is a transaction transferring control of an
organization, or substantially all assets of one, or subdividing an
organization, or merging organizations.  If propagation of a covered
work results from an entity transaction, each party to that
transaction who receives a copy of the work also receives whatever
licenses to the work the party's predecessor in interest had or could
give under the previous paragraph, plus a right to possession of the
Corresponding Source of the work from the predecessor in interest, if
the predecessor has it or can get it with reasonable efforts.

  You may not impose any further restrictions on the exercise of the
rights granted or affirmed under this License.  For example, you may
not impose a license fee, royalty, or other charge for exercise of
rights granted under this License, and you may not initiate litigation
(including a cross-claim or counterclaim in a lawsuit) alleging that
any patent claim is infringed by making, using, selling, offering for
sale, or importing the Program or any portion of it.

  11. Patents.

  A "contributor" is a copyright holder who authorizes use under this
License of the Program or a work on which the Program is based.  The
work thus licensed is called the contributor's "contributor version".

  A contributor's "essential patent claims" are all patent claims
owned or controlled by the contributor, whether already acquired or
hereafter acquired, that would be infringed by some manner, permitted
by this License, of making, using, or selling its contributor version,
but do not include claims that would be infringed only as a
consequence of further modification of the contributor version.  For
purposes of this definition, "control" includes the right to grant
patent sublicenses in a manner consistent with the requirements of
this License.

  Each contributor grants you a non-exclusive, worldwide, royalty-free
patent license under the contributor's essential patent claims, to
make, use, sell, offer for sale, import and otherwise run, modify and
propagate the contents of its contributor version.

  In the following three paragraphs, a "patent license" is any express
agreement or commitment, however denominated, not to enforce a patent
(such as an express permission to practice a patent or covenant not to
sue for patent infringement).  To "grant" such a patent license to a
party means to make such an agreement or commitment not to enforce a
patent against the party.

  If you convey a covered work, knowingly relying on a patent license,
and the Corresponding Source of the work is not available for anyone
to copy, free of charge and under the terms of this License, through a
publicly available network server or other readily accessible means,
then you must either (1) cause the Corresponding Source to be so
available, or (2) arrange to deprive yourself of the benefit of the
patent license for this particular work, or (3) arrange, in a manner
consistent with the requirements of this License, to extend the patent
license to downstream recipients.  "Knowingly relying" means you have
actual knowledge that, but for the patent license, your conveying the
covered work in a country, or your recipient's use of the covered work
in a country, would infringe one or more identifiable patents in that
country that you have reason to believe are valid.

  If, pursuant to or in connection with a single transaction or
arrangement, you convey, or propagate by procuring conveyance of, a
covered work, and grant a patent license to some of the parties
receiving the covered work authorizing them to use, propagate, modify
or convey a specific copy of the covered work, then the patent license
you grant is automatically extended to all recipients of the covered
work and works based on it.

  A patent license is "discriminatory" if it does not include within
the scope of its coverage, prohibits the exercise of, or is
conditioned on the non-exercise of one or more of the rights that are
specifically granted under this License.  You may not convey a covered
work if you are a party to an arrangement with a third party that is
in the business of distributing software, under which you make payment
to the third party based on the extent of your activity of conveying
the work, and under which the third party grants, to any of the
parties who would receive the covered work from you, a discriminatory
patent license (a) in connection with copies of the covered work
conveyed by you (or copies made from those copies), or (b) primarily
for and in connection with specific products or compilations that
contain the covered work, unless you entered into that arrangement,
or that patent license was granted, prior to 28 March 2007.

  Nothing in this License shall be construed as excluding or limiting
any implied license or other defenses to infringement that may
otherwise be available to you under applicable patent law.

  12. No Surrender of Others' Freedom.

  If conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License.  If you cannot convey a
covered work so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you may
not convey it at all.  For example, if you agree to terms that obligate you
to collect a royalty for further conveying from those to whom you convey
the Program, the only way you could satisfy both those terms and this
License would be to refrain entirely from conveying the Program.

  13. Use with the GNU Affero General Public License.

  Notwithstanding any other provision of this License, you have
permission to link or combine any covered work with a work licensed
under version 3 of the GNU Affero General Public License into a single
combined work, and to convey the resulting work.  The terms of this
License will continue to apply to the part which is the covered work,
but the special requirements of the GNU Affero General Public License,
section 13, concerning interaction through a network will apply to the
combination as such.

  14. Revised Versions of this License.

  The Free Software Foundation may publish revised and/or new versions of
the GNU General Public License from time to time.  Such new versions will
be similar in spirit to the present version, but may differ in detail to
address new problems or concerns.

  Each version is given a distinguishing version number.  If the
Program specifies that a certain numbered version of the GNU General
Public License "or any later version" applies to it, you have the
option of following the terms and conditions either of that numbered
version or of any later version published by the Free Software
Foundation.  If the Program does not specify a version number of the
GNU General Public License, you may choose any version ever published
by the Free Software Foundation.

  If the Program specifies that a proxy can decide which future
versions of the GNU General Public License can be used, that proxy's
public statement of acceptance of a version permanently authorizes you
to choose that version for the Program.

  Later license versions may give you additional or different
permissions.  However, no additional obligations are imposed on any
author or copyright holder as a result of your choosing to follow a
later version.

  15. Disclaimer of Warranty.

  THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
APPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
IS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
ALL NECESSARY SERVICING, REPAIR OR CORRECTION.

  16. Limitation of Liability.

  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
SUCH DAMAGES.

  17. Interpretation of Sections 15 and 16.

  If the disclaimer of warranty and limitation of liability provided
above cannot be given local legal effect according to their terms,
reviewing courts shall apply local law that most closely approximates
an absolute waiver of all civil liability in connection with the
Program, unless a warranty or assumption of liability accompanies a
copy of the Program in return for a fee.

                     END OF TERMS AND CONDITIONS

            How to Apply These Terms to Your New Programs

  If you develop a new program, and you want it to be of the greatest
possible use to the public, the best way to achieve this is to make it
free software which everyone can redistribute and change under these terms.

  To do so, attach the following notices to the program.  It is safest
to attach them to the start of each source file to most effectively
state the exclusion of warranty; and each file should have at least
the "copyright" line and a pointer to where the full notice is found.

    <one line to give the program's name and a brief idea of what it does.>
    Copyright (C) <year>  <name of author>

    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with this program.  If not, see <https://www.gnu.org/licenses/>.

Also add information on how to contact you by electronic and paper mail.

  If the program does terminal interaction, make it output a short
notice like this when it starts in an interactive mode:

    <program>  Copyright (C) <year>  <name of author>
    This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
    This is free software, and you are welcome to redistribute it
    under certain conditions; type `show c' for details.

The hypothetical commands `show w' and `show c' should show the appropriate
parts of the General Public License.  Of course, your program's commands
might be different; for a GUI interface, you would use an "about box".

  You should also get your employer (if you work as a programmer) or school,
if any, to sign a "copyright disclaimer" for the program, if necessary.
For more information on this, and how to apply and follow the GNU GPL, see
<https://www.gnu.org/licenses/>.

  The GNU General Public License does not permit incorporating your program
into proprietary programs.  If your program is a subroutine library, you
may consider it more useful to permit linking proprietary applications with
the library.  If this is what you want to do, use the GNU Lesser General
Public License instead of this License.  But first, please read
<https://www.gnu.org/licenses/why-not-lgpl.html>.


================================================
FILE: README.md
================================================
# 图书管理系统
>这个图书管理系统是我学完PHP时写的一个练手项目,功能参考了自己学校的图书管理系统。为了锻炼自己的动手能力以及加深对代码的理解,前端和后端均由自己完成,前端使用了一些基本的框架(毕竟我主攻后端开发方向),后端大部分要用到的功能都是自己从底层实现并封装,基本没有用到第三方框架。总体来说还是比较简陋的,在某些地方可能存在缺陷或者漏洞。

### 基本功能
+ 用户
    + 查询图书状态(能够进行搜索)
    + 管理自己的账户,如:修改密码、挂失等
    + 对已借的图书进行续借操作
+ 管理员
    + 管理图书,增删改查
    + 管理用户,如修改密码、挂失、删除等
    + 借阅管理

### 特点
+ 数据库中的数据来自豆瓣图书Top250
+ 前端页面使用`jQuery`+`BootStrap`实现,勉强能看(前端能力实在有限)
+ 后端采用MVC的思想,参考`ThinkPHP`框架的结构和思路,自己实现并封装了一个简单的MVC框架(View层使用了Smarty模板引擎)
+ 后端使用的数据库工具类、验证码类、分页类均由自己实现并封装
+ 可通过配置文件(`Base/Conf.php`)对项目进行配置(数据库设置和默认路由设置)
+ 前端大部分数据通过Ajax与后端进行交互,页面跳转较少

### 部署注意事项
1. `index.php`为整个项目的入口文件
2. 确保你的PHP开启了`gd2`、`mysqli`扩展
3. 将项目中的book.sql中的数据导入到数据库,**并在`Base/Conf.php`修改数据库连接信息(点击登录没反应可能就是没有设置正确的连接信息)**
4. 默认管理员账号为`10086`,密码为`admin`
5. 默认一般用户的密码为`123456`,初始的账号有`10000`、`10001`、`10002`、`10010`,其中`10010`默认被挂失

### 部分截图
#### 登陆界面
![](https://img2018.cnblogs.com/blog/1556823/201901/1556823-20190127193126712-133882588.png)

#### 图书管理
![](https://img2018.cnblogs.com/blog/1556823/201901/1556823-20190127193136627-359174758.png)
![](https://img2018.cnblogs.com/blog/1556823/201901/1556823-20190127193145620-32043274.png)

#### 用户管理
![](https://img2018.cnblogs.com/blog/1556823/201901/1556823-20190127193149631-864366552.png)
![](https://img2018.cnblogs.com/blog/1556823/201901/1556823-20190127193153638-1859828350.png)

#### 借阅管理
![](https://img2018.cnblogs.com/blog/1556823/201901/1556823-20190127193156695-1693862812.png)


================================================
FILE: Tool/Db.class.php
================================================
<?php
namespace Tool;
final Class Db{
    //单例数据库类
    private static $Db;
    private $mysqli;
    private $db_host;
    private $db_user;
    private $db_pwd;
    private $db_name;
    private $db_port;
    private $charset;

    //阻止克隆对象
    private function __clone(){}

    //阻止new对象
    private function __construct(){
        $this->db_host  =  $GLOBALS['conf']['db_host'];
        $this->db_user  =  $GLOBALS['conf']['db_user'];
        $this->db_pwd   =  $GLOBALS['conf']['db_pwd'];
        $this->db_name  =  $GLOBALS['conf']['db_name'];
        $this->db_port  =  $GLOBALS['conf']['db_port'];
        $this->charset  =  $GLOBALS['conf']['charset'];
        $this->connect();
        $this->setCharSet();
    }

    private function connect(){
        @$this->mysqli = new \mysqli($this->db_host,$this->db_user,$this->db_pwd,$this->db_name,$this->db_port);
        if($this->mysqli->connect_errno != 0){
            echo "<h2>MySql连接错误!</h2>";
            echo "错误信息:".$this->mysqli->connect_error;
            die();
        }
    }

    private function setCharSet(){
        $this->mysqli->set_charset($this->charset);
    }

    //判断sql语句是否出错
    private function isErr(){
        if($this->mysqli->errno != 0){
            echo "<h2>Sql语句错误</h2>";
            echo "错误信息:".$this->mysqli->error;
            die();
        }
    }

    //初始化Db类只需执行该静态方法
    public static function getInstance(){
        if(!(self::$Db instanceof self)){
            self::$Db = new self;
        }
        return self::$Db;
    }

    public function query($sql,$mode = 1){
        //$mode解释: 1:关联数组  2:索引数组  3:混合数组
        if(strtoupper(substr($sql,0,6)) != "SELECT"){
            die("query函数只能接受SELECT语句!");
        }
        @$result = $this->mysqli->query($sql);
        $this->isErr();      //判断语句是否出错
        $data = array();    //返回的结果数组
        if($this->mysqli->affected_rows == 1){
            //只有一行数据时直接返回一维数组
            $data = $result->fetch_array($mode);
        }else{
            //有多行数据是返回二维数组
            while($row = $result->fetch_array($mode)){
                $data[] = $row;
            }
        }
        return $data;
    }

    public function exec($sql){
        if(strtoupper(substr($sql,0,6)) == "SELECT"){
            die("exec函数只能接受非SELECT语句!");
        }
        if(@!$this->mysqli->query($sql)){
            $this->isErr();      //判断语句是否出错
        }else{
            return true;
        }
    }

    public function rowCount($sql){
        @$this->mysqli->query($sql);
        $this->isErr();      //判断语句是否出错
        return $this->mysqli->affected_rows;
    }
};

================================================
FILE: Tool/MySmarty.class.php
================================================
<?php
namespace Tool;
require_once(ROOT."Tool".DS."smarty-3.1.32".DS."libs".DS."Smarty.class.php");

final class MySmarty{
    
    private static $smarty;

    //初始化smarty配置
    private static function smartyInit(){
        self::$smarty->clearCompiledTemplate();
        self::$smarty->left_delimiter = "{<";
        self::$smarty->right_delimiter = ">}";
        self::$smarty->setCompileDir(sys_get_temp_dir());
        self::$smarty->setTemplateDir(VIEWPATH);
    }

    //获取smarty实例
    public static function getInstance(){
        if(!(self::$smarty instanceof \smarty)){
            self::$smarty = new \smarty;
            self::smartyInit();
        }
        return self::$smarty;
    }
}

================================================
FILE: Tool/Pager.class.php
================================================
<?php
namespace Tool;

//Pager for bootstrap
final class Pager{

    private $currentPage;   //当前页数
    private $total;         //总记录条数
    private $each;          //每页条数
    private $url;           //当前地址栏地址
    private $parms;         //get参数数组

    private $pageNum;       //总页数
    private $pre;           //上一页链接
    private $next;          //下一页链接
    private $urlStr;        //url字符串
    private $pageStr;       //分页结果字符串

    public function __construct($currentPage,$total,$each,$url,array $parms=array()){
        $this->currentPage  =  $currentPage;
        $this->total        =  $total;
        $this->each         =  $each;
        $this->url          =  $url;
        $this->parms        =  $parms;
        $this->pageNum      =  ceil($total/$each);
        $this->parmsParse();
        $this->firstInit();
        $this->middleInit();
        $this->lastInit();
    }

    public function page(){
        //页数为1时不输出分页
        if($this->pageNum <= 1){
            $this->pageStr = "";
        }
        return $this->pageStr;
    }

    //解析参数数组
    private function parmsParse(){
        $parmsStr =  "";
        $url      =  $this->url;
        $pre      =  $this->currentPage-1;
        $next     =  $this->currentPage+1;

        foreach($this->parms as $key=>$value){
            $parmsStr .= "{$key}={$value}&";
        }
        if(strstr($url,"?")){
            //url带问号说明有参数,后面加&方便参数连接
            $url .= "&";
        }else{
            //url不带问号说明无参数,后面加?准备连接参数或页数
            $url .= "?";
        }
        $this->urlStr = $url.$parmsStr."page=";
        $this->pre      = $url.$parmsStr."page={$pre}";
        $this->next     = $url.$parmsStr."page={$next}";
    }

    //上一页
    private function firstInit(){
        if($this->currentPage == 1){
            //在第一页时上一页失效
            $disable = "class='disabled'";
            $tag     = "span";
            $link    = "";
        }else{
            //不在第一页时
            $disable = "";
            $tag     = "a";
            $link    = "href='{$this->pre}'"; 
        }
        $this->pageStr ="<nav class='text-center'>
                            <ul class='pagination'>
                                <li {$disable}>
                                    <{$tag} {$link} aria-label='Previous'>
                                        <span aria-hidden='true'>&laquo;</span>
                                    </{$tag}>
                                </li>";
    }

    //中间页码部分
    private function middleInit(){
        if($this->pageNum <= 5){
            //页数小于5时
            $start = 1;
            $end   = $this->pageNum;
        }else if($this->currentPage - 2 < 1){
            //左边越界情况
            $start = 1;
            $end   = 5;
        }else if($this->currentPage + 2 > $this->pageNum){
            //右边越界情况
            $start = $this->pageNum - 4;
            $end   = $this->pageNum;
        }else{
            //正常情况
            $start = $this->currentPage - 2;
            $end   = $this->currentPage + 2;
        }

        //循环输出页码
        for($i = $start;$i <= $end;$i++){
            $active = "";
            if($i == $this->currentPage){
                $active = "class='active'";
            }
            $this->pageStr .=  "<li {$active}>
                                    <a href='{$this->urlStr}{$i}'>{$i}</a>
                                </li>";
        }
    }

    //下一页
    private function lastInit(){
        if($this->currentPage == $this->pageNum){
            //在最后页时下一页失效
            $disable = "class='disabled'";
            $tag     = "span";
            $link    = "";
        }else{
            //不在最后页时
            $disable = "";
            $tag     = "a";
            $link    = "href='{$this->next}'";
        }
        $this->pageStr .=      "<li {$disable}>
                                    <{$tag} {$link} aria-label='Next'>
                                        <span aria-hidden='true'>&raquo;</span>
                                    </{$tag}>
                                </li>
                            </ul>
                         </nav>";
    }
}

================================================
FILE: Tool/Verify.class.php
================================================
<?php
namespace Tool;
final class Verify
{
    private $width;
    private $height;
    private $picRes;

    public function __construct($width = 60, $height = 34){
        $this->width = $width;
        $this->height = $height;
        $this->picInit();
        $this->createPic();
        $this->writeCode();
        $this->writeNoise();
        $this->outPutPic();
    }

    private function picInit(){
        header("Content-Type:image/png");
    }

    private function createPic(){
        //创建画布
        $this->picRes = imagecreatetruecolor($this->width, $this->height);
        //给画布分配颜色
        $color = imagecolorallocate($this->picRes, rand(150, 255), rand(150, 255), rand(150, 255));
        //给画布上色
        imagefill($this->picRes, 0, 0, $color);
    }

    private function writeCode(){
        $fontDir = ROOT . "Resources" . DS . "Verify.ttf";
        $codeLib = "abcdefghjknmpqrstuvwxyzABCDEFGHIJKLNMPQRSTUVWXYZ123456789";
        $code = "";
        for ($i = 0; $i < 4; $i++) {
            //验证码分配颜色
            $color = imagecolorallocate($this->picRes, rand(50, 150), rand(50, 150), rand(50, 150));
            //生成随机单个验证码
            $oneCode = $codeLib[rand(0,strlen($codeLib)-1)];
            //绘制单个验证码
            imagettftext($this->picRes,18,rand(-10,10),2+($i*14),25,$color,$fontDir,$oneCode);
            //保存整个验证码并写入session
            $code .= $oneCode;
        }
        $_SESSION["verifyCode"] = $code;
    }

    private function writeNoise(){
        for($i = 0; $i < 4; $i++){
            $color = imagecolorallocate($this->picRes,rand(50, 150), rand(50, 150), rand(50, 150));
            imageline($this->picRes,rand(0,60),rand(0,34),rand(0,60),rand(0,34),$color);
        }
    }

    private function outPutPic(){
        imagepng($this->picRes);
    }
}

================================================
FILE: Tool/smarty-3.1.32/libs/Autoloader.php
================================================
<?php
/**
 * Smarty Autoloader
 *
 * @package    Smarty
 */

/**
 * Smarty Autoloader
 *
 * @package    Smarty
 * @author     Uwe Tews
 *             Usage:
 *                  require_once '...path/Autoloader.php';
 *                  Smarty_Autoloader::register();
 *             or
 *                  include '...path/bootstrap.php';
 *
 *                  $smarty = new Smarty();
 */
class Smarty_Autoloader
{
   /**
     * Filepath to Smarty root
     *
     * @var string
     */
    public static $SMARTY_DIR = null;

    /**
     * Filepath to Smarty internal plugins
     *
     * @var string
     */
    public static $SMARTY_SYSPLUGINS_DIR = null;

    /**
     * Array with Smarty core classes and their filename
     *
     * @var array
     */
    public static $rootClasses = array('smarty' => 'Smarty.class.php', 'smartybc' => 'SmartyBC.class.php',);

    /**
     * Registers Smarty_Autoloader backward compatible to older installations.
     *
     * @param bool $prepend Whether to prepend the autoloader or not.
     */
    public static function registerBC($prepend = false)
    {
        /**
         * register the class autoloader
         */
        if (!defined('SMARTY_SPL_AUTOLOAD')) {
            define('SMARTY_SPL_AUTOLOAD', 0);
        }
        if (SMARTY_SPL_AUTOLOAD &&
            set_include_path(get_include_path() . PATH_SEPARATOR . SMARTY_SYSPLUGINS_DIR) !== false
        ) {
            $registeredAutoLoadFunctions = spl_autoload_functions();
            if (!isset($registeredAutoLoadFunctions[ 'spl_autoload' ])) {
                spl_autoload_register();
            }
        } else {
            self::register($prepend);
        }
    }

    /**
     * Registers Smarty_Autoloader as an SPL autoloader.
     *
     * @param bool $prepend Whether to prepend the autoloader or not.
     */
    public static function register($prepend = false)
    {
        self::$SMARTY_DIR = defined('SMARTY_DIR') ? SMARTY_DIR : dirname(__FILE__) . DIRECTORY_SEPARATOR;
        self::$SMARTY_SYSPLUGINS_DIR = defined('SMARTY_SYSPLUGINS_DIR') ? SMARTY_SYSPLUGINS_DIR :
            self::$SMARTY_DIR . 'sysplugins' . DIRECTORY_SEPARATOR;
        if (version_compare(PHP_VERSION, '5.3.0', '>=')) {
            spl_autoload_register(array(__CLASS__, 'autoload'), true, $prepend);
        } else {
            spl_autoload_register(array(__CLASS__, 'autoload'));
        }
    }

    /**
     * Handles auto loading of classes.
     *
     * @param string $class A class name.
     */
    public static function autoload($class)
    {
        if ($class[ 0 ] !== 'S' && strpos($class, 'Smarty') !== 0) {
            return;
        }
        $_class = strtolower($class);
        if (isset(self::$rootClasses[ $_class ])) {
            $file = self::$SMARTY_DIR . self::$rootClasses[ $_class ];
            if (is_file($file)) {
                include $file;
            }
        } else {
            $file = self::$SMARTY_SYSPLUGINS_DIR . $_class . '.php';
            if (is_file($file)) {
                include $file;
            }
        }
        return;
    }
}


================================================
FILE: Tool/smarty-3.1.32/libs/Smarty.class.php
================================================
<?php
/**
 * Project:     Smarty: the PHP compiling template engine
 * File:        Smarty.class.php
 *
 * This library is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Lesser General Public
 * License as published by the Free Software Foundation; either
 * version 2.1 of the License, or (at your option) any later version.
 *
 * This library is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 * Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public
 * License along with this library; if not, write to the Free Software
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 * For questions, help, comments, discussion, etc., please join the
 * Smarty mailing list. Send a blank e-mail to
 * smarty-discussion-subscribe@googlegroups.com
 *
 * @link      http://www.smarty.net/
 * @copyright 2018 New Digital Group, Inc.
 * @copyright 2018 Uwe Tews
 * @author    Monte Ohrt <monte at ohrt dot com>
 * @author    Uwe Tews   <uwe dot tews at gmail dot com>
 * @author    Rodney Rehm
 * @package   Smarty
 * @version   3.1.32
 */
/**
 * set SMARTY_DIR to absolute path to Smarty library files.
 * Sets SMARTY_DIR only if user application has not already defined it.
 */
if (!defined('SMARTY_DIR')) {
    /**
     *
     */
    define('SMARTY_DIR', dirname(__FILE__) . DIRECTORY_SEPARATOR);
}
/**
 * set SMARTY_SYSPLUGINS_DIR to absolute path to Smarty internal plugins.
 * Sets SMARTY_SYSPLUGINS_DIR only if user application has not already defined it.
 */
if (!defined('SMARTY_SYSPLUGINS_DIR')) {
    /**
     *
     */
    define('SMARTY_SYSPLUGINS_DIR', SMARTY_DIR . 'sysplugins' . DIRECTORY_SEPARATOR);
}
if (!defined('SMARTY_PLUGINS_DIR')) {
    /**
     *
     */
    define('SMARTY_PLUGINS_DIR', SMARTY_DIR . 'plugins' . DIRECTORY_SEPARATOR);
}
if (!defined('SMARTY_MBSTRING')) {
    /**
     *
     */
    define('SMARTY_MBSTRING', function_exists('mb_get_info'));
}
if (!defined('SMARTY_RESOURCE_CHAR_SET')) {
    // UTF-8 can only be done properly when mbstring is available!
    /**
     * @deprecated in favor of Smarty::$_CHARSET
     */
    define('SMARTY_RESOURCE_CHAR_SET', SMARTY_MBSTRING ? 'UTF-8' : 'ISO-8859-1');
}
if (!defined('SMARTY_RESOURCE_DATE_FORMAT')) {
    /**
     * @deprecated in favor of Smarty::$_DATE_FORMAT
     */
    define('SMARTY_RESOURCE_DATE_FORMAT', '%b %e, %Y');
}
/**
 * Load Smarty_Autoloader
 */
if (!class_exists('Smarty_Autoloader')) {
    include dirname(__FILE__) . '/bootstrap.php';
}
/**
 * Load always needed external class files
 */
require_once SMARTY_SYSPLUGINS_DIR . 'smarty_internal_data.php';
require_once SMARTY_SYSPLUGINS_DIR . 'smarty_internal_extension_handler.php';
require_once SMARTY_SYSPLUGINS_DIR . 'smarty_internal_templatebase.php';
require_once SMARTY_SYSPLUGINS_DIR . 'smarty_internal_template.php';
require_once SMARTY_SYSPLUGINS_DIR . 'smarty_resource.php';
require_once SMARTY_SYSPLUGINS_DIR . 'smarty_variable.php';
require_once SMARTY_SYSPLUGINS_DIR . 'smarty_template_source.php';
require_once SMARTY_SYSPLUGINS_DIR . 'smarty_template_resource_base.php';
require_once SMARTY_SYSPLUGINS_DIR . 'smarty_internal_resource_file.php';

/**
 * This is the main Smarty class
 *
 * @package Smarty
 *
 * The following methods will be dynamically loaded by the extension handler when they are called.
 * They are located in a corresponding Smarty_Internal_Method_xxxx class
 *
 * @method int clearAllCache(int $exp_time = null, string $type = null)
 * @method int clearCache(string $template_name, string $cache_id = null, string $compile_id = null, int $exp_time = null, string $type = null)
 * @method int compileAllTemplates(string $extension = '.tpl', bool $force_compile = false, int $time_limit = 0, $max_errors = null)
 * @method int compileAllConfig(string $extension = '.conf', bool $force_compile = false, int $time_limit = 0, $max_errors = null)
 * @method int clearCompiledTemplate($resource_name = null, $compile_id = null, $exp_time = null)
 */
class Smarty extends Smarty_Internal_TemplateBase
{
    /**
     * smarty version
     */
    const SMARTY_VERSION = '3.1.32';
    /**
     * define variable scopes
     */
    const SCOPE_LOCAL    = 1;
    const SCOPE_PARENT   = 2;
    const SCOPE_TPL_ROOT = 4;
    const SCOPE_ROOT     = 8;
    const SCOPE_SMARTY   = 16;
    const SCOPE_GLOBAL   = 32;
    /**
     * define caching modes
     */
    const CACHING_OFF              = 0;
    const CACHING_LIFETIME_CURRENT = 1;
    const CACHING_LIFETIME_SAVED   = 2;
    /**
     * define constant for clearing cache files be saved expiration dates
     */
    const CLEAR_EXPIRED = -1;
    /**
     * define compile check modes
     */
    const COMPILECHECK_OFF       = 0;
    const COMPILECHECK_ON        = 1;
    const COMPILECHECK_CACHEMISS = 2;
    /**
     * define debug modes
     */
    const DEBUG_OFF        = 0;
    const DEBUG_ON         = 1;
    const DEBUG_INDIVIDUAL = 2;
    /**
     * modes for handling of "<?php ... ?>" tags in templates.
     */
    const PHP_PASSTHRU = 0; //-> print tags as plain text
    const PHP_QUOTE    = 1; //-> escape tags as entities
    const PHP_REMOVE   = 2; //-> escape tags as entities
    const PHP_ALLOW    = 3; //-> escape tags as entities
    /**
     * filter types
     */
    const FILTER_POST     = 'post';
    const FILTER_PRE      = 'pre';
    const FILTER_OUTPUT   = 'output';
    const FILTER_VARIABLE = 'variable';
    /**
     * plugin types
     */
    const PLUGIN_FUNCTION         = 'function';
    const PLUGIN_BLOCK            = 'block';
    const PLUGIN_COMPILER         = 'compiler';
    const PLUGIN_MODIFIER         = 'modifier';
    const PLUGIN_MODIFIERCOMPILER = 'modifiercompiler';
    /**
     * assigned global tpl vars
     */
    public static $global_tpl_vars = array();
    /**
     * Flag denoting if Multibyte String functions are available
     */
    public static $_MBSTRING = SMARTY_MBSTRING;
    /**
     * The character set to adhere to (e.g. "UTF-8")
     */
    public static $_CHARSET = SMARTY_RESOURCE_CHAR_SET;
    /**
     * The date format to be used internally
     * (accepts date() and strftime())
     */
    public static $_DATE_FORMAT = SMARTY_RESOURCE_DATE_FORMAT;
    /**
     * Flag denoting if PCRE should run in UTF-8 mode
     */
    public static $_UTF8_MODIFIER = 'u';
    /**
     * Flag denoting if operating system is windows
     */
    public static $_IS_WINDOWS = false;
    /**
     * auto literal on delimiters with whitespace
     *
     * @var boolean
     */
    public $auto_literal = true;
    /**
     * display error on not assigned variables
     *
     * @var boolean
     */
    public $error_unassigned = false;
    /**
     * look up relative file path in include_path
     *
     * @var boolean
     */
    public $use_include_path = false;
    /**
     * flag if template_dir is normalized
     *
     * @var bool
     */
    public $_templateDirNormalized = false;
    /**
     * joined template directory string used in cache keys
     *
     * @var string
     */
    public $_joined_template_dir = null;
    /**
     * flag if config_dir is normalized
     *
     * @var bool
     */
    public $_configDirNormalized = false;
    /**
     * joined config directory string used in cache keys
     *
     * @var string
     */
    public $_joined_config_dir = null;
    /**
     * default template handler
     *
     * @var callable
     */
    public $default_template_handler_func = null;
    /**
     * default config handler
     *
     * @var callable
     */
    public $default_config_handler_func = null;
    /**
     * default plugin handler
     *
     * @var callable
     */
    public $default_plugin_handler_func = null;
    /**
     * flag if template_dir is normalized
     *
     * @var bool
     */
    public $_compileDirNormalized = false;
    /**
     * flag if plugins_dir is normalized
     *
     * @var bool
     */
    public $_pluginsDirNormalized = false;
    /**
     * flag if template_dir is normalized
     *
     * @var bool
     */
    public $_cacheDirNormalized = false;
    /**
     * force template compiling?
     *
     * @var boolean
     */
    public $force_compile = false;
     /**
     * use sub dirs for compiled/cached files?
     *
     * @var boolean
     */
    public $use_sub_dirs = false;
    /**
     * allow ambiguous resources (that are made unique by the resource handler)
     *
     * @var boolean
     */
    public $allow_ambiguous_resources = false;
    /**
     * merge compiled includes
     *
     * @var boolean
     */
    public $merge_compiled_includes = false;
    /*
    * flag for behaviour when extends: resource  and {extends} tag are used simultaneous
    *   if false disable execution of {extends} in templates called by extends resource.
    *   (behaviour as versions < 3.1.28)
    *
    * @var boolean
    */
    public $extends_recursion = true;
    /**
     * force cache file creation
     *
     * @var boolean
     */
    public $force_cache = false;
    /**
     * template left-delimiter
     *
     * @var string
     */
    public $left_delimiter = "{";
    /**
     * template right-delimiter
     *
     * @var string
     */
    public $right_delimiter = "}";
    /**
     * array of strings which shall be treated as literal by compiler
     *
     * @var array string
     */
    public $literals = array();
    /**
     * class name
     * This should be instance of Smarty_Security.
     *
     * @var string
     * @see Smarty_Security
     */
    public $security_class = 'Smarty_Security';
    /**
     * implementation of security class
     *
     * @var Smarty_Security
     */
    public $security_policy = null;
    /**
     * controls handling of PHP-blocks
     *
     * @var integer
     */
    public $php_handling = self::PHP_PASSTHRU;
    /**
     * controls if the php template file resource is allowed
     *
     * @var bool
     */
    public $allow_php_templates = false;
    /**
     * debug mode
     * Setting this to true enables the debug-console.
     *
     * @var boolean
     */
    public $debugging = false;
    /**
     * This determines if debugging is enable-able from the browser.
     * <ul>
     *  <li>NONE => no debugging control allowed</li>
     *  <li>URL => enable debugging when SMARTY_DEBUG is found in the URL.</li>
     * </ul>
     *
     * @var string
     */
    public $debugging_ctrl = 'NONE';
    /**
     * Name of debugging URL-param.
     * Only used when $debugging_ctrl is set to 'URL'.
     * The name of the URL-parameter that activates debugging.
     *
     * @var string
     */
    public $smarty_debug_id = 'SMARTY_DEBUG';
    /**
     * Path of debug template.
     *
     * @var string
     */
    public $debug_tpl = null;
    /**
     * When set, smarty uses this value as error_reporting-level.
     *
     * @var int
     */
    public $error_reporting = null;
    /**
     * Controls whether variables with the same name overwrite each other.
     *
     * @var boolean
     */
    public $config_overwrite = true;
    /**
     * Controls whether config values of on/true/yes and off/false/no get converted to boolean.
     *
     * @var boolean
     */
    public $config_booleanize = true;
    /**
     * Controls whether hidden config sections/vars are read from the file.
     *
     * @var boolean
     */
    public $config_read_hidden = false;
    /**
     * locking concurrent compiles
     *
     * @var boolean
     */
    public $compile_locking = true;
    /**
     * Controls whether cache resources should use locking mechanism
     *
     * @var boolean
     */
    public $cache_locking = false;
    /**
     * seconds to wait for acquiring a lock before ignoring the write lock
     *
     * @var float
     */
    public $locking_timeout = 10;
    /**
     * resource type used if none given
     * Must be an valid key of $registered_resources.
     *
     * @var string
     */
    public $default_resource_type = 'file';
    /**
     * caching type
     * Must be an element of $cache_resource_types.
     *
     * @var string
     */
    public $caching_type = 'file';
    /**
     * config type
     *
     * @var string
     */
    public $default_config_type = 'file';
    /**
     * check If-Modified-Since headers
     *
     * @var boolean
     */
    public $cache_modified_check = false;
    /**
     * registered plugins
     *
     * @var array
     */
    public $registered_plugins = array();
    /**
     * registered objects
     *
     * @var array
     */
    public $registered_objects = array();
    /**
     * registered classes
     *
     * @var array
     */
    public $registered_classes = array();
    /**
     * registered filters
     *
     * @var array
     */
    public $registered_filters = array();
    /**
     * registered resources
     *
     * @var array
     */
    public $registered_resources = array();
    /**
     * registered cache resources
     *
     * @var array
     */
    public $registered_cache_resources = array();
    /**
     * autoload filter
     *
     * @var array
     */
    public $autoload_filters = array();
    /**
     * default modifier
     *
     * @var array
     */
    public $default_modifiers = array();
    /**
     * autoescape variable output
     *
     * @var boolean
     */
    public $escape_html = false;
    /**
     * start time for execution time calculation
     *
     * @var int
     */
    public $start_time = 0;
    /**
     * required by the compiler for BC
     *
     * @var string
     */
    public $_current_file = null;
    /**
     * internal flag to enable parser debugging
     *
     * @var bool
     */
    public $_parserdebug = false;
    /**
     * This object type (Smarty = 1, template = 2, data = 4)
     *
     * @var int
     */
    public $_objType = 1;
    /**
     * Debug object
     *
     * @var Smarty_Internal_Debug
     */
    public $_debug = null;
    /**
     * template directory
     *
     * @var array
     */
    protected $template_dir = array('./templates/');
    /**
     * flags for normalized template directory entries
     *
     * @var array
     */
    protected $_processedTemplateDir = array();
    /**
     * config directory
     *
     * @var array
     */
    protected $config_dir = array('./configs/');
    /**
     * flags for normalized template directory entries
     *
     * @var array
     */
    protected $_processedConfigDir = array();
    /**
     * compile directory
     *
     * @var string
     */
    protected $compile_dir = './templates_c/';
    /**
     * plugins directory
     *
     * @var array
     */
    protected $plugins_dir = array();
    /**
     * cache directory
     *
     * @var string
     */
    protected $cache_dir = './cache/';
    /**
     * removed properties
     *
     * @var string[]
     */
    protected $obsoleteProperties = array('resource_caching', 'template_resource_caching', 'direct_access_security',
                                          '_dir_perms', '_file_perms', 'plugin_search_order',
                                          'inheritance_merge_compiled_includes', 'resource_cache_mode',);
    /**
     * List of private properties which will call getter/setter on a direct access
     *
     * @var string[]
     */
    protected $accessMap = array('template_dir' => 'TemplateDir', 'config_dir' => 'ConfigDir',
                                 'plugins_dir'  => 'PluginsDir', 'compile_dir' => 'CompileDir',
                                 'cache_dir'    => 'CacheDir',);

    /**
     * Initialize new Smarty object
     */
    public function __construct()
    {
        $this->_clearTemplateCache();
        parent::__construct();
        if (is_callable('mb_internal_encoding')) {
            mb_internal_encoding(Smarty::$_CHARSET);
        }
        $this->start_time = microtime(true);
        if (isset($_SERVER[ 'SCRIPT_NAME' ])) {
            Smarty::$global_tpl_vars[ 'SCRIPT_NAME' ] = new Smarty_Variable($_SERVER[ 'SCRIPT_NAME' ]);
        }
        // Check if we're running on windows
        Smarty::$_IS_WINDOWS = strtoupper(substr(PHP_OS, 0, 3)) === 'WIN';
        // let PCRE (preg_*) treat strings as ISO-8859-1 if we're not dealing with UTF-8
        if (Smarty::$_CHARSET !== 'UTF-8') {
            Smarty::$_UTF8_MODIFIER = '';
        }
    }

    /**
     * Enable error handler to mute expected messages
     *
     * @return boolean
     * @deprecated
     */
    public static function muteExpectedErrors()
    {
        return Smarty_Internal_ErrorHandler::muteExpectedErrors();
    }

    /**
     * Disable error handler muting expected messages
     *
     * @deprecated
     */
    public static function unmuteExpectedErrors()
    {
        restore_error_handler();
    }

    /**
     * Check if a template resource exists
     *
     * @param  string $resource_name template name
     *
     * @return bool status
     * @throws \SmartyException
     */
    public function templateExists($resource_name)
    {
        // create source object
        $source = Smarty_Template_Source::load(null, $this, $resource_name);
        return $source->exists;
    }

    /**
     * Loads security class and enables security
     *
     * @param  string|Smarty_Security $security_class if a string is used, it must be class-name
     *
     * @return Smarty                 current Smarty instance for chaining
     * @throws SmartyException        when an invalid class name is provided
     */
    public function enableSecurity($security_class = null)
    {
        Smarty_Security::enableSecurity($this, $security_class);
        return $this;
    }

    /**
     * Disable security
     *
     * @return Smarty current Smarty instance for chaining
     */
    public function disableSecurity()
    {
        $this->security_policy = null;
        return $this;
    }

    /**
     * Add template directory(s)
     *
     * @param  string|array $template_dir directory(s) of template sources
     * @param  string       $key          of the array element to assign the template dir to
     * @param bool          $isConfig     true for config_dir
     *
     * @return Smarty          current Smarty instance for chaining
     */
    public function addTemplateDir($template_dir, $key = null, $isConfig = false)
    {
        if ($isConfig) {
            $processed = &$this->_processedConfigDir;
            $dir = &$this->config_dir;
            $this->_configDirNormalized = false;
        } else {
            $processed = &$this->_processedTemplateDir;
            $dir = &$this->template_dir;
            $this->_templateDirNormalized = false;
        }
        if (is_array($template_dir)) {
            foreach ($template_dir as $k => $v) {
                if (is_int($k)) {
                    // indexes are not merged but appended
                    $dir[] = $v;
                } else {
                    // string indexes are overridden
                    $dir[ $k ] = $v;
                    unset($processed[ $key ]);
                }
            }
        } else {
            if ($key !== null) {
                // override directory at specified index
                $dir[ $key ] = $template_dir;
                unset($processed[ $key ]);
            } else {
                // append new directory
                $dir[] = $template_dir;
            }
        }
        return $this;
    }

    /**
     * Get template directories
     *
     * @param mixed $index    index of directory to get, null to get all
     * @param bool  $isConfig true for config_dir
     *
     * @return array list of template directories, or directory of $index
     */
    public function getTemplateDir($index = null, $isConfig = false)
    {
        if ($isConfig) {
            $dir = &$this->config_dir;
        } else {
            $dir = &$this->template_dir;
        }
        if ($isConfig ? !$this->_configDirNormalized : !$this->_templateDirNormalized) {
            $this->_normalizeTemplateConfig($isConfig);
        }
        if ($index !== null) {
            return isset($dir[ $index ]) ? $dir[ $index ] : null;
        }
        return $dir;
    }

    /**
     * Set template directory
     *
     * @param  string|array $template_dir directory(s) of template sources
     * @param bool          $isConfig     true for config_dir
     *
     * @return \Smarty current Smarty instance for chaining
     */
    public function setTemplateDir($template_dir, $isConfig = false)
    {
        if ($isConfig) {
            $this->config_dir = array();
            $this->_processedConfigDir = array();
        } else {
            $this->template_dir = array();
            $this->_processedTemplateDir = array();
        }
        $this->addTemplateDir($template_dir, null, $isConfig);
        return $this;
    }

    /**
     * Add config directory(s)
     *
     * @param string|array $config_dir directory(s) of config sources
     * @param mixed        $key        key of the array element to assign the config dir to
     *
     * @return Smarty current Smarty instance for chaining
     */
    public function addConfigDir($config_dir, $key = null)
    {
        return $this->addTemplateDir($config_dir, $key, true);
    }

    /**
     * Get config directory
     *
     * @param mixed $index index of directory to get, null to get all
     *
     * @return array configuration directory
     */
    public function getConfigDir($index = null)
    {
        return $this->getTemplateDir($index, true);
    }

    /**
     * Set config directory
     *
     * @param $config_dir
     *
     * @return Smarty       current Smarty instance for chaining
     */
    public function setConfigDir($config_dir)
    {
        return $this->setTemplateDir($config_dir, true);
    }

    /**
     * Adds directory of plugin files
     *
     * @param null|array|string $plugins_dir
     *
     * @return Smarty current Smarty instance for chaining
     */
    public function addPluginsDir($plugins_dir)
    {
        if (empty($this->plugins_dir)) {
            $this->plugins_dir[] = SMARTY_PLUGINS_DIR;
        }
        $this->plugins_dir = array_merge($this->plugins_dir, (array)$plugins_dir);
        $this->_pluginsDirNormalized = false;
        return $this;
    }

    /**
     * Get plugin directories
     *
     * @return array list of plugin directories
     */
    public function getPluginsDir()
    {
        if (empty($this->plugins_dir)) {
            $this->plugins_dir[] = SMARTY_PLUGINS_DIR;
            $this->_pluginsDirNormalized = false;
        }
        if (!$this->_pluginsDirNormalized) {
            if (!is_array($this->plugins_dir)) {
                $this->plugins_dir = (array)$this->plugins_dir;
            }
            foreach ($this->plugins_dir as $k => $v) {
                $this->plugins_dir[ $k ] = $this->_realpath(rtrim($v, "/\\") . DIRECTORY_SEPARATOR, true);
            }
            $this->_cache[ 'plugin_files' ] = array();
            $this->_pluginsDirNormalized = true;
        }
        return $this->plugins_dir;
    }

    /**
     * Set plugins directory
     *
     * @param  string|array $plugins_dir directory(s) of plugins
     *
     * @return Smarty       current Smarty instance for chaining
     */
    public function setPluginsDir($plugins_dir)
    {
        $this->plugins_dir = (array)$plugins_dir;
        $this->_pluginsDirNormalized = false;
        return $this;
    }

    /**
     * Get compiled directory
     *
     * @return string path to compiled templates
     */
    public function getCompileDir()
    {
        if (!$this->_compileDirNormalized) {
            $this->_normalizeDir('compile_dir', $this->compile_dir);
            $this->_compileDirNormalized = true;
        }
        return $this->compile_dir;
    }

    /**
     *
     * @param  string $compile_dir directory to store compiled templates in
     *
     * @return Smarty current Smarty instance for chaining
     */
    public function setCompileDir($compile_dir)
    {
        $this->_normalizeDir('compile_dir', $compile_dir);
        $this->_compileDirNormalized = true;
        return $this;
    }

    /**
     * Get cache directory
     *
     * @return string path of cache directory
     */
    public function getCacheDir()
    {
        if (!$this->_cacheDirNormalized) {
            $this->_normalizeDir('cache_dir', $this->cache_dir);
            $this->_cacheDirNormalized = true;
        }
        return $this->cache_dir;
    }

    /**
     * Set cache directory
     *
     * @param  string $cache_dir directory to store cached templates in
     *
     * @return Smarty current Smarty instance for chaining
     */
    public function setCacheDir($cache_dir)
    {
        $this->_normalizeDir('cache_dir', $cache_dir);
        $this->_cacheDirNormalized = true;
        return $this;
    }

    /**
     * creates a template object
     *
     * @param  string  $template   the resource handle of the template file
     * @param  mixed   $cache_id   cache id to be used with this template
     * @param  mixed   $compile_id compile id to be used with this template
     * @param  object  $parent     next higher level of Smarty variables
     * @param  boolean $do_clone   flag is Smarty object shall be cloned
     *
     * @return \Smarty_Internal_Template template object
     * @throws \SmartyException
     */
    public function createTemplate($template, $cache_id = null, $compile_id = null, $parent = null, $do_clone = true)
    {
        if ($cache_id !== null && (is_object($cache_id) || is_array($cache_id))) {
            $parent = $cache_id;
            $cache_id = null;
        }
        if ($parent !== null && is_array($parent)) {
            $data = $parent;
            $parent = null;
        } else {
            $data = null;
        }
        if (!$this->_templateDirNormalized) {
            $this->_normalizeTemplateConfig(false);
        }
        $_templateId = $this->_getTemplateId($template, $cache_id, $compile_id);
        $tpl = null;
        if ($this->caching && isset(Smarty_Internal_Template::$isCacheTplObj[ $_templateId ])) {
            $tpl = $do_clone ? clone Smarty_Internal_Template::$isCacheTplObj[ $_templateId ] :
                Smarty_Internal_Template::$isCacheTplObj[ $_templateId ];
            $tpl->inheritance = null;
            $tpl->tpl_vars = $tpl->config_vars = array();
        } else if (!$do_clone && isset(Smarty_Internal_Template::$tplObjCache[ $_templateId ])) {
            $tpl = clone Smarty_Internal_Template::$tplObjCache[ $_templateId ];
            $tpl->inheritance = null;
            $tpl->tpl_vars = $tpl->config_vars = array();
        } else {
            /* @var Smarty_Internal_Template $tpl */
            $tpl = new $this->template_class($template, $this, null, $cache_id, $compile_id, null, null);
            $tpl->templateId = $_templateId;
        }
        if ($do_clone) {
            $tpl->smarty = clone $tpl->smarty;
        }
        $tpl->parent = $parent ? $parent : $this;
        // fill data if present
        if (!empty($data) && is_array($data)) {
            // set up variable values
            foreach ($data as $_key => $_val) {
                $tpl->tpl_vars[ $_key ] = new Smarty_Variable($_val);
            }
        }
        if ($this->debugging || $this->debugging_ctrl === 'URL') {
            $tpl->smarty->_debug = new Smarty_Internal_Debug();
            // check URL debugging control
            if (!$this->debugging && $this->debugging_ctrl === 'URL') {
                $tpl->smarty->_debug->debugUrl($tpl->smarty);
            }
        }
        return $tpl;
    }

    /**
     * Takes unknown classes and loads plugin files for them
     * class name format: Smarty_PluginType_PluginName
     * plugin filename format: plugintype.pluginname.php
     *
     * @param  string $plugin_name class plugin name to load
     * @param  bool   $check       check if already loaded
     *
     * @throws SmartyException
     * @return string |boolean filepath of loaded file or false
     */
    public function loadPlugin($plugin_name, $check = true)
    {
        return $this->ext->loadPlugin->loadPlugin($this, $plugin_name, $check);
    }

    /**
     * Get unique template id
     *
     * @param string                    $template_name
     * @param null|mixed                $cache_id
     * @param null|mixed                $compile_id
     * @param null                      $caching
     * @param \Smarty_Internal_Template $template
     *
     * @return string
     * @throws \SmartyException
     */
    public function _getTemplateId($template_name,
                                   $cache_id = null,
                                   $compile_id = null,
                                   $caching = null,
                                   Smarty_Internal_Template $template = null)
    {
        $template_name = (strpos($template_name, ':') === false) ? "{$this->default_resource_type}:{$template_name}" :
            $template_name;
        $cache_id = $cache_id === null ? $this->cache_id : $cache_id;
        $compile_id = $compile_id === null ? $this->compile_id : $compile_id;
        $caching = (int)($caching === null ? $this->caching : $caching);
        if ((isset($template) && strpos($template_name, ':.') !== false) || $this->allow_ambiguous_resources) {
            $_templateId =
                Smarty_Resource::getUniqueTemplateName((isset($template) ? $template : $this), $template_name) .
                "#{$cache_id}#{$compile_id}#{$caching}";
        } else {
            $_templateId = $this->_joined_template_dir . "#{$template_name}#{$cache_id}#{$compile_id}#{$caching}";
        }
        if (isset($_templateId[ 150 ])) {
            $_templateId = sha1($_templateId);
        }
        return $_templateId;
    }

    /**
     * Normalize path
     *  - remove /./ and /../
     *  - make it absolute if required
     *
     * @param string $path      file path
     * @param bool   $realpath  if true - convert to absolute
     *                          false - convert to relative
     *                          null - keep as it is but remove /./ /../
     *
     * @return string
     */
    public function _realpath($path, $realpath = null)
    {
        static $nds = null;
        static $sepDotsep = null;
        static $sepDot = null;
        static $sepSep =null;
        if (!isset($nds)) {
            $nds = array('/' => '\\', '\\' => '/');
            $sepDotsep = DIRECTORY_SEPARATOR . '.' . DIRECTORY_SEPARATOR;
            $sepDot = DIRECTORY_SEPARATOR . '.';
            $sepSep = DIRECTORY_SEPARATOR . DIRECTORY_SEPARATOR;
        }
        // normalize DIRECTORY_SEPARATOR
        $path = str_replace(array($nds[DIRECTORY_SEPARATOR], $sepDotsep), DIRECTORY_SEPARATOR, $path);
        if (strpos($path,$sepDot) === false && (($realpath === false && $path[0] === '.') || $realpath === null) && $path[0] !== '\\') {
            return $path;
        }
        preg_match('%^(?<root>(?:[[:alpha:]]:[\\\\]|/|[\\\\]{2}[[:alpha:]]+|[[:print:]]{2,}:[/]{2}|[\\\\])?)(?<path>(.*))$%u',
                   $path,
                   $parts);
        $path = $parts[ 'path' ];
        if ($parts[ 'root' ] === '\\') {
            $parts[ 'root' ] = substr(getcwd(), 0, 2) . $parts[ 'root' ];
        } else {
            if ($realpath !== null && !$parts[ 'root' ]) {
                $path = getcwd() . DIRECTORY_SEPARATOR . $path;
            }
        }
       // remove noop 'DIRECTORY_SEPARATOR DIRECTORY_SEPARATOR' and 'DIRECTORY_SEPARATOR.DIRECTORY_SEPARATOR' patterns
        $path = str_replace(array($sepDotsep,$sepSep), DIRECTORY_SEPARATOR, $path);
        // resolve '..DIRECTORY_SEPARATOR' pattern, smallest first
        if (strpos($path, '..' . DIRECTORY_SEPARATOR) !== false &&
            preg_match_all('#[\\\\/]([.][.][\\\\/])+#u', $path, $match)
        ) {
            $counts = array();
            foreach ($match[ 0 ] as $m) {
                $counts[] = (int)((strlen($m) - 1) / 3);
            }
            sort($counts);
            foreach ($counts as $count) {
                $path = preg_replace('#([\\\\/]+[^\\\\/]+){' . $count .
                                     '}[\\\\/]+([.][.][\\\\/]+){' . $count . '}#u',
                                     DIRECTORY_SEPARATOR,
                                     $path);
            }
        }
        return $realpath !== false ? $parts[ 'root' ] . $path : str_ireplace(getcwd(), '.', $parts[ 'root' ] . $path);
    }

    /**
     * Empty template objects cache
     */
    public fu
Download .txt
gitextract__o9w64dy/

├── Admin/
│   ├── Controller/
│   │   ├── BookController.class.php
│   │   ├── BorrowController.class.php
│   │   ├── IndexController.class.php
│   │   └── UserController.class.php
│   ├── Model/
│   │   ├── BookModel.class.php
│   │   ├── BorrowModel.class.php
│   │   └── UserModel.class.php
│   └── View/
│       ├── Book/
│       │   ├── add.html
│       │   ├── detail.html
│       │   ├── edit.html
│       │   └── index.html
│       ├── Borrow/
│       │   └── index.html
│       ├── Index/
│       │   └── index.html
│       └── User/
│           ├── add.html
│           ├── index.html
│           └── manage.html
├── Base/
│   ├── Base.class.php
│   ├── BaseController.class.php
│   ├── BaseModel.class.php
│   └── Conf.php
├── Common/
│   ├── Controller/
│   │   └── LoginController.class.php
│   ├── Model/
│   │   └── UserModel.class.php
│   └── View/
│       └── login.html
├── Home/
│   ├── Controller/
│   │   ├── BookController.class.php
│   │   ├── BorrowController.class.php
│   │   ├── IndexController.class.php
│   │   └── UserController.class.php
│   ├── Model/
│   │   ├── BookModel.class.php
│   │   ├── BorrowModel.class.php
│   │   └── UserModel.class.php
│   └── View/
│       ├── Book/
│       │   ├── detail.html
│       │   └── index.html
│       ├── Index/
│       │   └── index.html
│       └── User/
│           └── index.html
├── LICENSE
├── README.md
├── Tool/
│   ├── Db.class.php
│   ├── MySmarty.class.php
│   ├── Pager.class.php
│   ├── Verify.class.php
│   └── smarty-3.1.32/
│       └── libs/
│           ├── Autoloader.php
│           ├── Smarty.class.php
│           ├── SmartyBC.class.php
│           ├── bootstrap.php
│           ├── debug.tpl
│           ├── plugins/
│           │   ├── block.textformat.php
│           │   ├── function.counter.php
│           │   ├── function.cycle.php
│           │   ├── function.fetch.php
│           │   ├── function.html_checkboxes.php
│           │   ├── function.html_image.php
│           │   ├── function.html_options.php
│           │   ├── function.html_radios.php
│           │   ├── function.html_select_date.php
│           │   ├── function.html_select_time.php
│           │   ├── function.html_table.php
│           │   ├── function.mailto.php
│           │   ├── function.math.php
│           │   ├── modifier.capitalize.php
│           │   ├── modifier.date_format.php
│           │   ├── modifier.debug_print_var.php
│           │   ├── modifier.escape.php
│           │   ├── modifier.mb_wordwrap.php
│           │   ├── modifier.regex_replace.php
│           │   ├── modifier.replace.php
│           │   ├── modifier.spacify.php
│           │   ├── modifier.truncate.php
│           │   ├── modifiercompiler.cat.php
│           │   ├── modifiercompiler.count_characters.php
│           │   ├── modifiercompiler.count_paragraphs.php
│           │   ├── modifiercompiler.count_sentences.php
│           │   ├── modifiercompiler.count_words.php
│           │   ├── modifiercompiler.default.php
│           │   ├── modifiercompiler.escape.php
│           │   ├── modifiercompiler.from_charset.php
│           │   ├── modifiercompiler.indent.php
│           │   ├── modifiercompiler.lower.php
│           │   ├── modifiercompiler.noprint.php
│           │   ├── modifiercompiler.string_format.php
│           │   ├── modifiercompiler.strip.php
│           │   ├── modifiercompiler.strip_tags.php
│           │   ├── modifiercompiler.to_charset.php
│           │   ├── modifiercompiler.unescape.php
│           │   ├── modifiercompiler.upper.php
│           │   ├── modifiercompiler.wordwrap.php
│           │   ├── outputfilter.trimwhitespace.php
│           │   ├── shared.escape_special_chars.php
│           │   ├── shared.literal_compiler_param.php
│           │   ├── shared.make_timestamp.php
│           │   ├── shared.mb_str_replace.php
│           │   ├── shared.mb_unicode.php
│           │   └── variablefilter.htmlspecialchars.php
│           └── sysplugins/
│               ├── smarty_cacheresource.php
│               ├── smarty_cacheresource_custom.php
│               ├── smarty_cacheresource_keyvaluestore.php
│               ├── smarty_data.php
│               ├── smarty_internal_block.php
│               ├── smarty_internal_cacheresource_file.php
│               ├── smarty_internal_compile_append.php
│               ├── smarty_internal_compile_assign.php
│               ├── smarty_internal_compile_block.php
│               ├── smarty_internal_compile_block_child.php
│               ├── smarty_internal_compile_block_parent.php
│               ├── smarty_internal_compile_break.php
│               ├── smarty_internal_compile_call.php
│               ├── smarty_internal_compile_capture.php
│               ├── smarty_internal_compile_child.php
│               ├── smarty_internal_compile_config_load.php
│               ├── smarty_internal_compile_continue.php
│               ├── smarty_internal_compile_debug.php
│               ├── smarty_internal_compile_eval.php
│               ├── smarty_internal_compile_extends.php
│               ├── smarty_internal_compile_for.php
│               ├── smarty_internal_compile_foreach.php
│               ├── smarty_internal_compile_function.php
│               ├── smarty_internal_compile_if.php
│               ├── smarty_internal_compile_include.php
│               ├── smarty_internal_compile_include_php.php
│               ├── smarty_internal_compile_insert.php
│               ├── smarty_internal_compile_ldelim.php
│               ├── smarty_internal_compile_make_nocache.php
│               ├── smarty_internal_compile_nocache.php
│               ├── smarty_internal_compile_parent.php
│               ├── smarty_internal_compile_private_block_plugin.php
│               ├── smarty_internal_compile_private_foreachsection.php
│               ├── smarty_internal_compile_private_function_plugin.php
│               ├── smarty_internal_compile_private_modifier.php
│               ├── smarty_internal_compile_private_object_block_function.php
│               ├── smarty_internal_compile_private_object_function.php
│               ├── smarty_internal_compile_private_php.php
│               ├── smarty_internal_compile_private_print_expression.php
│               ├── smarty_internal_compile_private_registered_block.php
│               ├── smarty_internal_compile_private_registered_function.php
│               ├── smarty_internal_compile_private_special_variable.php
│               ├── smarty_internal_compile_rdelim.php
│               ├── smarty_internal_compile_section.php
│               ├── smarty_internal_compile_setfilter.php
│               ├── smarty_internal_compile_shared_inheritance.php
│               ├── smarty_internal_compile_while.php
│               ├── smarty_internal_compilebase.php
│               ├── smarty_internal_config_file_compiler.php
│               ├── smarty_internal_configfilelexer.php
│               ├── smarty_internal_configfileparser.php
│               ├── smarty_internal_data.php
│               ├── smarty_internal_debug.php
│               ├── smarty_internal_errorhandler.php
│               ├── smarty_internal_extension_handler.php
│               ├── smarty_internal_method_addautoloadfilters.php
│               ├── smarty_internal_method_adddefaultmodifiers.php
│               ├── smarty_internal_method_append.php
│               ├── smarty_internal_method_appendbyref.php
│               ├── smarty_internal_method_assignbyref.php
│               ├── smarty_internal_method_assignglobal.php
│               ├── smarty_internal_method_clearallassign.php
│               ├── smarty_internal_method_clearallcache.php
│               ├── smarty_internal_method_clearassign.php
│               ├── smarty_internal_method_clearcache.php
│               ├── smarty_internal_method_clearcompiledtemplate.php
│               ├── smarty_internal_method_clearconfig.php
│               ├── smarty_internal_method_compileallconfig.php
│               ├── smarty_internal_method_compilealltemplates.php
│               ├── smarty_internal_method_configload.php
│               ├── smarty_internal_method_createdata.php
│               ├── smarty_internal_method_getautoloadfilters.php
│               ├── smarty_internal_method_getconfigvariable.php
│               ├── smarty_internal_method_getconfigvars.php
│               ├── smarty_internal_method_getdebugtemplate.php
│               ├── smarty_internal_method_getdefaultmodifiers.php
│               ├── smarty_internal_method_getglobal.php
│               ├── smarty_internal_method_getregisteredobject.php
│               ├── smarty_internal_method_getstreamvariable.php
│               ├── smarty_internal_method_gettags.php
│               ├── smarty_internal_method_gettemplatevars.php
│               ├── smarty_internal_method_literals.php
│               ├── smarty_internal_method_loadfilter.php
│               ├── smarty_internal_method_loadplugin.php
│               ├── smarty_internal_method_mustcompile.php
│               ├── smarty_internal_method_registercacheresource.php
│               ├── smarty_internal_method_registerclass.php
│               ├── smarty_internal_method_registerdefaultconfighandler.php
│               ├── smarty_internal_method_registerdefaultpluginhandler.php
│               ├── smarty_internal_method_registerdefaulttemplatehandler.php
│               ├── smarty_internal_method_registerfilter.php
│               ├── smarty_internal_method_registerobject.php
│               ├── smarty_internal_method_registerplugin.php
│               ├── smarty_internal_method_registerresource.php
│               ├── smarty_internal_method_setautoloadfilters.php
│               ├── smarty_internal_method_setdebugtemplate.php
│               ├── smarty_internal_method_setdefaultmodifiers.php
│               ├── smarty_internal_method_unloadfilter.php
│               ├── smarty_internal_method_unregistercacheresource.php
│               ├── smarty_internal_method_unregisterfilter.php
│               ├── smarty_internal_method_unregisterobject.php
│               ├── smarty_internal_method_unregisterplugin.php
│               ├── smarty_internal_method_unregisterresource.php
│               ├── smarty_internal_nocache_insert.php
│               ├── smarty_internal_parsetree.php
│               ├── smarty_internal_parsetree_code.php
│               ├── smarty_internal_parsetree_dq.php
│               ├── smarty_internal_parsetree_dqcontent.php
│               ├── smarty_internal_parsetree_tag.php
│               ├── smarty_internal_parsetree_template.php
│               ├── smarty_internal_parsetree_text.php
│               ├── smarty_internal_resource_eval.php
│               ├── smarty_internal_resource_extends.php
│               ├── smarty_internal_resource_file.php
│               ├── smarty_internal_resource_php.php
│               ├── smarty_internal_resource_registered.php
│               ├── smarty_internal_resource_stream.php
│               ├── smarty_internal_resource_string.php
│               ├── smarty_internal_runtime_cachemodify.php
│               ├── smarty_internal_runtime_cacheresourcefile.php
│               ├── smarty_internal_runtime_capture.php
│               ├── smarty_internal_runtime_codeframe.php
│               ├── smarty_internal_runtime_filterhandler.php
│               ├── smarty_internal_runtime_foreach.php
│               ├── smarty_internal_runtime_getincludepath.php
│               ├── smarty_internal_runtime_inheritance.php
│               ├── smarty_internal_runtime_make_nocache.php
│               ├── smarty_internal_runtime_tplfunction.php
│               ├── smarty_internal_runtime_updatecache.php
│               ├── smarty_internal_runtime_updatescope.php
│               ├── smarty_internal_runtime_writefile.php
│               ├── smarty_internal_smartytemplatecompiler.php
│               ├── smarty_internal_template.php
│               ├── smarty_internal_templatebase.php
│               ├── smarty_internal_templatecompilerbase.php
│               ├── smarty_internal_templatelexer.php
│               ├── smarty_internal_templateparser.php
│               ├── smarty_internal_testinstall.php
│               ├── smarty_internal_undefined.php
│               ├── smarty_resource.php
│               ├── smarty_resource_custom.php
│               ├── smarty_resource_recompiled.php
│               ├── smarty_resource_uncompiled.php
│               ├── smarty_security.php
│               ├── smarty_template_cached.php
│               ├── smarty_template_compiled.php
│               ├── smarty_template_config.php
│               ├── smarty_template_resource_base.php
│               ├── smarty_template_source.php
│               ├── smarty_undefined_variable.php
│               ├── smarty_variable.php
│               ├── smartycompilerexception.php
│               └── smartyexception.php
├── book.sql
└── index.php
Download .txt
SYMBOL INDEX (1241 symbols across 227 files)

FILE: Admin/Controller/BookController.class.php
  class Book (line 8) | final class Book extends BaseController{
    method index (line 10) | public function index(){
    method detail (line 62) | public function detail(){
    method add (line 75) | public function add(){
    method edit (line 82) | public function edit(){
    method insert (line 95) | public function insert(){
    method update (line 119) | public function update(){
    method delete (line 145) | public function delete(){

FILE: Admin/Controller/BorrowController.class.php
  class Borrow (line 6) | final class Borrow extends BaseController{
    method index (line 8) | public function index(){
    method manage (line 15) | public function manage(){
    method prolong (line 61) | public function prolong(){
    method returnBook (line 95) | public function returnBook(){

FILE: Admin/Controller/IndexController.class.php
  class Index (line 7) | final class Index extends BaseController{
    method index (line 9) | public function index(){

FILE: Admin/Controller/UserController.class.php
  class User (line 8) | final class User extends BaseController{
    method index (line 10) | public function index(){
    method add (line 62) | public function add(){
    method manage (line 69) | public function manage(){
    method insert (line 94) | public function insert(){
    method changeInfo (line 121) | public function changeInfo(){
    method lost (line 142) | public function lost(){
    method open (line 156) | public function open(){
    method changePwd (line 170) | public function changePwd(){
    method delete (line 189) | public function delete(){

FILE: Admin/Model/BookModel.class.php
  class BookModel (line 5) | final class BookModel extends BaseModel{
    method fetchAllWithJoin (line 10) | public function fetchAllWithJoin($where = "2>1",$limit = ""){
    method fetchOneWithJoin (line 27) | public function fetchOneWithJoin($where = "2>1"){

FILE: Admin/Model/BorrowModel.class.php
  class BorrowModel (line 5) | final class BorrowModel extends BaseModel{
    method canBorrow (line 10) | public function canBorrow($bookId,$userId){
    method canReturn (line 22) | public function canReturn($bookId,$userId){
    method getBorrowInfo (line 33) | public function getBorrowInfo($where){

FILE: Admin/Model/UserModel.class.php
  class UserModel (line 5) | final class UserModel extends BaseModel{
    method fetchAllUser (line 11) | public function fetchAllUser($where = "2>1",$limit = ""){
    method rowCount (line 26) | public function rowCount($where = "2>1")

FILE: Base/Base.class.php
  class Base (line 2) | abstract class Base{
    method Run (line 4) | public static function Run(){
    method pageInit (line 13) | private static function pageInit(){
    method dirInit (line 18) | private static function dirInit(){
    method autoLoad (line 24) | private static function autoLoad(){
    method readConf (line 44) | private static function readConf(){
    method getRequest (line 49) | private static function getRequest(){
    method distributeRequest (line 61) | private static function distributeRequest(){

FILE: Base/BaseController.class.php
  class BaseController (line 5) | abstract class BaseController{
    method __construct (line 9) | public function __construct(){
    method accessPage (line 14) | protected function accessPage(){
    method accessJson (line 30) | protected function accessJson(){
    method sendJsonMessage (line 44) | protected function sendJsonMessage($message,$code){

FILE: Base/BaseModel.class.php
  class BaseModel (line 5) | abstract class BaseModel{
    method __construct (line 10) | public function __construct(){
    method fetchOne (line 15) | public function fetchOne($where){
    method fetchAll (line 21) | public function fetchAll($where = "2>1"){
    method rowCount (line 34) | public function rowCount($where = "2>1"){
    method insert (line 40) | public function insert($data){
    method update (line 58) | public function update($data,$where){
    method delete (line 69) | public function delete($where){

FILE: Common/Controller/LoginController.class.php
  class Login (line 7) | final class Login extends BaseController{
    method checkLogin (line 10) | private function checkLogin(){
    method index (line 18) | public function index(){
    method showVerify (line 23) | public function showVerify(){
    method login (line 28) | public function login(){
    method logout (line 68) | public function logout(){

FILE: Common/Model/UserModel.class.php
  class UserModel (line 5) | final class UserModel extends BaseModel{

FILE: Home/Controller/BookController.class.php
  class Book (line 7) | final class Book extends BaseController{
    method index (line 9) | public function index(){
    method detail (line 60) | public function detail(){

FILE: Home/Controller/BorrowController.class.php
  class Borrow (line 6) | final class Borrow extends BaseController{
    method prolong (line 11) | public function prolong(){

FILE: Home/Controller/IndexController.class.php
  class Index (line 8) | final class Index extends BaseController{
    method index (line 10) | public function index(){

FILE: Home/Controller/UserController.class.php
  class User (line 7) | final class User extends BaseController{
    method index (line 9) | public function index(){
    method lost (line 26) | public function lost(){
    method changePwd (line 43) | public function changePwd(){

FILE: Home/Model/BookModel.class.php
  class BookModel (line 5) | final class BookModel extends BaseModel{
    method fetchAllWithJoin (line 9) | public function fetchAllWithJoin($where = "2>1",$limit = ""){
    method fetchOneWithJoin (line 26) | public function fetchOneWithJoin($where = "2>1"){

FILE: Home/Model/BorrowModel.class.php
  class BorrowModel (line 5) | final class BorrowModel extends BaseModel{
    method getBorrowInfo (line 10) | public function getBorrowInfo(){

FILE: Home/Model/UserModel.class.php
  class UserModel (line 5) | final class UserModel extends BaseModel{

FILE: Tool/Db.class.php
  class Db (line 3) | final Class Db{
    method __clone (line 15) | private function __clone(){}
    method __construct (line 18) | private function __construct(){
    method connect (line 29) | private function connect(){
    method setCharSet (line 38) | private function setCharSet(){
    method isErr (line 43) | private function isErr(){
    method getInstance (line 52) | public static function getInstance(){
    method query (line 59) | public function query($sql,$mode = 1){
    method exec (line 79) | public function exec($sql){
    method rowCount (line 90) | public function rowCount($sql){

FILE: Tool/MySmarty.class.php
  class MySmarty (line 5) | final class MySmarty{
    method smartyInit (line 10) | private static function smartyInit(){
    method getInstance (line 19) | public static function getInstance(){

FILE: Tool/Pager.class.php
  class Pager (line 5) | final class Pager{
    method __construct (line 19) | public function __construct($currentPage,$total,$each,$url,array $parm...
    method page (line 32) | public function page(){
    method parmsParse (line 41) | private function parmsParse(){
    method firstInit (line 63) | private function firstInit(){
    method middleInit (line 85) | private function middleInit(){
    method lastInit (line 117) | private function lastInit(){

FILE: Tool/Verify.class.php
  class Verify (line 3) | final class Verify
    method __construct (line 9) | public function __construct($width = 60, $height = 34){
    method picInit (line 19) | private function picInit(){
    method createPic (line 23) | private function createPic(){
    method writeCode (line 32) | private function writeCode(){
    method writeNoise (line 49) | private function writeNoise(){
    method outPutPic (line 56) | private function outPutPic(){

FILE: Tool/smarty-3.1.32/libs/Autoloader.php
  class Smarty_Autoloader (line 21) | class Smarty_Autoloader
    method registerBC (line 49) | public static function registerBC($prepend = false)
    method register (line 74) | public static function register($prepend = false)
    method autoload (line 91) | public static function autoload($class)

FILE: Tool/smarty-3.1.32/libs/Smarty.class.php
  class Smarty (line 110) | class Smarty extends Smarty_Internal_TemplateBase
    method __construct (line 599) | public function __construct()
    method muteExpectedErrors (line 624) | public static function muteExpectedErrors()
    method unmuteExpectedErrors (line 634) | public static function unmuteExpectedErrors()
    method templateExists (line 647) | public function templateExists($resource_name)
    method enableSecurity (line 662) | public function enableSecurity($security_class = null)
    method disableSecurity (line 673) | public function disableSecurity()
    method addTemplateDir (line 688) | public function addTemplateDir($template_dir, $key = null, $isConfig =...
    method getTemplateDir (line 731) | public function getTemplateDir($index = null, $isConfig = false)
    method setTemplateDir (line 755) | public function setTemplateDir($template_dir, $isConfig = false)
    method addConfigDir (line 776) | public function addConfigDir($config_dir, $key = null)
    method getConfigDir (line 788) | public function getConfigDir($index = null)
    method setConfigDir (line 800) | public function setConfigDir($config_dir)
    method addPluginsDir (line 812) | public function addPluginsDir($plugins_dir)
    method getPluginsDir (line 827) | public function getPluginsDir()
    method setPluginsDir (line 853) | public function setPluginsDir($plugins_dir)
    method getCompileDir (line 865) | public function getCompileDir()
    method setCompileDir (line 880) | public function setCompileDir($compile_dir)
    method getCacheDir (line 892) | public function getCacheDir()
    method setCacheDir (line 908) | public function setCacheDir($cache_dir)
    method createTemplate (line 927) | public function createTemplate($template, $cache_id = null, $compile_i...
    method loadPlugin (line 990) | public function loadPlugin($plugin_name, $check = true)
    method _getTemplateId (line 1007) | public function _getTemplateId($template_name,
    method _realpath (line 1043) | public function _realpath($path, $realpath = null)
    method _clearTemplateCache (line 1095) | public function _clearTemplateCache()
    method setUseSubDirs (line 1104) | public function setUseSubDirs($use_sub_dirs)
    method setErrorReporting (line 1112) | public function setErrorReporting($error_reporting)
    method setEscapeHtml (line 1120) | public function setEscapeHtml($escape_html)
    method getAutoLiteral (line 1130) | public function getAutoLiteral()
    method setAutoLiteral (line 1140) | public function setAutoLiteral($auto_literal = true)
    method setForceCompile (line 1148) | public function setForceCompile($force_compile)
    method setMergeCompiledIncludes (line 1156) | public function setMergeCompiledIncludes($merge_compiled_includes)
    method getLeftDelimiter (line 1166) | public function getLeftDelimiter()
    method setLeftDelimiter (line 1176) | public function setLeftDelimiter($left_delimiter)
    method getRightDelimiter (line 1186) | public function getRightDelimiter()
    method setRightDelimiter (line 1196) | public function setRightDelimiter($right_delimiter)
    method setDebugging (line 1204) | public function setDebugging($debugging)
    method setConfigOverwrite (line 1212) | public function setConfigOverwrite($config_overwrite)
    method setConfigBooleanize (line 1220) | public function setConfigBooleanize($config_booleanize)
    method setConfigReadHidden (line 1228) | public function setConfigReadHidden($config_read_hidden)
    method setCompileLocking (line 1236) | public function setCompileLocking($compile_locking)
    method setDefaultResourceType (line 1244) | public function setDefaultResourceType($default_resource_type)
    method setCachingType (line 1252) | public function setCachingType($caching_type)
    method testInstall (line 1262) | public function testInstall(&$errors = null)
    method _getSmartyObj (line 1272) | public function _getSmartyObj()
    method __get (line 1287) | public function __get($name)
    method __set (line 1312) | public function __set($name, $value)
    method _normalizeDir (line 1334) | private function _normalizeDir($dirName, $dir)
    method _normalizeTemplateConfig (line 1350) | private function _normalizeTemplateConfig($isConfig)

FILE: Tool/smarty-3.1.32/libs/SmartyBC.class.php
  class SmartyBC (line 38) | class SmartyBC extends Smarty
    method __construct (line 58) | public function __construct()
    method assign_by_ref (line 69) | public function assign_by_ref($tpl_var, &$value)
    method append_by_ref (line 81) | public function append_by_ref($tpl_var, &$value, $merge = false)
    method clear_assign (line 91) | public function clear_assign($tpl_var)
    method register_function (line 106) | public function register_function($function, $function_impl, $cacheabl...
    method unregister_function (line 116) | public function unregister_function($function)
    method register_object (line 133) | public function register_object($object, $object_impl, $allowed = arra...
    method unregister_object (line 146) | public function unregister_object($object)
    method register_block (line 161) | public function register_block($block, $block_impl, $cacheable = true,...
    method unregister_block (line 171) | public function unregister_block($block)
    method register_compiler_function (line 185) | public function register_compiler_function($function, $function_impl, ...
    method unregister_compiler_function (line 195) | public function unregister_compiler_function($function)
    method register_modifier (line 208) | public function register_modifier($modifier, $modifier_impl)
    method unregister_modifier (line 218) | public function unregister_modifier($modifier)
    method register_resource (line 229) | public function register_resource($type, $functions)
    method unregister_resource (line 239) | public function unregister_resource($type)
    method register_prefilter (line 252) | public function register_prefilter($function)
    method unregister_prefilter (line 262) | public function unregister_prefilter($function)
    method register_postfilter (line 275) | public function register_postfilter($function)
    method unregister_postfilter (line 285) | public function unregister_postfilter($function)
    method register_outputfilter (line 298) | public function register_outputfilter($function)
    method unregister_outputfilter (line 308) | public function unregister_outputfilter($function)
    method load_filter (line 321) | public function load_filter($type, $name)
    method clear_cache (line 336) | public function clear_cache($tpl_file = null, $cache_id = null, $compi...
    method clear_all_cache (line 348) | public function clear_all_cache($exp_time = null)
    method is_cached (line 364) | public function is_cached($tpl_file, $cache_id = null, $compile_id = n...
    method clear_all_assign (line 372) | public function clear_all_assign()
    method clear_compiled_tpl (line 388) | public function clear_compiled_tpl($tpl_file = null, $compile_id = nul...
    method template_exists (line 401) | public function template_exists($tpl_file)
    method get_template_vars (line 413) | public function get_template_vars($name = null)
    method get_config_vars (line 425) | public function get_config_vars($name = null)
    method config_load (line 437) | public function config_load($file, $section = null, $scope = 'global')
    method get_registered_object (line 449) | public function get_registered_object($name)
    method clear_config (line 459) | public function clear_config($var = null)
    method trigger_error (line 470) | public function trigger_error($error_msg, $error_type = E_USER_WARNING)

FILE: Tool/smarty-3.1.32/libs/plugins/block.textformat.php
  function smarty_block_textformat (line 36) | function smarty_block_textformat($params, $content, Smarty_Internal_Temp...

FILE: Tool/smarty-3.1.32/libs/plugins/function.counter.php
  function smarty_function_counter (line 24) | function smarty_function_counter($params, $template)

FILE: Tool/smarty-3.1.32/libs/plugins/function.cycle.php
  function smarty_function_cycle (line 47) | function smarty_function_cycle($params, $template)

FILE: Tool/smarty-3.1.32/libs/plugins/function.fetch.php
  function smarty_function_fetch (line 25) | function smarty_function_fetch($params, $template)

FILE: Tool/smarty-3.1.32/libs/plugins/function.html_checkboxes.php
  function smarty_function_html_checkboxes (line 46) | function smarty_function_html_checkboxes($params, Smarty_Internal_Templa...
  function smarty_function_html_checkboxes_output (line 193) | function smarty_function_html_checkboxes_output($name, $value, $output, ...

FILE: Tool/smarty-3.1.32/libs/plugins/function.html_image.php
  function smarty_function_html_image (line 39) | function smarty_function_html_image($params, Smarty_Internal_Template $t...

FILE: Tool/smarty-3.1.32/libs/plugins/function.html_options.php
  function smarty_function_html_options (line 38) | function smarty_function_html_options($params, Smarty_Internal_Template ...
  function smarty_function_html_options_optoutput (line 168) | function smarty_function_html_options_optoutput($key, $value, $selected,...
  function smarty_function_html_options_optgroup (line 216) | function smarty_function_html_options_optgroup($key, $values, $selected,...

FILE: Tool/smarty-3.1.32/libs/plugins/function.html_radios.php
  function smarty_function_html_radios (line 46) | function smarty_function_html_radios($params, Smarty_Internal_Template $...
  function smarty_function_html_radios_output (line 180) | function smarty_function_html_radios_output($name, $value, $output, $sel...

FILE: Tool/smarty-3.1.32/libs/plugins/function.html_select_date.php
  function smarty_function_html_select_date (line 46) | function smarty_function_html_select_date($params, Smarty_Internal_Templ...

FILE: Tool/smarty-3.1.32/libs/plugins/function.html_select_time.php
  function smarty_function_html_select_time (line 27) | function smarty_function_html_select_time($params, Smarty_Internal_Templ...

FILE: Tool/smarty-3.1.32/libs/plugins/function.html_table.php
  function smarty_function_html_table (line 50) | function smarty_function_html_table($params)
  function smarty_function_html_table_cycle (line 173) | function smarty_function_html_table_cycle($name, $var, $no)

FILE: Tool/smarty-3.1.32/libs/plugins/function.mailto.php
  function smarty_function_mailto (line 51) | function smarty_function_mailto($params)

FILE: Tool/smarty-3.1.32/libs/plugins/function.math.php
  function smarty_function_math (line 25) | function smarty_function_math($params, $template)

FILE: Tool/smarty-3.1.32/libs/plugins/modifier.capitalize.php
  function smarty_modifier_capitalize (line 24) | function smarty_modifier_capitalize($string, $uc_digits = false, $lc_res...
  function smarty_mod_cap_mbconvert_cb (line 88) | function smarty_mod_cap_mbconvert_cb($matches)
  function smarty_mod_cap_mbconvert2_cb (line 97) | function smarty_mod_cap_mbconvert2_cb($matches)
  function smarty_mod_cap_ucfirst_cb (line 106) | function smarty_mod_cap_ucfirst_cb($matches)
  function smarty_mod_cap_ucfirst2_cb (line 115) | function smarty_mod_cap_ucfirst2_cb($matches)

FILE: Tool/smarty-3.1.32/libs/plugins/modifier.date_format.php
  function smarty_modifier_date_format (line 30) | function smarty_modifier_date_format($string, $format = null, $default_d...

FILE: Tool/smarty-3.1.32/libs/plugins/modifier.debug_print_var.php
  function smarty_modifier_debug_print_var (line 25) | function smarty_modifier_debug_print_var($var, $max = 10, $length = 40, ...

FILE: Tool/smarty-3.1.32/libs/plugins/modifier.escape.php
  function smarty_modifier_escape (line 25) | function smarty_modifier_escape($string, $esc_type = 'html', $char_set =...

FILE: Tool/smarty-3.1.32/libs/plugins/modifier.mb_wordwrap.php
  function smarty_modifier_mb_wordwrap (line 25) | function smarty_modifier_mb_wordwrap($str, $width = 75, $break = "\n", $...

FILE: Tool/smarty-3.1.32/libs/plugins/modifier.regex_replace.php
  function smarty_modifier_regex_replace (line 26) | function smarty_modifier_regex_replace($string, $search, $replace, $limi...
  function _smarty_regex_replace_check (line 45) | function _smarty_regex_replace_check($search)

FILE: Tool/smarty-3.1.32/libs/plugins/modifier.replace.php
  function smarty_modifier_replace (line 25) | function smarty_modifier_replace($string, $search, $replace)

FILE: Tool/smarty-3.1.32/libs/plugins/modifier.spacify.php
  function smarty_modifier_spacify (line 23) | function smarty_modifier_spacify($string, $spacify_char = ' ')

FILE: Tool/smarty-3.1.32/libs/plugins/modifier.truncate.php
  function smarty_modifier_truncate (line 28) | function smarty_modifier_truncate($string, $length = 80, $etc = '...', $...

FILE: Tool/smarty-3.1.32/libs/plugins/modifiercompiler.cat.php
  function smarty_modifiercompiler_cat (line 26) | function smarty_modifiercompiler_cat($params)

FILE: Tool/smarty-3.1.32/libs/plugins/modifiercompiler.count_characters.php
  function smarty_modifiercompiler_count_characters (line 22) | function smarty_modifiercompiler_count_characters($params)

FILE: Tool/smarty-3.1.32/libs/plugins/modifiercompiler.count_paragraphs.php
  function smarty_modifiercompiler_count_paragraphs (line 23) | function smarty_modifiercompiler_count_paragraphs($params)

FILE: Tool/smarty-3.1.32/libs/plugins/modifiercompiler.count_sentences.php
  function smarty_modifiercompiler_count_sentences (line 23) | function smarty_modifiercompiler_count_sentences($params)

FILE: Tool/smarty-3.1.32/libs/plugins/modifiercompiler.count_words.php
  function smarty_modifiercompiler_count_words (line 22) | function smarty_modifiercompiler_count_words($params)

FILE: Tool/smarty-3.1.32/libs/plugins/modifiercompiler.default.php
  function smarty_modifiercompiler_default (line 22) | function smarty_modifiercompiler_default($params)

FILE: Tool/smarty-3.1.32/libs/plugins/modifiercompiler.escape.php
  function smarty_modifiercompiler_escape (line 23) | function smarty_modifiercompiler_escape($params, Smarty_Internal_Templat...

FILE: Tool/smarty-3.1.32/libs/plugins/modifiercompiler.from_charset.php
  function smarty_modifiercompiler_from_charset (line 21) | function smarty_modifiercompiler_from_charset($params)

FILE: Tool/smarty-3.1.32/libs/plugins/modifiercompiler.indent.php
  function smarty_modifiercompiler_indent (line 23) | function smarty_modifiercompiler_indent($params)

FILE: Tool/smarty-3.1.32/libs/plugins/modifiercompiler.lower.php
  function smarty_modifiercompiler_lower (line 24) | function smarty_modifiercompiler_lower($params)

FILE: Tool/smarty-3.1.32/libs/plugins/modifiercompiler.noprint.php
  function smarty_modifiercompiler_noprint (line 18) | function smarty_modifiercompiler_noprint()

FILE: Tool/smarty-3.1.32/libs/plugins/modifiercompiler.string_format.php
  function smarty_modifiercompiler_string_format (line 22) | function smarty_modifiercompiler_string_format($params)

FILE: Tool/smarty-3.1.32/libs/plugins/modifiercompiler.strip.php
  function smarty_modifiercompiler_strip (line 26) | function smarty_modifiercompiler_strip($params)

FILE: Tool/smarty-3.1.32/libs/plugins/modifiercompiler.strip_tags.php
  function smarty_modifiercompiler_strip_tags (line 22) | function smarty_modifiercompiler_strip_tags($params)

FILE: Tool/smarty-3.1.32/libs/plugins/modifiercompiler.to_charset.php
  function smarty_modifiercompiler_to_charset (line 21) | function smarty_modifiercompiler_to_charset($params)

FILE: Tool/smarty-3.1.32/libs/plugins/modifiercompiler.unescape.php
  function smarty_modifiercompiler_unescape (line 21) | function smarty_modifiercompiler_unescape($params)

FILE: Tool/smarty-3.1.32/libs/plugins/modifiercompiler.upper.php
  function smarty_modifiercompiler_upper (line 22) | function smarty_modifiercompiler_upper($params)

FILE: Tool/smarty-3.1.32/libs/plugins/modifiercompiler.wordwrap.php
  function smarty_modifiercompiler_wordwrap (line 23) | function smarty_modifiercompiler_wordwrap($params, Smarty_Internal_Templ...

FILE: Tool/smarty-3.1.32/libs/plugins/outputfilter.trimwhitespace.php
  function smarty_outputfilter_trimwhitespace (line 20) | function smarty_outputfilter_trimwhitespace($source)

FILE: Tool/smarty-3.1.32/libs/plugins/shared.escape_special_chars.php
  function smarty_function_escape_special_chars (line 21) | function smarty_function_escape_special_chars($string)

FILE: Tool/smarty-3.1.32/libs/plugins/shared.literal_compiler_param.php
  function smarty_literal_compiler_param (line 20) | function smarty_literal_compiler_param($params, $index, $default = null)

FILE: Tool/smarty-3.1.32/libs/plugins/shared.make_timestamp.php
  function smarty_make_timestamp (line 19) | function smarty_make_timestamp($string)

FILE: Tool/smarty-3.1.32/libs/plugins/shared.mb_str_replace.php
  function smarty_mb_str_replace (line 20) | function smarty_mb_str_replace($search, $replace, $subject, &$count = 0)

FILE: Tool/smarty-3.1.32/libs/plugins/shared.mb_unicode.php
  function smarty_mb_to_unicode (line 20) | function smarty_mb_to_unicode($string, $encoding = null)
  function smarty_mb_from_unicode (line 42) | function smarty_mb_from_unicode($unicode, $encoding = null)

FILE: Tool/smarty-3.1.32/libs/plugins/variablefilter.htmlspecialchars.php
  function smarty_variablefilter_htmlspecialchars (line 16) | function smarty_variablefilter_htmlspecialchars($source, Smarty_Internal...

FILE: Tool/smarty-3.1.32/libs/sysplugins/smarty_cacheresource.php
  class Smarty_CacheResource (line 16) | abstract class Smarty_CacheResource
    method populate (line 33) | abstract public function populate(Smarty_Template_Cached $cached, Smar...
    method populateTimestamp (line 42) | abstract public function populateTimestamp(Smarty_Template_Cached $cac...
    method process (line 53) | abstract public function process(Smarty_Internal_Template $_template, ...
    method writeCachedContent (line 64) | abstract public function writeCachedContent(Smarty_Internal_Template $...
    method readCachedContent (line 73) | abstract function readCachedContent(Smarty_Internal_Template $_template);
    method getCachedContent (line 82) | public function getCachedContent(Smarty_Internal_Template $_template)
    method clearAll (line 102) | abstract public function clearAll(Smarty $smarty, $exp_time = null);
    method clear (line 115) | abstract public function clear(Smarty $smarty, $resource_name, $cache_...
    method locked (line 123) | public function locked(Smarty $smarty, Smarty_Template_Cached $cached)
    method hasLock (line 148) | public function hasLock(Smarty $smarty, Smarty_Template_Cached $cached)
    method acquireLock (line 162) | public function acquireLock(Smarty $smarty, Smarty_Template_Cached $ca...
    method releaseLock (line 176) | public function releaseLock(Smarty $smarty, Smarty_Template_Cached $ca...
    method load (line 191) | public static function load(Smarty $smarty, $type = null)

FILE: Tool/smarty-3.1.32/libs/sysplugins/smarty_cacheresource_custom.php
  class Smarty_CacheResource_Custom (line 16) | abstract class Smarty_CacheResource_Custom extends Smarty_CacheResource
    method fetch (line 30) | abstract protected function fetch($id, $name, $cache_id, $compile_id, ...
    method fetchTimestamp (line 44) | protected function fetchTimestamp($id, $name, $cache_id, $compile_id)
    method save (line 61) | abstract protected function save($id, $name, $cache_id, $compile_id, $...
    method delete (line 73) | abstract protected function delete($name, $cache_id, $compile_id, $exp...
    method populate (line 83) | public function populate(Smarty_Template_Cached $cached, Smarty_Intern...
    method populateTimestamp (line 102) | public function populateTimestamp(Smarty_Template_Cached $cached)
    method process (line 128) | public function process(Smarty_Internal_Template $_smarty_tpl, Smarty_...
    method writeCachedContent (line 157) | public function writeCachedContent(Smarty_Internal_Template $_template...
    method readCachedContent (line 170) | public function readCachedContent(Smarty_Internal_Template $_template)
    method clearAll (line 193) | public function clearAll(Smarty $smarty, $exp_time = null)
    method clear (line 210) | public function clear(Smarty $smarty, $resource_name, $cache_id, $comp...
    method hasLock (line 234) | public function hasLock(Smarty $smarty, Smarty_Template_Cached $cached)
    method acquireLock (line 254) | public function acquireLock(Smarty $smarty, Smarty_Template_Cached $ca...
    method releaseLock (line 270) | public function releaseLock(Smarty $smarty, Smarty_Template_Cached $ca...

FILE: Tool/smarty-3.1.32/libs/sysplugins/smarty_cacheresource_keyvaluestore.php
  class Smarty_CacheResource_KeyValueStore (line 31) | abstract class Smarty_CacheResource_KeyValueStore extends Smarty_CacheRe...
    method populate (line 55) | public function populate(Smarty_Template_Cached $cached, Smarty_Intern...
    method populateTimestamp (line 70) | public function populateTimestamp(Smarty_Template_Cached $cached)
    method process (line 91) | public function process(Smarty_Internal_Template $_smarty_tpl, Smarty_...
    method writeCachedContent (line 123) | public function writeCachedContent(Smarty_Internal_Template $_template...
    method readCachedContent (line 137) | public function readCachedContent(Smarty_Internal_Template $_template)
    method clearAll (line 165) | public function clearAll(Smarty $smarty, $exp_time = null)
    method clear (line 189) | public function clear(Smarty $smarty, $resource_name, $cache_id, $comp...
    method getTemplateUid (line 209) | protected function getTemplateUid(Smarty $smarty, $resource_name)
    method sanitize (line 227) | protected function sanitize($string)
    method fetch (line 249) | protected function fetch($cid, $resource_name = null, $cache_id = null...
    method addMetaTimestamp (line 274) | protected function addMetaTimestamp(&$content)
    method getMetaTimestamp (line 288) | protected function getMetaTimestamp(&$content)
    method invalidate (line 309) | protected function invalidate($cid = null, $resource_name = null, $cac...
    method getLatestInvalidationTimestamp (line 350) | protected function getLatestInvalidationTimestamp($cid, $resource_name...
    method listInvalidationKeys (line 385) | protected function listInvalidationKeys($cid, $resource_name = null, $...
    method hasLock (line 433) | public function hasLock(Smarty $smarty, Smarty_Template_Cached $cached)
    method acquireLock (line 449) | public function acquireLock(Smarty $smarty, Smarty_Template_Cached $ca...
    method releaseLock (line 464) | public function releaseLock(Smarty $smarty, Smarty_Template_Cached $ca...
    method read (line 478) | abstract protected function read(array $keys);
    method write (line 488) | abstract protected function write(array $keys, $expire = null);
    method delete (line 497) | abstract protected function delete(array $keys);
    method purge (line 504) | protected function purge()

FILE: Tool/smarty-3.1.32/libs/sysplugins/smarty_data.php
  class Smarty_Data (line 18) | class Smarty_Data extends Smarty_Internal_Data
    method __construct (line 50) | public function __construct($_parent = null, $smarty = null, $name = n...

FILE: Tool/smarty-3.1.32/libs/sysplugins/smarty_internal_block.php
  class Smarty_Internal_Block (line 10) | class Smarty_Internal_Block
    method __construct (line 76) | public function __construct($name, $tplIndex)
    method callBlock (line 87) | public function callBlock(Smarty_Internal_Template $tpl)

FILE: Tool/smarty-3.1.32/libs/sysplugins/smarty_internal_cacheresource_file.php
  class Smarty_Internal_CacheResource_File (line 17) | class Smarty_Internal_CacheResource_File extends Smarty_CacheResource
    method populate (line 27) | public function populate(Smarty_Template_Cached $cached, Smarty_Intern...
    method populateTimestamp (line 73) | public function populateTimestamp(Smarty_Template_Cached $cached)
    method process (line 90) | public function process(Smarty_Internal_Template $_smarty_tpl,
    method writeCachedContent (line 112) | public function writeCachedContent(Smarty_Internal_Template $_template...
    method readCachedContent (line 142) | public function readCachedContent(Smarty_Internal_Template $_template)
    method clearAll (line 158) | public function clearAll(Smarty $smarty, $exp_time = null)
    method clear (line 174) | public function clear(Smarty $smarty, $resource_name, $cache_id, $comp...
    method hasLock (line 187) | public function hasLock(Smarty $smarty, Smarty_Template_Cached $cached)
    method acquireLock (line 210) | public function acquireLock(Smarty $smarty, Smarty_Template_Cached $ca...
    method releaseLock (line 224) | public function releaseLock(Smarty $smarty, Smarty_Template_Cached $ca...

FILE: Tool/smarty-3.1.32/libs/sysplugins/smarty_internal_compile_append.php
  class Smarty_Internal_Compile_Append (line 17) | class Smarty_Internal_Compile_Append extends Smarty_Internal_Compile_Assign
    method compile (line 29) | public function compile($args, Smarty_Internal_TemplateCompilerBase $c...

FILE: Tool/smarty-3.1.32/libs/sysplugins/smarty_internal_compile_assign.php
  class Smarty_Internal_Compile_Assign (line 17) | class Smarty_Internal_Compile_Assign extends Smarty_Internal_CompileBase
    method compile (line 46) | public function compile($args, Smarty_Internal_TemplateCompilerBase $c...

FILE: Tool/smarty-3.1.32/libs/sysplugins/smarty_internal_compile_block.php
  class Smarty_Internal_Compile_Block (line 16) | class Smarty_Internal_Compile_Block extends Smarty_Internal_Compile_Shar...
    method compile (line 55) | public function compile($args, Smarty_Internal_TemplateCompilerBase $c...
  class Smarty_Internal_Compile_Blockclose (line 91) | class Smarty_Internal_Compile_Blockclose extends Smarty_Internal_Compile...
    method compile (line 102) | public function compile($args, Smarty_Internal_TemplateCompilerBase $c...

FILE: Tool/smarty-3.1.32/libs/sysplugins/smarty_internal_compile_block_child.php
  class Smarty_Internal_Compile_Block_Child (line 16) | class Smarty_Internal_Compile_Block_Child extends Smarty_Internal_Compil...

FILE: Tool/smarty-3.1.32/libs/sysplugins/smarty_internal_compile_block_parent.php
  class Smarty_Internal_Compile_Block_Parent (line 16) | class Smarty_Internal_Compile_Block_Parent extends Smarty_Internal_Compi...

FILE: Tool/smarty-3.1.32/libs/sysplugins/smarty_internal_compile_break.php
  class Smarty_Internal_Compile_Break (line 17) | class Smarty_Internal_Compile_Break extends Smarty_Internal_CompileBase
    method compile (line 51) | public function compile($args, Smarty_Internal_TemplateCompilerBase $c...
    method checkLevels (line 76) | public function checkLevels($args, Smarty_Internal_TemplateCompilerBas...

FILE: Tool/smarty-3.1.32/libs/sysplugins/smarty_internal_compile_call.php
  class Smarty_Internal_Compile_Call (line 17) | class Smarty_Internal_Compile_Call extends Smarty_Internal_CompileBase
    method compile (line 51) | public function compile($args, $compiler)

FILE: Tool/smarty-3.1.32/libs/sysplugins/smarty_internal_compile_capture.php
  class Smarty_Internal_Compile_Capture (line 17) | class Smarty_Internal_Compile_Capture extends Smarty_Internal_CompileBase
    method compileSpecialVariable (line 45) | public static function compileSpecialVariable($args, Smarty_Internal_T...
    method compile (line 64) | public function compile($args, Smarty_Internal_TemplateCompilerBase $c...
  class Smarty_Internal_Compile_CaptureClose (line 88) | class Smarty_Internal_Compile_CaptureClose extends Smarty_Internal_Compi...
    method compile (line 99) | public function compile($args, Smarty_Internal_TemplateCompilerBase $c...

FILE: Tool/smarty-3.1.32/libs/sysplugins/smarty_internal_compile_child.php
  class Smarty_Internal_Compile_Child (line 16) | class Smarty_Internal_Compile_Child extends Smarty_Internal_CompileBase
    method compile (line 50) | public function compile($args, Smarty_Internal_TemplateCompilerBase $c...

FILE: Tool/smarty-3.1.32/libs/sysplugins/smarty_internal_compile_config_load.php
  class Smarty_Internal_Compile_Config_Load (line 17) | class Smarty_Internal_Compile_Config_Load extends Smarty_Internal_Compil...
    method compile (line 69) | public function compile($args, Smarty_Internal_TemplateCompilerBase $c...

FILE: Tool/smarty-3.1.32/libs/sysplugins/smarty_internal_compile_continue.php
  class Smarty_Internal_Compile_Continue (line 17) | class Smarty_Internal_Compile_Continue extends Smarty_Internal_Compile_B...

FILE: Tool/smarty-3.1.32/libs/sysplugins/smarty_internal_compile_debug.php
  class Smarty_Internal_Compile_Debug (line 18) | class Smarty_Internal_Compile_Debug extends Smarty_Internal_CompileBase
    method compile (line 28) | public function compile($args, $compiler)

FILE: Tool/smarty-3.1.32/libs/sysplugins/smarty_internal_compile_eval.php
  class Smarty_Internal_Compile_Eval (line 17) | class Smarty_Internal_Compile_Eval extends Smarty_Internal_CompileBase
    method compile (line 51) | public function compile($args, $compiler)

FILE: Tool/smarty-3.1.32/libs/sysplugins/smarty_internal_compile_extends.php
  class Smarty_Internal_Compile_Extends (line 18) | class Smarty_Internal_Compile_Extends extends Smarty_Internal_Compile_Sh...
    method compile (line 54) | public function compile($args, Smarty_Internal_TemplateCompilerBase $c...
    method compileEndChild (line 102) | private function compileEndChild(Smarty_Internal_TemplateCompilerBase ...
    method compileInclude (line 127) | private function compileInclude(Smarty_Internal_TemplateCompilerBase $...
    method extendsSourceArrayCode (line 142) | public static function extendsSourceArrayCode(Smarty_Internal_Template...

FILE: Tool/smarty-3.1.32/libs/sysplugins/smarty_internal_compile_for.php
  class Smarty_Internal_Compile_For (line 17) | class Smarty_Internal_Compile_For extends Smarty_Internal_CompileBase
    method compile (line 35) | public function compile($args, $compiler, $parameter)
  class Smarty_Internal_Compile_Forelse (line 111) | class Smarty_Internal_Compile_Forelse extends Smarty_Internal_CompileBase
    method compile (line 122) | public function compile($args, $compiler, $parameter)
  class Smarty_Internal_Compile_Forclose (line 140) | class Smarty_Internal_Compile_Forclose extends Smarty_Internal_CompileBase
    method compile (line 151) | public function compile($args, $compiler, $parameter)

FILE: Tool/smarty-3.1.32/libs/sysplugins/smarty_internal_compile_foreach.php
  class Smarty_Internal_Compile_Foreach (line 17) | class Smarty_Internal_Compile_Foreach extends Smarty_Internal_Compile_Pr...
    method compile (line 88) | public function compile($args, Smarty_Internal_TemplateCompilerBase $c...
    method compileRestore (line 263) | public function compileRestore($levels)
  class Smarty_Internal_Compile_Foreachelse (line 275) | class Smarty_Internal_Compile_Foreachelse extends Smarty_Internal_Compil...
    method compile (line 285) | public function compile($args, Smarty_Internal_TemplateCompilerBase $c...
  class Smarty_Internal_Compile_Foreachclose (line 307) | class Smarty_Internal_Compile_Foreachclose extends Smarty_Internal_Compi...
    method compile (line 318) | public function compile($args, Smarty_Internal_TemplateCompilerBase $c...

FILE: Tool/smarty-3.1.32/libs/sysplugins/smarty_internal_compile_function.php
  class Smarty_Internal_Compile_Function (line 17) | class Smarty_Internal_Compile_Function extends Smarty_Internal_CompileBase
    method compile (line 53) | public function compile($args, Smarty_Internal_TemplateCompilerBase $c...
  class Smarty_Internal_Compile_Functionclose (line 81) | class Smarty_Internal_Compile_Functionclose extends Smarty_Internal_Comp...
    method compile (line 99) | public function compile($args, Smarty_Internal_TemplateCompilerBase $c...
    method removeNocache (line 201) | function removeNocache($match)

FILE: Tool/smarty-3.1.32/libs/sysplugins/smarty_internal_compile_if.php
  class Smarty_Internal_Compile_If (line 17) | class Smarty_Internal_Compile_If extends Smarty_Internal_CompileBase
    method compile (line 29) | public function compile($args, Smarty_Internal_TemplateCompilerBase $c...
  class Smarty_Internal_Compile_Else (line 78) | class Smarty_Internal_Compile_Else extends Smarty_Internal_CompileBase
    method compile (line 88) | public function compile($args, Smarty_Internal_TemplateCompilerBase $c...
  class Smarty_Internal_Compile_Elseif (line 103) | class Smarty_Internal_Compile_Elseif extends Smarty_Internal_CompileBase
    method compile (line 115) | public function compile($args, Smarty_Internal_TemplateCompilerBase $c...
  class Smarty_Internal_Compile_Ifclose (line 185) | class Smarty_Internal_Compile_Ifclose extends Smarty_Internal_CompileBase
    method compile (line 195) | public function compile($args, Smarty_Internal_TemplateCompilerBase $c...

FILE: Tool/smarty-3.1.32/libs/sysplugins/smarty_internal_compile_include.php
  class Smarty_Internal_Compile_Include (line 16) | class Smarty_Internal_Compile_Include extends Smarty_Internal_CompileBase
    method compile (line 70) | public function compile($args, Smarty_Internal_SmartyTemplateCompiler ...
    method compileInlineTemplate (line 278) | public function compileInlineTemplate(Smarty_Internal_SmartyTemplateCo...

FILE: Tool/smarty-3.1.32/libs/sysplugins/smarty_internal_compile_include_php.php
  class Smarty_Internal_Compile_Include_Php (line 16) | class Smarty_Internal_Compile_Include_Php extends Smarty_Internal_Compil...
    method compile (line 52) | public function compile($args, Smarty_Internal_TemplateCompilerBase $c...

FILE: Tool/smarty-3.1.32/libs/sysplugins/smarty_internal_compile_insert.php
  class Smarty_Internal_Compile_Insert (line 17) | class Smarty_Internal_Compile_Insert extends Smarty_Internal_CompileBase
    method compile (line 51) | public function compile($args, Smarty_Internal_TemplateCompilerBase $c...

FILE: Tool/smarty-3.1.32/libs/sysplugins/smarty_internal_compile_ldelim.php
  class Smarty_Internal_Compile_Ldelim (line 17) | class Smarty_Internal_Compile_Ldelim extends Smarty_Internal_CompileBase
    method compile (line 29) | public function compile($args, Smarty_Internal_TemplateCompilerBase $c...

FILE: Tool/smarty-3.1.32/libs/sysplugins/smarty_internal_compile_make_nocache.php
  class Smarty_Internal_Compile_Make_Nocache (line 17) | class Smarty_Internal_Compile_Make_Nocache extends Smarty_Internal_Compi...
    method compile (line 49) | public function compile($args, Smarty_Internal_TemplateCompilerBase $c...

FILE: Tool/smarty-3.1.32/libs/sysplugins/smarty_internal_compile_nocache.php
  class Smarty_Internal_Compile_Nocache (line 17) | class Smarty_Internal_Compile_Nocache extends Smarty_Internal_CompileBase
    method compile (line 35) | public function compile($args, Smarty_Internal_TemplateCompilerBase $c...
  class Smarty_Internal_Compile_Nocacheclose (line 54) | class Smarty_Internal_Compile_Nocacheclose extends Smarty_Internal_Compi...
    method compile (line 65) | public function compile($args, Smarty_Internal_TemplateCompilerBase $c...

FILE: Tool/smarty-3.1.32/libs/sysplugins/smarty_internal_compile_parent.php
  class Smarty_Internal_Compile_Parent (line 16) | class Smarty_Internal_Compile_Parent extends Smarty_Internal_Compile_Child

FILE: Tool/smarty-3.1.32/libs/sysplugins/smarty_internal_compile_private_block_plugin.php
  class Smarty_Internal_Compile_Private_Block_Plugin (line 17) | class Smarty_Internal_Compile_Private_Block_Plugin extends Smarty_Intern...
    method compile (line 47) | public function compile($args, Smarty_Internal_TemplateCompilerBase $c...
    method setup (line 107) | public function setup(Smarty_Internal_TemplateCompilerBase $compiler, ...

FILE: Tool/smarty-3.1.32/libs/sysplugins/smarty_internal_compile_private_foreachsection.php
  class Smarty_Internal_Compile_Private_ForeachSection (line 17) | class Smarty_Internal_Compile_Private_ForeachSection extends Smarty_Inte...
    method scanForProperties (line 82) | public function scanForProperties($attributes, Smarty_Internal_Templat...
    method buildPropertyPreg (line 112) | public function buildPropertyPreg($named, $attributes)
    method matchProperty (line 141) | public function matchProperty($source)
    method matchTemplateSource (line 158) | public function matchTemplateSource(Smarty_Internal_TemplateCompilerBa...
    method matchParentTemplateSource (line 170) | public function matchParentTemplateSource(Smarty_Internal_TemplateComp...
    method matchBlockSource (line 198) | public function matchBlockSource(Smarty_Internal_TemplateCompilerBase ...
    method compileSpecialVariable (line 212) | public function compileSpecialVariable($args, Smarty_Internal_Template...

FILE: Tool/smarty-3.1.32/libs/sysplugins/smarty_internal_compile_private_function_plugin.php
  class Smarty_Internal_Compile_Private_Function_Plugin (line 17) | class Smarty_Internal_Compile_Private_Function_Plugin extends Smarty_Int...
    method compile (line 48) | public function compile($args, Smarty_Internal_TemplateCompilerBase $c...

FILE: Tool/smarty-3.1.32/libs/sysplugins/smarty_internal_compile_private_modifier.php
  class Smarty_Internal_Compile_Private_Modifier (line 18) | class Smarty_Internal_Compile_Private_Modifier extends Smarty_Internal_C...
    method compile (line 31) | public function compile($args, Smarty_Internal_TemplateCompilerBase $c...

FILE: Tool/smarty-3.1.32/libs/sysplugins/smarty_internal_compile_private_object_block_function.php
  class Smarty_Internal_Compile_Private_Object_Block_Function (line 17) | class Smarty_Internal_Compile_Private_Object_Block_Function extends Smar...
    method setup (line 29) | public function setup(Smarty_Internal_TemplateCompilerBase $compiler, ...

FILE: Tool/smarty-3.1.32/libs/sysplugins/smarty_internal_compile_private_object_function.php
  class Smarty_Internal_Compile_Private_Object_Function (line 17) | class Smarty_Internal_Compile_Private_Object_Function extends Smarty_Int...
    method compile (line 40) | public function compile($args, Smarty_Internal_TemplateCompilerBase $c...

FILE: Tool/smarty-3.1.32/libs/sysplugins/smarty_internal_compile_private_php.php
  class Smarty_Internal_Compile_Private_Php (line 17) | class Smarty_Internal_Compile_Private_Php extends Smarty_Internal_Compil...
    method compile (line 38) | public function compile($args, Smarty_Internal_TemplateCompilerBase $c...
    method parsePhp (line 110) | public function parsePhp(Smarty_Internal_Templatelexer $lex)
    method quote (line 210) | private function quote($match)

FILE: Tool/smarty-3.1.32/libs/sysplugins/smarty_internal_compile_private_print_expression.php
  class Smarty_Internal_Compile_Private_Print_Expression (line 17) | class Smarty_Internal_Compile_Private_Print_Expression extends Smarty_In...
    method compile (line 45) | public function compile($args, Smarty_Internal_TemplateCompilerBase $c...
    method compile_variable_filter (line 137) | private function compile_variable_filter(Smarty_Internal_TemplateCompi...

FILE: Tool/smarty-3.1.32/libs/sysplugins/smarty_internal_compile_private_registered_block.php
  class Smarty_Internal_Compile_Private_Registered_Block (line 17) | class Smarty_Internal_Compile_Private_Registered_Block extends Smarty_In...
    method setup (line 29) | public function setup(Smarty_Internal_TemplateCompilerBase $compiler, ...

FILE: Tool/smarty-3.1.32/libs/sysplugins/smarty_internal_compile_private_registered_function.php
  class Smarty_Internal_Compile_Private_Registered_Function (line 17) | class Smarty_Internal_Compile_Private_Registered_Function extends Smarty...
    method compile (line 39) | public function compile($args, Smarty_Internal_TemplateCompilerBase $c...

FILE: Tool/smarty-3.1.32/libs/sysplugins/smarty_internal_compile_private_special_variable.php
  class Smarty_Internal_Compile_Private_Special_Variable (line 17) | class Smarty_Internal_Compile_Private_Special_Variable extends Smarty_In...
    method compile (line 29) | public function compile($args, Smarty_Internal_TemplateCompilerBase $c...

FILE: Tool/smarty-3.1.32/libs/sysplugins/smarty_internal_compile_rdelim.php
  class Smarty_Internal_Compile_Rdelim (line 17) | class Smarty_Internal_Compile_Rdelim extends Smarty_Internal_Compile_Ldelim
    method compile (line 29) | public function compile($args, Smarty_Internal_TemplateCompilerBase $c...

FILE: Tool/smarty-3.1.32/libs/sysplugins/smarty_internal_compile_section.php
  class Smarty_Internal_Compile_Section (line 17) | class Smarty_Internal_Compile_Section extends Smarty_Internal_Compile_Pr...
    method compile (line 89) | public function compile($args, Smarty_Internal_TemplateCompilerBase $c...
  class Smarty_Internal_Compile_Sectionelse (line 402) | class Smarty_Internal_Compile_Sectionelse extends Smarty_Internal_Compil...
    method compile (line 412) | public function compile($args, Smarty_Internal_TemplateCompilerBase $c...
  class Smarty_Internal_Compile_Sectionclose (line 430) | class Smarty_Internal_Compile_Sectionclose extends Smarty_Internal_Compi...
    method compile (line 440) | public function compile($args, Smarty_Internal_TemplateCompilerBase $c...

FILE: Tool/smarty-3.1.32/libs/sysplugins/smarty_internal_compile_setfilter.php
  class Smarty_Internal_Compile_Setfilter (line 17) | class Smarty_Internal_Compile_Setfilter extends Smarty_Internal_CompileBase
    method compile (line 28) | public function compile($args, Smarty_Internal_TemplateCompilerBase $c...
  class Smarty_Internal_Compile_Setfilterclose (line 45) | class Smarty_Internal_Compile_Setfilterclose extends Smarty_Internal_Com...
    method compile (line 56) | public function compile($args, Smarty_Internal_TemplateCompilerBase $c...

FILE: Tool/smarty-3.1.32/libs/sysplugins/smarty_internal_compile_shared_inheritance.php
  class Smarty_Internal_Compile_Shared_Inheritance (line 17) | class Smarty_Internal_Compile_Shared_Inheritance extends Smarty_Internal...
    method postCompile (line 25) | static function postCompile(Smarty_Internal_TemplateCompilerBase $comp...
    method registerInit (line 37) | public function registerInit(Smarty_Internal_TemplateCompilerBase $com...

FILE: Tool/smarty-3.1.32/libs/sysplugins/smarty_internal_compile_while.php
  class Smarty_Internal_Compile_While (line 17) | class Smarty_Internal_Compile_While extends Smarty_Internal_CompileBase
    method compile (line 29) | public function compile($args, Smarty_Internal_TemplateCompilerBase $c...
  class Smarty_Internal_Compile_Whileclose (line 80) | class Smarty_Internal_Compile_Whileclose extends Smarty_Internal_Compile...
    method compile (line 90) | public function compile($args, Smarty_Internal_TemplateCompilerBase $c...

FILE: Tool/smarty-3.1.32/libs/sysplugins/smarty_internal_compilebase.php
  class Smarty_Internal_CompileBase (line 16) | abstract class Smarty_Internal_CompileBase
    method getAttributes (line 73) | public function getAttributes($compiler, $attributes)
    method openTag (line 156) | public function openTag($compiler, $openTag, $data = null)
    method closeTag (line 170) | public function closeTag($compiler, $expectedTag)

FILE: Tool/smarty-3.1.32/libs/sysplugins/smarty_internal_config_file_compiler.php
  class Smarty_Internal_Config_File_Compiler (line 18) | class Smarty_Internal_Config_File_Compiler
    method __construct (line 83) | public function __construct($lexer_class, $parser_class, Smarty $smarty)
    method compileTemplate (line 102) | public function compileTemplate(Smarty_Internal_Template $template)
    method trigger_config_file_error (line 172) | public function trigger_config_file_error($args = null)

FILE: Tool/smarty-3.1.32/libs/sysplugins/smarty_internal_configfilelexer.php
  class Smarty_Internal_Configfilelexer (line 22) | class Smarty_Internal_Configfilelexer
    method __construct (line 136) | function __construct($data, Smarty_Internal_Config_File_Compiler $comp...
    method replace (line 150) | public function replace($input)
    method PrintTrace (line 155) | public function PrintTrace()
    method yylex (line 161) | public function yylex()
    method yypushstate (line 166) | public function yypushstate($state)
    method yypopstate (line 186) | public function yypopstate()
    method yybegin (line 205) | public function yybegin($state)
    method yylex1 (line 217) | public function yylex1()
    method yy_r1_1 (line 272) | function yy_r1_1()
    method yy_r1_2 (line 278) | function yy_r1_2()
    method yy_r1_3 (line 284) | function yy_r1_3()
    method yy_r1_4 (line 289) | function yy_r1_4()
    method yy_r1_5 (line 295) | function yy_r1_5()
    method yy_r1_6 (line 300) | function yy_r1_6()
    method yy_r1_7 (line 305) | function yy_r1_7()
    method yy_r1_8 (line 310) | function yy_r1_8()
    method yylex2 (line 315) | public function yylex2()
    method yy_r2_1 (line 370) | function yy_r2_1()
    method yy_r2_2 (line 375) | function yy_r2_2()
    method yy_r2_3 (line 381) | function yy_r2_3()
    method yy_r2_4 (line 387) | function yy_r2_4()
    method yy_r2_5 (line 393) | function yy_r2_5()
    method yy_r2_6 (line 399) | function yy_r2_6()
    method yy_r2_7 (line 405) | function yy_r2_7()
    method yy_r2_8 (line 418) | function yy_r2_8()
    method yy_r2_9 (line 424) | function yy_r2_9()
    method yylex3 (line 431) | public function yylex3()
    method yy_r3_1 (line 485) | function yy_r3_1()
    method yylex4 (line 491) | public function yylex4()
    method yy_r4_1 (line 545) | function yy_r4_1()
    method yy_r4_2 (line 550) | function yy_r4_2()
    method yy_r4_3 (line 555) | function yy_r4_3()
    method yylex5 (line 561) | public function yylex5()
    method yy_r5_1 (line 615) | function yy_r5_1()
    method yy_r5_2 (line 620) | function yy_r5_2()
    method yylex6 (line 626) | public function yylex6()
    method yy_r6_1 (line 680) | function yy_r6_1()
    method yy_r6_2 (line 687) | function yy_r6_2()

FILE: Tool/smarty-3.1.32/libs/sysplugins/smarty_internal_configfileparser.php
  class TPC_yyStackEntry (line 3) | class TPC_yyStackEntry
  class Smarty_Internal_Configfileparser (line 24) | class Smarty_Internal_Configfileparser
    method __construct (line 278) | function __construct(Smarty_Internal_Configfilelexer $lex, Smarty_Inte...
    method yy_destructor (line 287) | public static function yy_destructor($yymajor, $yypminor)
    method parse_single_quoted_string (line 304) | private static function parse_single_quoted_string($qstr)
    method parse_double_quoted_string (line 326) | private static function parse_double_quoted_string($qstr)
    method parse_tripple_double_quoted_string (line 338) | private static function parse_tripple_double_quoted_string($qstr)
    method Trace (line 342) | public function Trace($TraceFILE, $zTracePrompt)
    method PrintTrace (line 353) | public function PrintTrace()
    method tokenName (line 359) | public function tokenName($tokenType)
    method yy_pop_parser_stack (line 371) | public function yy_pop_parser_stack()
    method __destruct (line 388) | public function __destruct()
    method yy_get_expected_tokens (line 398) | public function yy_get_expected_tokens($token)
    method yy_is_expected_token (line 482) | public function yy_is_expected_token($token)
    method yy_find_shift_action (line 571) | public function yy_find_shift_action($iLookAhead)
    method yy_find_reduce_action (line 605) | public function yy_find_reduce_action($stateno, $iLookAhead)
    method yy_shift (line 627) | public function yy_shift($yyNewState, $yyMajor, $yypMinor)
    method yy_r0 (line 663) | function yy_r0()
    method yy_r1 (line 668) | function yy_r1()
    method yy_r4 (line 674) | function yy_r4()
    method yy_r5 (line 681) | function yy_r5()
    method yy_r6 (line 691) | function yy_r6()
    method yy_r7 (line 697) | function yy_r7()
    method yy_r8 (line 704) | function yy_r8()
    method yy_r9 (line 710) | function yy_r9()
    method yy_r10 (line 717) | function yy_r10()
    method yy_r11 (line 723) | function yy_r11()
    method yy_r12 (line 729) | function yy_r12()
    method yy_r13 (line 735) | function yy_r13()
    method yy_r14 (line 741) | function yy_r14()
    method yy_r15 (line 747) | function yy_r15()
    method yy_r16 (line 753) | function yy_r16()
    method yy_r17 (line 759) | function yy_r17()
    method yy_reduce (line 765) | public function yy_reduce($yyruleno)
    method yy_parse_failed (line 807) | public function yy_parse_failed()
    method yy_syntax_error (line 818) | public function yy_syntax_error($yymajor, $TOKEN)
    method yy_accept (line 826) | public function yy_accept()
    method doParse (line 840) | public function doParse($yymajor, $yytokenvalue)
    method parse_bool (line 939) | private function parse_bool($str)
    method set_var (line 956) | private function set_var(array $var, array &$target_array)
    method add_global_vars (line 973) | private function add_global_vars(array $vars)
    method add_section_vars (line 989) | private function add_section_vars($section_name, array $vars)

FILE: Tool/smarty-3.1.32/libs/sysplugins/smarty_internal_data.php
  class Smarty_Internal_Data (line 32) | abstract class Smarty_Internal_Data
    method __construct (line 81) | public function __construct()
    method assign (line 97) | public function assign($tpl_var, $value = null, $nocache = false)
    method append (line 130) | public function append($tpl_var, $value = null, $merge = false, $nocac...
    method assignGlobal (line 144) | public function assignGlobal($varName, $value = null, $nocache = false)
    method appendByRef (line 158) | public function appendByRef($tpl_var, &$value, $merge = false)
    method assignByRef (line 172) | public function assignByRef($tpl_var, &$value, $nocache = false)
    method getTemplateVars (line 189) | public function getTemplateVars($varName = null, Smarty_Internal_Data ...
    method getVariable (line 205) | public function getVariable($variable = null, Smarty_Internal_Data $_p...
    method _mergeVars (line 216) | public function _mergeVars(Smarty_Internal_Data $data = null)
    method _isDataObj (line 238) | public function _isDataObj()
    method _isTplObj (line 248) | public function _isTplObj()
    method _isSmartyObj (line 258) | public function _isSmartyObj()
    method _getSmartyObj (line 268) | public function _getSmartyObj()
    method __call (line 282) | public function __call($name, $args)

FILE: Tool/smarty-3.1.32/libs/sysplugins/smarty_internal_debug.php
  class Smarty_Internal_Debug (line 17) | class Smarty_Internal_Debug extends Smarty_Internal_Data
    method start_template (line 53) | public function start_template(Smarty_Internal_Template $template, $mo...
    method end_template (line 69) | public function end_template(Smarty_Internal_Template $template)
    method start_compile (line 82) | public function start_compile(Smarty_Internal_Template $template)
    method end_compile (line 112) | public function end_compile(Smarty_Internal_Template $template)
    method start_render (line 132) | public function start_render(Smarty_Internal_Template $template)
    method end_render (line 143) | public function end_render(Smarty_Internal_Template $template)
    method start_cache (line 155) | public function start_cache(Smarty_Internal_Template $template)
    method end_cache (line 166) | public function end_cache(Smarty_Internal_Template $template)
    method register_template (line 178) | public function register_template(Smarty_Internal_Template $template)
    method register_data (line 187) | public static function register_data(Smarty_Data $data)
    method display_debug (line 200) | public function display_debug($obj, $full = false)
    method get_debug_vars (line 271) | public function get_debug_vars($obj)
    method get_key (line 358) | private function get_key(Smarty_Internal_Template $template)
    method ignore (line 389) | public function ignore(Smarty_Internal_Template $template)
    method debugUrl (line 403) | public function debugUrl(Smarty $smarty)

FILE: Tool/smarty-3.1.32/libs/sysplugins/smarty_internal_errorhandler.php
  class Smarty_Internal_ErrorHandler (line 14) | class Smarty_Internal_ErrorHandler
    method muteExpectedErrors (line 30) | public static function muteExpectedErrors()
    method mutingErrorHandler (line 69) | public static function mutingErrorHandler($errno, $errstr, $errfile, $...

FILE: Tool/smarty-3.1.32/libs/sysplugins/smarty_internal_extension_handler.php
  class Smarty_Internal_Extension_Handler (line 40) | class Smarty_Internal_Extension_Handler
    method _callExternalMethod (line 67) | public function _callExternalMethod(Smarty_Internal_Data $data, $name,...
    method upperCase (line 140) | public function upperCase($name)
    method __get (line 155) | public function __get($property_name)
    method __set (line 177) | public function __set($property_name, $value)
    method __call (line 191) | public function __call($name, $args)

FILE: Tool/smarty-3.1.32/libs/sysplugins/smarty_internal_method_addautoloadfilters.php
  class Smarty_Internal_Method_AddAutoloadFilters (line 12) | class Smarty_Internal_Method_AddAutoloadFilters extends Smarty_Internal_...
    method addAutoloadFilters (line 29) | public function addAutoloadFilters(Smarty_Internal_TemplateBase $obj, ...

FILE: Tool/smarty-3.1.32/libs/sysplugins/smarty_internal_method_adddefaultmodifiers.php
  class Smarty_Internal_Method_AddDefaultModifiers (line 12) | class Smarty_Internal_Method_AddDefaultModifiers
    method addDefaultModifiers (line 32) | public function addDefaultModifiers(Smarty_Internal_TemplateBase $obj,...

FILE: Tool/smarty-3.1.32/libs/sysplugins/smarty_internal_method_append.php
  class Smarty_Internal_Method_Append (line 12) | class Smarty_Internal_Method_Append
    method append (line 36) | public function append(Smarty_Internal_Data $data, $tpl_var, $value = ...

FILE: Tool/smarty-3.1.32/libs/sysplugins/smarty_internal_method_appendbyref.php
  class Smarty_Internal_Method_AppendByRef (line 12) | class Smarty_Internal_Method_AppendByRef
    method appendByRef (line 28) | public static function appendByRef(Smarty_Internal_Data $data, $tpl_va...

FILE: Tool/smarty-3.1.32/libs/sysplugins/smarty_internal_method_assignbyref.php
  class Smarty_Internal_Method_AssignByRef (line 12) | class Smarty_Internal_Method_AssignByRef
    method assignByRef (line 25) | public function assignByRef(Smarty_Internal_Data $data, $tpl_var, &$va...

FILE: Tool/smarty-3.1.32/libs/sysplugins/smarty_internal_method_assignglobal.php
  class Smarty_Internal_Method_AssignGlobal (line 12) | class Smarty_Internal_Method_AssignGlobal
    method assignGlobal (line 31) | public function assignGlobal(Smarty_Internal_Data $data, $varName, $va...

FILE: Tool/smarty-3.1.32/libs/sysplugins/smarty_internal_method_clearallassign.php
  class Smarty_Internal_Method_ClearAllAssign (line 12) | class Smarty_Internal_Method_ClearAllAssign
    method clearAllAssign (line 31) | public function clearAllAssign(Smarty_Internal_Data $data)

FILE: Tool/smarty-3.1.32/libs/sysplugins/smarty_internal_method_clearallcache.php
  class Smarty_Internal_Method_ClearAllCache (line 12) | class Smarty_Internal_Method_ClearAllCache
    method clearAllCache (line 34) | public function clearAllCache(Smarty $smarty, $exp_time = null, $type ...

FILE: Tool/smarty-3.1.32/libs/sysplugins/smarty_internal_method_clearassign.php
  class Smarty_Internal_Method_ClearAssign (line 12) | class Smarty_Internal_Method_ClearAssign
    method clearAssign (line 32) | public function clearAssign(Smarty_Internal_Data $data, $tpl_var)

FILE: Tool/smarty-3.1.32/libs/sysplugins/smarty_internal_method_clearcache.php
  class Smarty_Internal_Method_ClearCache (line 12) | class Smarty_Internal_Method_ClearCache
    method clearCache (line 37) | public function clearCache(Smarty $smarty, $template_name, $cache_id =...

FILE: Tool/smarty-3.1.32/libs/sysplugins/smarty_internal_method_clearcompiledtemplate.php
  class Smarty_Internal_Method_ClearCompiledTemplate (line 12) | class Smarty_Internal_Method_ClearCompiledTemplate
    method clearCompiledTemplate (line 35) | public function clearCompiledTemplate(Smarty $smarty, $resource_name =...

FILE: Tool/smarty-3.1.32/libs/sysplugins/smarty_internal_method_clearconfig.php
  class Smarty_Internal_Method_ClearConfig (line 12) | class Smarty_Internal_Method_ClearConfig
    method clearConfig (line 32) | public function clearConfig(Smarty_Internal_Data $data, $name = null)

FILE: Tool/smarty-3.1.32/libs/sysplugins/smarty_internal_method_compileallconfig.php
  class Smarty_Internal_Method_CompileAllConfig (line 12) | class Smarty_Internal_Method_CompileAllConfig extends Smarty_Internal_Me...
    method compileAllConfig (line 28) | public function compileAllConfig(Smarty $smarty, $extension = '.conf',...

FILE: Tool/smarty-3.1.32/libs/sysplugins/smarty_internal_method_compilealltemplates.php
  class Smarty_Internal_Method_CompileAllTemplates (line 11) | class Smarty_Internal_Method_CompileAllTemplates
    method compileAllTemplates (line 33) | public function compileAllTemplates(Smarty $smarty,
    method compileAll (line 54) | protected function compileAll(Smarty $smarty,

FILE: Tool/smarty-3.1.32/libs/sysplugins/smarty_internal_method_configload.php
  class Smarty_Internal_Method_ConfigLoad (line 12) | class Smarty_Internal_Method_ConfigLoad
    method configLoad (line 35) | public function configLoad(Smarty_Internal_Data $data, $config_file, $...
    method _loadConfigFile (line 57) | public function _loadConfigFile(Smarty_Internal_Data $data, $config_fi...
    method _loadConfigVars (line 81) | public function _loadConfigVars(Smarty_Internal_Template $tpl, $new_co...
    method _assignConfigVars (line 116) | public function _assignConfigVars(&$config_vars, Smarty_Internal_Templ...
    method _updateVarStack (line 149) | public function _updateVarStack(Smarty_Internal_Template $tpl, $config...
    method _getConfigVariable (line 167) | public function _getConfigVariable(Smarty_Internal_Data $data, $varNam...

FILE: Tool/smarty-3.1.32/libs/sysplugins/smarty_internal_method_createdata.php
  class Smarty_Internal_Method_CreateData (line 12) | class Smarty_Internal_Method_CreateData
    method createData (line 34) | public function createData(Smarty_Internal_TemplateBase $obj, Smarty_I...

FILE: Tool/smarty-3.1.32/libs/sysplugins/smarty_internal_method_getautoloadfilters.php
  class Smarty_Internal_Method_GetAutoloadFilters (line 12) | class Smarty_Internal_Method_GetAutoloadFilters extends Smarty_Internal_...
    method getAutoloadFilters (line 28) | public function getAutoloadFilters(Smarty_Internal_TemplateBase $obj, ...

FILE: Tool/smarty-3.1.32/libs/sysplugins/smarty_internal_method_getconfigvariable.php
  class Smarty_Internal_Method_GetConfigVariable (line 12) | class Smarty_Internal_Method_GetConfigVariable
    method getConfigVariable (line 30) | public function getConfigVariable(Smarty_Internal_Data $data, $varName...

FILE: Tool/smarty-3.1.32/libs/sysplugins/smarty_internal_method_getconfigvars.php
  class Smarty_Internal_Method_GetConfigVars (line 12) | class Smarty_Internal_Method_GetConfigVars
    method getConfigVars (line 33) | public function getConfigVars(Smarty_Internal_Data $data, $varname = n...

FILE: Tool/smarty-3.1.32/libs/sysplugins/smarty_internal_method_getdebugtemplate.php
  class Smarty_Internal_Method_GetDebugTemplate (line 12) | class Smarty_Internal_Method_GetDebugTemplate
    method getDebugTemplate (line 30) | public function getDebugTemplate(Smarty_Internal_TemplateBase $obj)

FILE: Tool/smarty-3.1.32/libs/sysplugins/smarty_internal_method_getdefaultmodifiers.php
  class Smarty_Internal_Method_GetDefaultModifiers (line 12) | class Smarty_Internal_Method_GetDefaultModifiers
    method getDefaultModifiers (line 30) | public function getDefaultModifiers(Smarty_Internal_TemplateBase $obj)

FILE: Tool/smarty-3.1.32/libs/sysplugins/smarty_internal_method_getglobal.php
  class Smarty_Internal_Method_GetGlobal (line 12) | class Smarty_Internal_Method_GetGlobal
    method getGlobal (line 31) | public function getGlobal(Smarty_Internal_Data $data, $varName = null)

FILE: Tool/smarty-3.1.32/libs/sysplugins/smarty_internal_method_getregisteredobject.php
  class Smarty_Internal_Method_GetRegisteredObject (line 12) | class Smarty_Internal_Method_GetRegisteredObject
    method getRegisteredObject (line 33) | public function getRegisteredObject(Smarty_Internal_TemplateBase $obj,...

FILE: Tool/smarty-3.1.32/libs/sysplugins/smarty_internal_method_getstreamvariable.php
  class Smarty_Internal_Method_GetStreamVariable (line 12) | class Smarty_Internal_Method_GetStreamVariable
    method getStreamVariable (line 32) | public function getStreamVariable(Smarty_Internal_Data $data, $variable)

FILE: Tool/smarty-3.1.32/libs/sysplugins/smarty_internal_method_gettags.php
  class Smarty_Internal_Method_GetTags (line 12) | class Smarty_Internal_Method_GetTags
    method getTags (line 34) | public function getTags(Smarty_Internal_TemplateBase $obj, $template =...

FILE: Tool/smarty-3.1.32/libs/sysplugins/smarty_internal_method_gettemplatevars.php
  class Smarty_Internal_Method_GetTemplateVars (line 12) | class Smarty_Internal_Method_GetTemplateVars
    method getTemplateVars (line 34) | public function getTemplateVars(Smarty_Internal_Data $data, $varName =...
    method _getVariable (line 84) | public function _getVariable(Smarty_Internal_Data $data, $varName, Sma...

FILE: Tool/smarty-3.1.32/libs/sysplugins/smarty_internal_method_literals.php
  class Smarty_Internal_Method_Literals (line 12) | class Smarty_Internal_Method_Literals
    method getLiterals (line 30) | public function getLiterals(Smarty_Internal_TemplateBase $obj)
    method addLiterals (line 48) | public function addLiterals(Smarty_Internal_TemplateBase $obj, $litera...
    method setLiterals (line 68) | public function setLiterals(Smarty_Internal_TemplateBase $obj, $litera...
    method set (line 87) | private function set(Smarty $smarty, $literals)

FILE: Tool/smarty-3.1.32/libs/sysplugins/smarty_internal_method_loadfilter.php
  class Smarty_Internal_Method_LoadFilter (line 12) | class Smarty_Internal_Method_LoadFilter
    method loadFilter (line 42) | public function loadFilter(Smarty_Internal_TemplateBase $obj, $type, $...
    method _checkFilterType (line 71) | public function _checkFilterType($type)

FILE: Tool/smarty-3.1.32/libs/sysplugins/smarty_internal_method_loadplugin.php
  class Smarty_Internal_Method_LoadPlugin (line 12) | class Smarty_Internal_Method_LoadPlugin
    method loadPlugin (line 33) | public function loadPlugin(Smarty $smarty, $plugin_name, $check)

FILE: Tool/smarty-3.1.32/libs/sysplugins/smarty_internal_method_mustcompile.php
  class Smarty_Internal_Method_MustCompile (line 12) | class Smarty_Internal_Method_MustCompile
    method mustCompile (line 31) | public function mustCompile(Smarty_Internal_Template $_template)

FILE: Tool/smarty-3.1.32/libs/sysplugins/smarty_internal_method_registercacheresource.php
  class Smarty_Internal_Method_RegisterCacheResource (line 12) | class Smarty_Internal_Method_RegisterCacheResource
    method registerCacheResource (line 33) | public function registerCacheResource(Smarty_Internal_TemplateBase $ob...

FILE: Tool/smarty-3.1.32/libs/sysplugins/smarty_internal_method_registerclass.php
  class Smarty_Internal_Method_RegisterClass (line 12) | class Smarty_Internal_Method_RegisterClass
    method registerClass (line 35) | public function registerClass(Smarty_Internal_TemplateBase $obj, $clas...

FILE: Tool/smarty-3.1.32/libs/sysplugins/smarty_internal_method_registerdefaultconfighandler.php
  class Smarty_Internal_Method_RegisterDefaultConfigHandler (line 12) | class Smarty_Internal_Method_RegisterDefaultConfigHandler
    method registerDefaultConfigHandler (line 32) | public function registerDefaultConfigHandler(Smarty_Internal_TemplateB...

FILE: Tool/smarty-3.1.32/libs/sysplugins/smarty_internal_method_registerdefaultpluginhandler.php
  class Smarty_Internal_Method_RegisterDefaultPluginHandler (line 12) | class Smarty_Internal_Method_RegisterDefaultPluginHandler
    method registerDefaultPluginHandler (line 33) | public function registerDefaultPluginHandler(Smarty_Internal_TemplateB...

FILE: Tool/smarty-3.1.32/libs/sysplugins/smarty_internal_method_registerdefaulttemplatehandler.php
  class Smarty_Internal_Method_RegisterDefaultTemplateHandler (line 12) | class Smarty_Internal_Method_RegisterDefaultTemplateHandler
    method registerDefaultTemplateHandler (line 32) | public function registerDefaultTemplateHandler(Smarty_Internal_Templat...
    method _getDefaultTemplate (line 50) | public static function _getDefaultTemplate(Smarty_Template_Source $sou...

FILE: Tool/smarty-3.1.32/libs/sysplugins/smarty_internal_method_registerfilter.php
  class Smarty_Internal_Method_RegisterFilter (line 12) | class Smarty_Internal_Method_RegisterFilter
    method registerFilter (line 43) | public function registerFilter(Smarty_Internal_TemplateBase $obj, $typ...
    method _getFilterName (line 62) | public function _getFilterName($function_name)
    method _checkFilterType (line 82) | public function _checkFilterType($type)

FILE: Tool/smarty-3.1.32/libs/sysplugins/smarty_internal_method_registerobject.php
  class Smarty_Internal_Method_RegisterObject (line 12) | class Smarty_Internal_Method_RegisterObject
    method registerObject (line 47) | public function registerObject(Smarty_Internal_TemplateBase $obj, $obj...

FILE: Tool/smarty-3.1.32/libs/sysplugins/smarty_internal_method_registerplugin.php
  class Smarty_Internal_Method_RegisterPlugin (line 12) | class Smarty_Internal_Method_RegisterPlugin
    method registerPlugin (line 38) | public function registerPlugin(Smarty_Internal_TemplateBase $obj, $typ...

FILE: Tool/smarty-3.1.32/libs/sysplugins/smarty_internal_method_registerresource.php
  class Smarty_Internal_Method_RegisterResource (line 12) | class Smarty_Internal_Method_RegisterResource
    method registerResource (line 37) | public function registerResource(Smarty_Internal_TemplateBase $obj, $n...

FILE: Tool/smarty-3.1.32/libs/sysplugins/smarty_internal_method_setautoloadfilters.php
  class Smarty_Internal_Method_SetAutoloadFilters (line 12) | class Smarty_Internal_Method_SetAutoloadFilters
    method setAutoloadFilters (line 43) | public function setAutoloadFilters(Smarty_Internal_TemplateBase $obj, ...
    method _checkFilterType (line 65) | public function _checkFilterType($type)

FILE: Tool/smarty-3.1.32/libs/sysplugins/smarty_internal_method_setdebugtemplate.php
  class Smarty_Internal_Method_SetDebugTemplate (line 12) | class Smarty_Internal_Method_SetDebugTemplate
    method setDebugTemplate (line 32) | public function setDebugTemplate(Smarty_Internal_TemplateBase $obj, $t...

FILE: Tool/smarty-3.1.32/libs/sysplugins/smarty_internal_method_setdefaultmodifiers.php
  class Smarty_Internal_Method_SetDefaultModifiers (line 12) | class Smarty_Internal_Method_SetDefaultModifiers
    method setDefaultModifiers (line 32) | public function setDefaultModifiers(Smarty_Internal_TemplateBase $obj,...

FILE: Tool/smarty-3.1.32/libs/sysplugins/smarty_internal_method_unloadfilter.php
  class Smarty_Internal_Method_UnloadFilter (line 12) | class Smarty_Internal_Method_UnloadFilter extends Smarty_Internal_Method...
    method unloadFilter (line 28) | public function unloadFilter(Smarty_Internal_TemplateBase $obj, $type,...

FILE: Tool/smarty-3.1.32/libs/sysplugins/smarty_internal_method_unregistercacheresource.php
  class Smarty_Internal_Method_UnregisterCacheResource (line 12) | class Smarty_Internal_Method_UnregisterCacheResource
    method unregisterCacheResource (line 32) | public function unregisterCacheResource(Smarty_Internal_TemplateBase $...

FILE: Tool/smarty-3.1.32/libs/sysplugins/smarty_internal_method_unregisterfilter.php
  class Smarty_Internal_Method_UnregisterFilter (line 12) | class Smarty_Internal_Method_UnregisterFilter extends Smarty_Internal_Me...
    method unregisterFilter (line 28) | public function unregisterFilter(Smarty_Internal_TemplateBase $obj, $t...

FILE: Tool/smarty-3.1.32/libs/sysplugins/smarty_internal_method_unregisterobject.php
  class Smarty_Internal_Method_UnregisterObject (line 12) | class Smarty_Internal_Method_UnregisterObject
    method unregisterObject (line 32) | public function unregisterObject(Smarty_Internal_TemplateBase $obj, $o...

FILE: Tool/smarty-3.1.32/libs/sysplugins/smarty_internal_method_unregisterplugin.php
  class Smarty_Internal_Method_UnregisterPlugin (line 12) | class Smarty_Internal_Method_UnregisterPlugin
    method unregisterPlugin (line 33) | public function unregisterPlugin(Smarty_Internal_TemplateBase $obj, $t...

FILE: Tool/smarty-3.1.32/libs/sysplugins/smarty_internal_method_unregisterresource.php
  class Smarty_Internal_Method_UnregisterResource (line 12) | class Smarty_Internal_Method_UnregisterResource
    method unregisterResource (line 32) | public function unregisterResource(Smarty_Internal_TemplateBase $obj, ...

FILE: Tool/smarty-3.1.32/libs/sysplugins/smarty_internal_nocache_insert.php
  class Smarty_Internal_Nocache_Insert (line 17) | class Smarty_Internal_Nocache_Insert
    method compile (line 30) | public static function compile($_function, $_attr, $_template, $_scrip...

FILE: Tool/smarty-3.1.32/libs/sysplugins/smarty_internal_parsetree.php
  class Smarty_Internal_ParseTree (line 17) | abstract class Smarty_Internal_ParseTree
    method to_smarty_php (line 41) | abstract public function to_smarty_php(Smarty_Internal_Templateparser ...
    method __destruct (line 46) | public function __destruct()

FILE: Tool/smarty-3.1.32/libs/sysplugins/smarty_internal_parsetree_code.php
  class Smarty_Internal_ParseTree_Code (line 19) | class Smarty_Internal_ParseTree_Code extends Smarty_Internal_ParseTree
    method __construct (line 26) | public function __construct($data)
    method to_smarty_php (line 38) | public function to_smarty_php(Smarty_Internal_Templateparser $parser)

FILE: Tool/smarty-3.1.32/libs/sysplugins/smarty_internal_parsetree_dq.php
  class Smarty_Internal_ParseTree_Dq (line 18) | class Smarty_Internal_ParseTree_Dq extends Smarty_Internal_ParseTree
    method __construct (line 26) | public function __construct($parser, Smarty_Internal_ParseTree $subtree)
    method append_subtree (line 40) | public function append_subtree(Smarty_Internal_Templateparser $parser,...
    method to_smarty_php (line 73) | public function to_smarty_php(Smarty_Internal_Templateparser $parser)

FILE: Tool/smarty-3.1.32/libs/sysplugins/smarty_internal_parsetree_dqcontent.php
  class Smarty_Internal_ParseTree_DqContent (line 19) | class Smarty_Internal_ParseTree_DqContent extends Smarty_Internal_ParseTree
    method __construct (line 26) | public function __construct($data)
    method to_smarty_php (line 38) | public function to_smarty_php(Smarty_Internal_Templateparser $parser)

FILE: Tool/smarty-3.1.32/libs/sysplugins/smarty_internal_parsetree_tag.php
  class Smarty_Internal_ParseTree_Tag (line 19) | class Smarty_Internal_ParseTree_Tag extends Smarty_Internal_ParseTree
    method __construct (line 35) | public function __construct(Smarty_Internal_Templateparser $parser, $d...
    method to_smarty_php (line 48) | public function to_smarty_php(Smarty_Internal_Templateparser $parser)
    method assign_to_var (line 60) | public function assign_to_var(Smarty_Internal_Templateparser $parser)

FILE: Tool/smarty-3.1.32/libs/sysplugins/smarty_internal_parsetree_template.php
  class Smarty_Internal_ParseTree_Template (line 19) | class Smarty_Internal_ParseTree_Template extends Smarty_Internal_ParseTree
    method __construct (line 33) | public function __construct()
    method append_subtree (line 43) | public function append_subtree(Smarty_Internal_Templateparser $parser,...
    method append_array (line 60) | public function append_array(Smarty_Internal_Templateparser $parser, $...
    method prepend_array (line 73) | public function prepend_array(Smarty_Internal_Templateparser $parser, ...
    method to_smarty_php (line 87) | public function to_smarty_php(Smarty_Internal_Templateparser $parser)

FILE: Tool/smarty-3.1.32/libs/sysplugins/smarty_internal_parsetree_text.php
  class Smarty_Internal_ParseTree_Text (line 17) | class Smarty_Internal_ParseTree_Text extends Smarty_Internal_ParseTree
    method __construct (line 24) | public function __construct($data)
    method to_smarty_php (line 36) | public function to_smarty_php(Smarty_Internal_Templateparser $parser)

FILE: Tool/smarty-3.1.32/libs/sysplugins/smarty_internal_resource_eval.php
  class Smarty_Internal_Resource_Eval (line 19) | class Smarty_Internal_Resource_Eval extends Smarty_Resource_Recompiled
    method populate (line 29) | public function populate(Smarty_Template_Source $source, Smarty_Intern...
    method getContent (line 44) | public function getContent(Smarty_Template_Source $source)
    method decode (line 56) | protected function decode($string)
    method buildUniqueResourceName (line 79) | public function buildUniqueResourceName(Smarty $smarty, $resource_name...
    method getBasename (line 91) | public function getBasename(Smarty_Template_Source $source)

FILE: Tool/smarty-3.1.32/libs/sysplugins/smarty_internal_resource_extends.php
  class Smarty_Internal_Resource_Extends (line 18) | class Smarty_Internal_Resource_Extends extends Smarty_Resource
    method populate (line 35) | public function populate(Smarty_Template_Source $source, Smarty_Intern...
    method populateTimestamp (line 68) | public function populateTimestamp(Smarty_Template_Source $source)
    method getContent (line 86) | public function getContent(Smarty_Template_Source $source)
    method getBasename (line 110) | public function getBasename(Smarty_Template_Source $source)
    method checkTimestamps (line 124) | public function checkTimestamps()

FILE: Tool/smarty-3.1.32/libs/sysplugins/smarty_internal_resource_file.php
  class Smarty_Internal_Resource_File (line 18) | class Smarty_Internal_Resource_File extends Smarty_Resource
    method buildFilepath (line 29) | protected function buildFilepath(Smarty_Template_Source $source, Smart...
    method populate (line 118) | public function populate(Smarty_Template_Source $source, Smarty_Intern...
    method populateTimestamp (line 140) | public function populateTimestamp(Smarty_Template_Source $source)
    method getContent (line 158) | public function getContent(Smarty_Template_Source $source)
    method getBasename (line 174) | public function getBasename(Smarty_Template_Source $source)

FILE: Tool/smarty-3.1.32/libs/sysplugins/smarty_internal_resource_php.php
  class Smarty_Internal_Resource_Php (line 12) | class Smarty_Internal_Resource_Php extends Smarty_Internal_Resource_File
    method __construct (line 38) | public function __construct()
    method getContent (line 51) | public function getContent(Smarty_Template_Source $source)
    method populateCompiledFilepath (line 65) | public function populateCompiledFilepath(Smarty_Template_Compiled $com...
    method renderUncompiled (line 85) | public function renderUncompiled(Smarty_Template_Source $source, Smart...

FILE: Tool/smarty-3.1.32/libs/sysplugins/smarty_internal_resource_registered.php
  class Smarty_Internal_Resource_Registered (line 19) | class Smarty_Internal_Resource_Registered extends Smarty_Resource
    method populate (line 29) | public function populate(Smarty_Template_Source $source, Smarty_Intern...
    method populateTimestamp (line 44) | public function populateTimestamp(Smarty_Template_Source $source)
    method getTemplateTimestamp (line 57) | public function getTemplateTimestamp(Smarty_Template_Source $source)
    method getContent (line 75) | public function getContent(Smarty_Template_Source $source)
    method getBasename (line 95) | public function getBasename(Smarty_Template_Source $source)

FILE: Tool/smarty-3.1.32/libs/sysplugins/smarty_internal_resource_stream.php
  class Smarty_Internal_Resource_Stream (line 20) | class Smarty_Internal_Resource_Stream extends Smarty_Resource_Recompiled
    method populate (line 31) | public function populate(Smarty_Template_Source $source, Smarty_Intern...
    method getContent (line 51) | public function getContent(Smarty_Template_Source $source)
    method buildUniqueResourceName (line 77) | public function buildUniqueResourceName(Smarty $smarty, $resource_name...

FILE: Tool/smarty-3.1.32/libs/sysplugins/smarty_internal_resource_string.php
  class Smarty_Internal_Resource_String (line 19) | class Smarty_Internal_Resource_String extends Smarty_Resource
    method populate (line 29) | public function populate(Smarty_Template_Source $source, Smarty_Intern...
    method getContent (line 44) | public function getContent(Smarty_Template_Source $source)
    method decode (line 56) | protected function decode($string)
    method buildUniqueResourceName (line 79) | public function buildUniqueResourceName(Smarty $smarty, $resource_name...
    method getBasename (line 92) | public function getBasename(Smarty_Template_Source $source)
    method checkTimestamps (line 105) | public function checkTimestamps()

FILE: Tool/smarty-3.1.32/libs/sysplugins/smarty_internal_runtime_cachemodify.php
  class Smarty_Internal_Runtime_CacheModify (line 11) | class Smarty_Internal_Runtime_CacheModify
    method cacheModifiedCheck (line 23) | public function cacheModifiedCheck(Smarty_Template_Cached $cached, Sma...

FILE: Tool/smarty-3.1.32/libs/sysplugins/smarty_internal_runtime_cacheresourcefile.php
  class Smarty_Internal_Runtime_CacheResourceFile (line 15) | class Smarty_Internal_Runtime_CacheResourceFile
    method clear (line 28) | public function clear(Smarty $smarty, $resource_name, $cache_id, $comp...

FILE: Tool/smarty-3.1.32/libs/sysplugins/smarty_internal_runtime_capture.php
  class Smarty_Internal_Runtime_Capture (line 10) | class Smarty_Internal_Runtime_Capture
    method open (line 62) | public function open(Smarty_Internal_Template $_template, $buffer, $as...
    method register (line 79) | private function register(Smarty_Internal_Template $_template)
    method startRender (line 94) | public function startRender(Smarty_Internal_Template $_template)
    method close (line 107) | public function close(Smarty_Internal_Template $_template)
    method error (line 131) | public function error(Smarty_Internal_Template $_template)
    method getBuffer (line 144) | public function getBuffer(Smarty_Internal_Template $_template, $name =...
    method endRender (line 160) | public function endRender(Smarty_Internal_Template $_template)

FILE: Tool/smarty-3.1.32/libs/sysplugins/smarty_internal_runtime_codeframe.php
  class Smarty_Internal_Runtime_CodeFrame (line 15) | class Smarty_Internal_Runtime_CodeFrame
    method create (line 28) | public function create(Smarty_Internal_Template $_template, $content =...

FILE: Tool/smarty-3.1.32/libs/sysplugins/smarty_internal_runtime_filterhandler.php
  class Smarty_Internal_Runtime_FilterHandler (line 17) | class Smarty_Internal_Runtime_FilterHandler
    method runFilter (line 33) | public function runFilter($type, $content, Smarty_Internal_Template $t...

FILE: Tool/smarty-3.1.32/libs/sysplugins/smarty_internal_runtime_foreach.php
  class Smarty_Internal_Runtime_Foreach (line 11) | class Smarty_Internal_Runtime_Foreach
    method init (line 37) | public function init(Smarty_Internal_Template $tpl, $from, $item, $nee...
    method count (line 105) | public function count($value)
    method restore (line 131) | public function restore(Smarty_Internal_Template $tpl, $levels = 1)

FILE: Tool/smarty-3.1.32/libs/sysplugins/smarty_internal_runtime_getincludepath.php
  class Smarty_Internal_Runtime_GetIncludePath (line 16) | class Smarty_Internal_Runtime_GetIncludePath
    method isNewIncludePath (line 74) | public function isNewIncludePath(Smarty $smarty)
    method getIncludePathDirs (line 98) | public function getIncludePathDirs(Smarty $smarty)
    method getIncludePath (line 114) | public function getIncludePath($dirs, $file, Smarty $smarty)

FILE: Tool/smarty-3.1.32/libs/sysplugins/smarty_internal_runtime_inheritance.php
  class Smarty_Internal_Runtime_Inheritance (line 11) | class Smarty_Internal_Runtime_Inheritance
    method init (line 69) | public function init(Smarty_Internal_Template $tpl, $initChild, $block...
    method endChild (line 109) | public function endChild(Smarty_Internal_Template $tpl, $template = nu...
    method instanceBlock (line 143) | public function instanceBlock(Smarty_Internal_Template $tpl, $classNam...
    method process (line 169) | public function process(Smarty_Internal_Template $tpl, Smarty_Internal...
    method callChild (line 211) | public function callChild(Smarty_Internal_Template $tpl, Smarty_Intern...
    method callParent (line 228) | public function callParent(Smarty_Internal_Template $tpl, Smarty_Inter...
    method callBlock (line 243) | public function callBlock(Smarty_Internal_Block $block, Smarty_Interna...

FILE: Tool/smarty-3.1.32/libs/sysplugins/smarty_internal_runtime_make_nocache.php
  class Smarty_Internal_Runtime_Make_Nocache (line 11) | class Smarty_Internal_Runtime_Make_Nocache
    method save (line 23) | public function save(Smarty_Internal_Template $tpl, $var)
    method store (line 44) | public function store(Smarty_Internal_Template $tpl, $var, $properties)

FILE: Tool/smarty-3.1.32/libs/sysplugins/smarty_internal_runtime_tplfunction.php
  class Smarty_Internal_Runtime_TplFunction (line 11) | class Smarty_Internal_Runtime_TplFunction
    method callTemplateFunction (line 23) | public function callTemplateFunction(Smarty_Internal_Template $tpl, $n...
    method registerTplFunctions (line 61) | public function registerTplFunctions(Smarty_Internal_TemplateBase $obj...
    method getTplFunction (line 82) | public function getTplFunction(Smarty_Internal_Template $tpl, $name = ...
    method addTplFuncToCache (line 102) | public function addTplFuncToCache(Smarty_Internal_Template $tpl, $_nam...
    method saveTemplateVariables (line 149) | public function saveTemplateVariables(Smarty_Internal_Template $tpl, $...
    method restoreTemplateVariables (line 161) | public function restoreTemplateVariables(Smarty_Internal_Template $tpl...

FILE: Tool/smarty-3.1.32/libs/sysplugins/smarty_internal_runtime_updatecache.php
  class Smarty_Internal_Runtime_UpdateCache (line 11) | class Smarty_Internal_Runtime_UpdateCache
    method cacheModifiedCheck (line 20) | public function cacheModifiedCheck(Smarty_Template_Cached $cached, Sma...
    method updateCache (line 33) | public function updateCache(Smarty_Template_Cached $cached, Smarty_Int...
    method removeNoCacheHash (line 68) | public function removeNoCacheHash(Smarty_Template_Cached $cached,
    method writeCachedContent (line 129) | public function writeCachedContent(Smarty_Internal_Template $_template...
    method write (line 151) | public function write(Smarty_Internal_Template $_template, $content)

FILE: Tool/smarty-3.1.32/libs/sysplugins/smarty_internal_runtime_updatescope.php
  class Smarty_Internal_Runtime_UpdateScope (line 11) | class Smarty_Internal_Runtime_UpdateScope
    method _updateScope (line 22) | public function _updateScope(Smarty_Internal_Template $tpl, $varName, ...
    method _getAffectedScopes (line 51) | public function _getAffectedScopes(Smarty_Internal_Template $tpl, $mer...
    method _updateVariableInOtherScope (line 91) | public function _updateVariableInOtherScope(&$tpl_vars, Smarty_Interna...
    method _updateVarStack (line 107) | public function _updateVarStack(Smarty_Internal_Template $tpl, $varName)

FILE: Tool/smarty-3.1.32/libs/sysplugins/smarty_internal_runtime_writefile.php
  class Smarty_Internal_Runtime_WriteFile (line 15) | class Smarty_Internal_Runtime_WriteFile
    method writeFile (line 27) | public function writeFile($_filepath, $_contents, Smarty $smarty)

FILE: Tool/smarty-3.1.32/libs/sysplugins/smarty_internal_smartytemplatecompiler.php
  class Smarty_Internal_SmartyTemplateCompiler (line 17) | class Smarty_Internal_SmartyTemplateCompiler extends Smarty_Internal_Tem...
    method __construct (line 68) | public function __construct($lexer_class, $parser_class, Smarty $smarty)
    method doCompile (line 85) | protected function doCompile($_content, $isTemplateSource = false)
    method registerPostCompileCallback (line 153) | public function registerPostCompileCallback($callback, $parameter = ar...
    method unregisterPostCompileCallback (line 170) | public function unregisterPostCompileCallback($key)

FILE: Tool/smarty-3.1.32/libs/sysplugins/smarty_internal_template.php
  class Smarty_Internal_Template (line 27) | class Smarty_Internal_Template extends Smarty_Internal_TemplateBase
    method __construct (line 146) | public function __construct($template_resource, Smarty $smarty, Smarty...
    method render (line 177) | public function render($no_output_filter = true, $display = null)
    method _subTemplateRender (line 266) | public function _subTemplateRender($template, $cache_id, $compile_id, ...
    method _subTemplateRegister (line 374) | public function _subTemplateRegister()
    method _isSubTpl (line 390) | public function _isSubTpl()
    method _assignInScope (line 404) | public function _assignInScope($varName, $value, $nocache = false, $sc...
    method _checkPlugins (line 429) | public function _checkPlugins($plugins) {
    method _decodeProperties (line 467) | public function _decodeProperties(Smarty_Internal_Template $tpl, $prop...
    method compileTemplateSource (line 536) | public function compileTemplateSource()
    method writeCachedContent (line 548) | public function writeCachedContent($content)
    method _getTemplateId (line 559) | public function _getTemplateId()
    method capture_error (line 568) | public function capture_error()
    method loadCompiled (line 578) | public function loadCompiled($force = false)
    method loadCached (line 590) | public function loadCached($force = false)
    method _loadInheritance (line 601) | public function _loadInheritance()
    method _cleanUp (line 612) | public function _cleanUp()
    method loadCompiler (line 624) | public function loadCompiler()
    method __call (line 643) | public function __call($name, $args)
    method __set (line 661) | public function __set($property_name, $value)
    method __get (line 687) | public function __get($property_name)
    method __destruct (line 713) | public function __destruct()

FILE: Tool/smarty-3.1.32/libs/sysplugins/smarty_internal_templatebase.php
  class Smarty_Internal_TemplateBase (line 49) | abstract class Smarty_Internal_TemplateBase extends Smarty_Internal_Data
    method fetch (line 114) | public function fetch($template = null, $cache_id = null, $compile_id ...
    method display (line 131) | public function display($template = null, $cache_id = null, $compile_i...
    method isCached (line 152) | public function isCached($template = null, $cache_id = null, $compile_...
    method _execute (line 170) | private function _execute($template, $cache_id, $compile_id, $parent, ...
    method registerPlugin (line 276) | public function registerPlugin($type, $name, $callback, $cacheable = t...
    method loadFilter (line 293) | public function loadFilter($type, $name)
    method registerFilter (line 311) | public function registerFilter($type, $callback, $name = null)
    method registerObject (line 331) | public function registerObject($object_name, $object, $allowed_methods...
    method setCompileCheck (line 341) | public function setCompileCheck($compile_check)
    method setCaching (line 349) | public function setCaching($caching)
    method setCacheLifetime (line 357) | public function setCacheLifetime($cache_lifetime)
    method setCompileId (line 365) | public function setCompileId($compile_id)
    method setCacheId (line 373) | public function setCacheId($cache_id)

FILE: Tool/smarty-3.1.32/libs/sysplugins/smarty_internal_templatecompilerbase.php
  class Smarty_Internal_TemplateCompilerBase (line 22) | abstract class Smarty_Internal_TemplateCompilerBase
    method __construct (line 324) | public function __construct(Smarty $smarty)
    method compileTemplate (line 343) | public function compileTemplate(Smarty_Internal_Template $template,
    method compileTemplateSource (line 369) | public function compileTemplateSource(Smarty_Internal_Template $template,
    method postFilter (line 452) | public function postFilter($code)
    method preFilter (line 472) | public function preFilter($_content)
    method compileTag (line 501) | public function compileTag($tag, $args, $parameter = array())
    method compileVariable (line 517) | public function compileVariable($variable)
    method compileConfigVariable (line 540) | public function compileConfigVariable($variable)
    method compilePHPFunctionCall (line 555) | public function compilePHPFunctionCall($name, $parameter)
    method processText (line 616) | public function processText($text)
    method callTagCompiler (line 685) | public function callTagCompiler($tag, $args, $param1 = null, $param2 =...
    method getTagCompiler (line 704) | public function getTagCompiler($tag)
    method getPlugin (line 732) | public function getPlugin($plugin_name, $plugin_type)
    method getPluginFromDefaultHandler (line 798) | public function getPluginFromDefaultHandler($tag, $plugin_type)
    method appendCode (line 850) | public function appendCode($left, $right)
    method processNocacheCode (line 872) | public function processNocacheCode($content, $is_code)
    method getId (line 910) | public function getId($input)
    method getVariableName (line 925) | public function getVariableName($input)
    method setNocacheInVariable (line 938) | public function setNocacheInVariable($varName)
    method convertScope (line 958) | public function convertScope($_attr, $validScopes)
    method makeNocacheCode (line 986) | public function makeNocacheCode($code)
    method trigger_template_error (line 1005) | public function trigger_template_error($args = null, $line = null, $ta...
    method getVarExport (line 1075) | public function getVarExport($value)
    method enterDoubleQuote (line 1084) | public function enterDoubleQuote()
    method getTagStackCount (line 1094) | public function getTagStackCount()
    method replaceDelimiter (line 1104) | public function replaceDelimiter($lexerPreg)
    method initDelimiterPreg (line 1116) | public function initDelimiterPreg()
    method leaveDoubleQuote (line 1151) | public function leaveDoubleQuote()
    method getLdelPreg (line 1166) | public function getLdelPreg()
    method getRdelPreg (line 1176) | public function getRdelPreg()
    method getLdelLength (line 1186) | public function getLdelLength()
    method getRdelLength (line 1196) | public function getRdelLength()
    method getOpenBlockTag (line 1206) | public function getOpenBlockTag()
    method isVariable (line 1223) | public function isVariable($value)
    method getNewPrefixVariable (line 1247) | public function getNewPrefixVariable()
    method getPrefixVariable (line 1258) | public function getPrefixVariable()
    method appendPrefixCode (line 1268) | public function appendPrefixCode($code)
    method getPrefixCode (line 1278) | public function getPrefixCode()
    method saveRequiredPlugins (line 1295) | public function saveRequiredPlugins($init=false)
    method restoreRequiredPlugins (line 1306) | public function restoreRequiredPlugins()
    method compileRequiredPlugins (line 1317) | public function compileRequiredPlugins()
    method compileCheckPlugins (line 1334) | public function compileCheckPlugins($requiredPlugins)
    method doCompile (line 1357) | abstract protected function doCompile($_content, $isTemplateSource = f...
    method compileTag2 (line 1370) | private function compileTag2($tag, $args, $parameter)

FILE: Tool/smarty-3.1.32/libs/sysplugins/smarty_internal_templatelexer.php
  class Smarty_Internal_Templatelexer (line 19) | class Smarty_Internal_Templatelexer
    method __construct (line 204) | function __construct($source, Smarty_Internal_TemplateCompilerBase $co...
    method PrintTrace (line 224) | public function PrintTrace()
    method replace (line 237) | public function replace($preg)
    method isAutoLiteral (line 247) | public function isAutoLiteral()
    method yylex (line 253) | public function yylex()
    method yypushstate (line 258) | public function yypushstate($state)
    method yypopstate (line 278) | public function yypopstate()
    method yybegin (line 297) | public function yybegin($state)
    method yylex1 (line 309) | public function yylex1()
    method yy_r1_1 (line 364) | function yy_r1_1()
    method yy_r1_2 (line 369) | function yy_r1_2()
    method yy_r1_4 (line 385) | function yy_r1_4()
    method yy_r1_8 (line 390) | function yy_r1_8()
    method yy_r1_10 (line 395) | function yy_r1_10()
    method yy_r1_12 (line 401) | function yy_r1_12()
    method yy_r1_14 (line 407) | function yy_r1_14()
    method yy_r1_16 (line 413) | function yy_r1_16()
    method yy_r1_19 (line 418) | function yy_r1_19()
    method yylex2 (line 423) | public function yylex2()
    method yy_r2_1 (line 478) | function yy_r2_1()
    method yy_r2_4 (line 485) | function yy_r2_4()
    method yy_r2_6 (line 492) | function yy_r2_6()
    method yy_r2_8 (line 499) | function yy_r2_8()
    method yy_r2_10 (line 506) | function yy_r2_10()
    method yy_r2_12 (line 513) | function yy_r2_12()
    method yy_r2_15 (line 520) | function yy_r2_15()
    method yy_r2_18 (line 527) | function yy_r2_18()
    method yy_r2_20 (line 534) | function yy_r2_20()
    method yy_r2_23 (line 548) | function yy_r2_23()
    method yy_r2_25 (line 555) | function yy_r2_25()
    method yylex3 (line 562) | public function yylex3()
    method yy_r3_1 (line 617) | function yy_r3_1()
    method yy_r3_2 (line 623) | function yy_r3_2()
    method yy_r3_4 (line 629) | function yy_r3_4()
    method yy_r3_5 (line 636) | function yy_r3_5()
    method yy_r3_6 (line 641) | function yy_r3_6()
    method yy_r3_7 (line 646) | function yy_r3_7()
    method yy_r3_8 (line 651) | function yy_r3_8()
    method yy_r3_9 (line 656) | function yy_r3_9()
    method yy_r3_10 (line 661) | function yy_r3_10()
    method yy_r3_11 (line 666) | function yy_r3_11()
    method yy_r3_12 (line 671) | function yy_r3_12()
    method yy_r3_13 (line 676) | function yy_r3_13()
    method yy_r3_15 (line 681) | function yy_r3_15()
    method yy_r3_17 (line 686) | function yy_r3_17()
    method yy_r3_20 (line 691) | function yy_r3_20()
    method yy_r3_23 (line 696) | function yy_r3_23()
    method yy_r3_24 (line 701) | function yy_r3_24()
    method yy_r3_28 (line 706) | function yy_r3_28()
    method yy_r3_29 (line 711) | function yy_r3_29()
    method yy_r3_30 (line 716) | function yy_r3_30()
    method yy_r3_31 (line 721) | function yy_r3_31()
    method yy_r3_32 (line 726) | function yy_r3_32()
    method yy_r3_33 (line 731) | function yy_r3_33()
    method yy_r3_34 (line 736) | function yy_r3_34()
    method yy_r3_35 (line 741) | function yy_r3_35()
    method yy_r3_37 (line 746) | function yy_r3_37()
    method yy_r3_39 (line 751) | function yy_r3_39()
    method yy_r3_41 (line 756) | function yy_r3_41()
    method yy_r3_42 (line 761) | function yy_r3_42()
    method yy_r3_43 (line 766) | function yy_r3_43()
    method yy_r3_44 (line 779) | function yy_r3_44()
    method yy_r3_47 (line 784) | function yy_r3_47()
    method yy_r3_48 (line 789) | function yy_r3_48()
    method yy_r3_49 (line 794) | function yy_r3_49()
    method yy_r3_50 (line 800) | function yy_r3_50()
    method yy_r3_51 (line 805) | function yy_r3_51()
    method yy_r3_52 (line 810) | function yy_r3_52()
    method yy_r3_53 (line 815) | function yy_r3_53()
    method yy_r3_54 (line 820) | function yy_r3_54()
    method yy_r3_55 (line 825) | function yy_r3_55()
    method yy_r3_56 (line 830) | function yy_r3_56()
    method yy_r3_57 (line 835) | function yy_r3_57()
    method yy_r3_58 (line 840) | function yy_r3_58()
    method yy_r3_59 (line 845) | function yy_r3_59()
    method yylex4 (line 850) | public function yylex4()
    method yy_r4_1 (line 905) | function yy_r4_1()
    method yy_r4_3 (line 911) | function yy_r4_3()
    method yy_r4_5 (line 922) | function yy_r4_5()
    method yylex5 (line 927) | public function yylex5()
    method yy_r5_1 (line 982) | function yy_r5_1()
    method yy_r5_3 (line 987) | function yy_r5_3()
    method yy_r5_5 (line 992) | function yy_r5_5()
    method yy_r5_7 (line 997) | function yy_r5_7()
    method yy_r5_9 (line 1003) | function yy_r5_9()
    method yy_r5_11 (line 1009) | function yy_r5_11()
    method yy_r5_13 (line 1016) | function yy_r5_13()
    method yy_r5_14 (line 1022) | function yy_r5_14()
    method yy_r5_15 (line 1030) | function yy_r5_15()
    method yy_r5_16 (line 1035) | function yy_r5_16()
    method yy_r5_17 (line 1040) | function yy_r5_17()

FILE: Tool/smarty-3.1.32/libs/sysplugins/smarty_internal_templateparser.php
  class TP_yyStackEntry (line 3) | class TP_yyStackEntry
  class Smarty_Internal_Templateparser (line 23) | class Smarty_Internal_Templateparser
    method __construct (line 1656) | function __construct(Smarty_Internal_Templatelexer $lex, Smarty_Intern...
    method insertPhpCode (line 1671) | public function insertPhpCode($code)
    method errorRunDown (line 1680) | public function errorRunDown()
    method mergePrefixCode (line 1697) | public function mergePrefixCode($code)
    method Trace (line 1708) | public function Trace($TraceFILE, $zTracePrompt)
    method PrintTrace (line 1719) | public function PrintTrace()
    method tokenName (line 1725) | public function tokenName($tokenType)
    method yy_destructor (line 1737) | public static function yy_destructor($yymajor, $yypminor)
    method yy_pop_parser_stack (line 1745) | public function yy_pop_parser_stack()
    method __destruct (line 1762) | public function __destruct()
    method yy_get_expected_tokens (line 1772) | public function yy_get_expected_tokens($token)
    method yy_is_expected_token (line 1856) | public function yy_is_expected_token($token)
    method yy_find_shift_action (line 1945) | public function yy_find_shift_action($iLookAhead)
    method yy_find_reduce_action (line 1979) | public function yy_find_reduce_action($stateno, $iLookAhead)
    method yy_shift (line 2003) | public function yy_shift($yyNewState, $yyMajor, $yypMinor)
    method yy_r0 (line 2041) | function yy_r0()
    method yy_r1 (line 2050) | function yy_r1()
    method yy_r2 (line 2072) | function yy_r2()
    method yy_r3 (line 2080) | function yy_r3()
    method yy_r4 (line 2087) | function yy_r4()
    method yy_r5 (line 2094) | function yy_r5()
    method yy_r6 (line 2103) | function yy_r6()
    method yy_r7 (line 2110) | function yy_r7()
    method yy_r8 (line 2117) | function yy_r8()
    method yy_r9 (line 2124) | function yy_r9()
    method yy_r10 (line 2131) | function yy_r10()
    method yy_r12 (line 2143) | function yy_r12()
    method yy_r13 (line 2166) | function yy_r13()
    method yy_r14 (line 2193) | function yy_r14()
    method yy_r15 (line 2209) | function yy_r15()
    method yy_r16 (line 2216) | function yy_r16()
    method yy_r17 (line 2223) | function yy_r17()
    method yy_r18 (line 2233) | function yy_r18()
    method yy_r19 (line 2247) | function yy_r19()
    method yy_r20 (line 2261) | function yy_r20()
    method yy_r21 (line 2268) | function yy_r21()
    method yy_r25 (line 2275) | function yy_r25()
    method yy_r26 (line 2293) | function yy_r26()
    method yy_r27 (line 2309) | function yy_r27()
    method yy_r28 (line 2331) | function yy_r28()
    method yy_r29 (line 2341) | function yy_r29()
    method yy_r30 (line 2353) | function yy_r30()
    method yy_r31 (line 2363) | function yy_r31()
    method yy_r32 (line 2374) | function yy_r32()
    method yy_r33 (line 2385) | function yy_r33()
    method yy_r35 (line 2396) | function yy_r35()
    method yy_r36 (line 2413) | function yy_r36()
    method yy_r38 (line 2420) | function yy_r38()
    method yy_r39 (line 2433) | function yy_r39()
    method yy_r40 (line 2448) | function yy_r40()
    method yy_r41 (line 2460) | function yy_r41()
    method yy_r42 (line 2474) | function yy_r42()
    method yy_r43 (line 2481) | function yy_r43()
    method yy_r44 (line 2493) | function yy_r44()
    method yy_r45 (line 2507) | function yy_r45()
    method yy_r46 (line 2523) | function yy_r46()
    method yy_r47 (line 2530) | function yy_r47()
    method yy_r48 (line 2540) | function yy_r48()
    method yy_r49 (line 2550) | function yy_r49()
    method yy_r50 (line 2562) | function yy_r50()
    method yy_r51 (line 2570) | function yy_r51()
    method yy_r52 (line 2577) | function yy_r52()
    method yy_r53 (line 2584) | function yy_r53()
    method yy_r54 (line 2601) | function yy_r54()
    method yy_r56 (line 2610) | function yy_r56()
    method yy_r59 (line 2617) | function yy_r59()
    method yy_r61 (line 2625) | function yy_r61()
    method yy_r62 (line 2633) | function yy_r62()
    method yy_r64 (line 2641) | function yy_r64()
    method yy_r65 (line 2649) | function yy_r65()
    method yy_r68 (line 2656) | function yy_r68()
    method yy_r69 (line 2665) | function yy_r69()
    method yy_r72 (line 2674) | function yy_r72()
    method yy_r73 (line 2686) | function yy_r73()
    method yy_r74 (line 2695) | function yy_r74()
    method yy_r75 (line 2703) | function yy_r75()
    method yy_r76 (line 2710) | function yy_r76()
    method yy_r77 (line 2719) | function yy_r77()
    method yy_r78 (line 2727) | function yy_r78()
    method yy_r79 (line 2739) | function yy_r79()
    method yy_r81 (line 2748) | function yy_r81()
    method yy_r82 (line 2755) | function yy_r82()
    method yy_r87 (line 2762) | function yy_r87()
    method yy_r88 (line 2769) | function yy_r88()
    method yy_r89 (line 2776) | function yy_r89()
    method yy_r90 (line 2783) | function yy_r90()
    method yy_r92 (line 2797) | function yy_r92()
    method yy_r93 (line 2804) | function yy_r93()
    method yy_r97 (line 2812) | function yy_r97()
    method yy_r98 (line 2835) | function yy_r98()
    method yy_r101 (line 2845) | function yy_r101()
    method yy_r103 (line 2868) | function yy_r103()
    method yy_r104 (line 2875) | function yy_r104()
    method yy_r105 (line 2883) | function yy_r105()
    method yy_r106 (line 2902) | function yy_r106()
    method yy_r108 (line 2910) | function yy_r108()
    method yy_r109 (line 2918) | function yy_r109()
    method yy_r110 (line 2928) | function yy_r110()
    method yy_r111 (line 2935) | function yy_r111()
    method yy_r112 (line 2944) | function yy_r112()
    method yy_r113 (line 2952) | function yy_r113()
    method yy_r115 (line 2960) | function yy_r115()
    method yy_r116 (line 2967) | function yy_r116()
    method yy_r117 (line 2976) | function yy_r117()
    method yy_r118 (line 2983) | function yy_r118()
    method yy_r119 (line 2991) | function yy_r119()
    method yy_r120 (line 2998) | function yy_r120()
    method yy_r121 (line 3005) | function yy_r121()
    method yy_r122 (line 3012) | function yy_r122()
    method yy_r123 (line 3023) | function yy_r123()
    method yy_r124 (line 3034) | function yy_r124()
    method yy_r126 (line 3041) | function yy_r126()
    method yy_r130 (line 3050) | function yy_r130()
    method yy_r131 (line 3057) | function yy_r131()
    method yy_r132 (line 3064) | function yy_r132()
    method yy_r133 (line 3071) | function yy_r133()
    method yy_r135 (line 3078) | function yy_r135()
    method yy_r136 (line 3089) | function yy_r136()
    method yy_r137 (line 3096) | function yy_r137()
    method yy_r138 (line 3113) | function yy_r138()
    method yy_r139 (line 3120) | function yy_r139()
    method yy_r140 (line 3127) | function yy_r140()
    method yy_r141 (line 3138) | function yy_r141()
    method yy_r142 (line 3149) | function yy_r142()
    method yy_r143 (line 3160) | function yy_r143()
    method yy_r144 (line 3172) | function yy_r144()
    method yy_r145 (line 3179) | function yy_r145()
    method yy_r146 (line 3187) | function yy_r146()
    method yy_r147 (line 3198) | function yy_r147()
    method yy_r148 (line 3214) | function yy_r148()
    method yy_r151 (line 3222) | function yy_r151()
    method yy_r152 (line 3231) | function yy_r152()
    method yy_r154 (line 3239) | function yy_r154()
    method yy_r155 (line 3246) | function yy_r155()
    method yy_r159 (line 3254) | function yy_r159()
    method yy_r160 (line 3261) | function yy_r160()
    method yy_r161 (line 3269) | function yy_r161()
    method yy_r162 (line 3276) | function yy_r162()
    method yy_r163 (line 3284) | function yy_r163()
    method yy_r164 (line 3293) | function yy_r164()
    method yy_r165 (line 3300) | function yy_r165()
    method yy_r166 (line 3323) | function yy_r166()
    method yy_r167 (line 3339) | function yy_r167()
    method yy_r168 (line 3353) | function yy_r168()
    method yy_r170 (line 3360) | function yy_r170()
    method yy_r172 (line 3367) | function yy_r172()
    method yy_r173 (line 3375) | function yy_r173()
    method yy_r176 (line 3383) | function yy_r176()
    method yy_r177 (line 3391) | function yy_r177()
    method yy_r178 (line 3399) | function yy_r178()
    method yy_r179 (line 3406) | function yy_r179()
    method yy_r180 (line 3413) | function yy_r180()
    method yy_r181 (line 3421) | function yy_r181()
    method yy_r184 (line 3430) | function yy_r184()
    method yy_r185 (line 3435) | function yy_r185()
    method yy_reduce (line 3440) | public function yy_reduce($yyruleno)
    method yy_parse_failed (line 3481) | public function yy_parse_failed()
    method yy_syntax_error (line 3491) | public function yy_syntax_error($yymajor, $TOKEN)
    method yy_accept (line 3499) | public function yy_accept()
    method doParse (line 3513) | public function doParse($yymajor, $yytokenvalue)

FILE: Tool/smarty-3.1.32/libs/sysplugins/smarty_internal_testinstall.php
  class Smarty_Internal_TestInstall (line 17) | class Smarty_Internal_TestInstall
    method testInstall (line 28) | public static function testInstall(Smarty $smarty, &$errors = null)

FILE: Tool/smarty-3.1.32/libs/sysplugins/smarty_internal_undefined.php
  class Smarty_Internal_Undefined (line 12) | class Smarty_Internal_Undefined
    method __construct (line 27) | public function __construct($class = null)
    method decodeProperties (line 41) | public function decodeProperties(Smarty_Internal_Template $tpl, $prope...
    method __call (line 60) | public function __call($name, $args)

FILE: Tool/smarty-3.1.32/libs/sysplugins/smarty_resource.php
  class Smarty_Resource (line 21) | abstract class Smarty_Resource
    method load (line 62) | public static function load(Smarty $smarty, $type)
    method parseResourceName (line 115) | public static function parseResourceName($resource_name, $default_reso...
    method getUniqueTemplateName (line 138) | public static function getUniqueTemplateName($obj, $template_resource)
    method source (line 166) | public static function source(Smarty_Internal_Template $_template = null,
    method getContent (line 181) | abstract public function getContent(Smarty_Template_Source $source);
    method populate (line 189) | abstract public function populate(Smarty_Template_Source $source, Smar...
    method populateTimestamp (line 196) | public function populateTimestamp(Smarty_Template_Source $source)
    method buildUniqueResourceName (line 210) | public function buildUniqueResourceName(Smarty $smarty, $resource_name...
    method getBasename (line 239) | public function getBasename(Smarty_Template_Source $source)
    method checkTimestamps (line 247) | public function checkTimestamps()

FILE: Tool/smarty-3.1.32/libs/sysplugins/smarty_resource_custom.php
  class Smarty_Resource_Custom (line 17) | abstract class Smarty_Resource_Custom extends Smarty_Resource
    method fetch (line 26) | abstract protected function fetch($name, &$source, &$mtime);
    method fetchTimestamp (line 37) | protected function fetchTimestamp($name)
    method populate (line 48) | public function populate(Smarty_Template_Source $source, Smarty_Intern...
    method getContent (line 74) | public function getContent(Smarty_Template_Source $source)
    method getBasename (line 91) | public function getBasename(Smarty_Template_Source $source)

FILE: Tool/smarty-3.1.32/libs/sysplugins/smarty_resource_recompiled.php
  class Smarty_Resource_Recompiled (line 17) | abstract class Smarty_Resource_Recompiled extends Smarty_Resource
    method process (line 40) | public function process(Smarty_Internal_Template $_smarty_tpl)
    method populateCompiledFilepath (line 76) | public function populateCompiledFilepath(Smarty_Template_Compiled $com...
    method checkTimestamps (line 91) | public function checkTimestamps()

FILE: Tool/smarty-3.1.32/libs/sysplugins/smarty_resource_uncompiled.php
  class Smarty_Resource_Uncompiled (line 17) | abstract class Smarty_Resource_Uncompiled extends Smarty_Resource
    method populateCompiledFilepath (line 39) | public function populateCompiledFilepath(Smarty_Template_Compiled $com...

FILE: Tool/smarty-3.1.32/libs/sysplugins/smarty_security.php
  class Smarty_Security (line 22) | class Smarty_Security
    method __construct (line 258) | public function __construct($smarty)
    method isTrustedPhpFunction (line 274) | public function isTrustedPhpFunction($function_name, $compiler)
    method isTrustedStaticClass (line 296) | public function isTrustedStaticClass($class_name, $compiler)
    method isTrustedStaticClassAccess (line 319) | public function isTrustedStaticClassAccess($class_name, $params, $comp...
    method isTrustedPhpModifier (line 357) | public function isTrustedPhpModifier($modifier_name, $compiler)
    method isTrustedTag (line 379) | public function isTrustedTag($tag_name, $compiler)
    method isTrustedSpecialSmartyVar (line 414) | public function isTrustedSpecialSmartyVar($var_name, $compiler)
    method isTrustedModifier (line 435) | public function isTrustedModifier($modifier_name, $compiler)
    method isTrustedConstant (line 469) | public function isTrustedConstant($const, $compiler)
    method isTrustedStream (line 496) | public function isTrustedStream($stream_name)
    method isTrustedResourceDir (line 514) | public function isTrustedResourceDir($filepath, $isConfig = null)
    method isTrustedUri (line 565) | public function isTrustedUri($uri)
    method isTrustedPHPDir (line 588) | public function isTrustedPHPDir($filepath)
    method _updateResourceDir (line 617) | private function _updateResourceDir($oldDir, $newDir) {
    method _checkDir (line 641) | private function _checkDir($filepath, $dirs)
    method enableSecurity (line 678) | public static function enableSecurity(Smarty $smarty, $security_class)
    method startTemplate (line 705) | public function startTemplate($template)
    method endTemplate (line 716) | public function endTemplate()
    method registerCallBacks (line 728) | public function registerCallBacks(Smarty_Internal_Template $template)

FILE: Tool/smarty-3.1.32/libs/sysplugins/smarty_template_cached.php
  class Smarty_Template_Cached (line 17) | class Smarty_Template_Cached extends Smarty_Template_Resource_Base
    method __construct (line 89) | public function __construct(Smarty_Internal_Template $_template)
    method load (line 105) | static function load(Smarty_Internal_Template $_template)
    method render (line 125) | public function render(Smarty_Internal_Template $_template, $no_output...
    method isCached (line 154) | public function isCached(Smarty_Internal_Template $_template)
    method process (line 231) | public function process(Smarty_Internal_Template $_template, $update =...
    method read (line 250) | public function read(Smarty_Internal_Template $_template)

FILE: Tool/smarty-3.1.32/libs/sysplugins/smarty_template_compiled.php
  class Smarty_Template_Compiled (line 12) | class Smarty_Template_Compiled extends Smarty_Template_Resource_Base
    method load (line 28) | static function load($_template)
    method populateCompiledFilepath (line 44) | public function populateCompiledFilepath(Smarty_Internal_Template $_te...
    method render (line 91) | public function render(Smarty_Internal_Template $_template)
    method process (line 131) | public function process(Smarty_Internal_Template $_smarty_tpl)
    method compileTemplateSource (line 169) | public function compileTemplateSource(Smarty_Internal_Template $_templ...
    method write (line 207) | public function write(Smarty_Internal_Template $_template, $code)
    method read (line 229) | public function read(Smarty_Internal_Template $_template)
    method loadCompiledTemplate (line 243) | private function loadCompiledTemplate(Smarty_Internal_Template $_smart...

FILE: Tool/smarty-3.1.32/libs/sysplugins/smarty_template_config.php
  class Smarty_Template_Config (line 19) | class Smarty_Template_Config extends Smarty_Template_Source
    method load (line 74) | public static function load(Smarty_Internal_Template $_template = null...

FILE: Tool/smarty-3.1.32/libs/sysplugins/smarty_template_resource_base.php
  class Smarty_Template_Resource_Base (line 10) | abstract class Smarty_Template_Resource_Base
    method process (line 96) | abstract public function process(Smarty_Internal_Template $_template);
    method getRenderedTemplateCode (line 106) | public function getRenderedTemplateCode(Smarty_Internal_Template $_tem...
    method getTimeStamp (line 146) | public function getTimeStamp()

FILE: Tool/smarty-3.1.32/libs/sysplugins/smarty_template_source.php
  class Smarty_Template_Source (line 12) | class Smarty_Template_Source
    method __construct (line 137) | public function __construct(Smarty $smarty, $resource, $type, $name)
    method load (line 159) | public static function load(Smarty_Internal_Template $_template = null...
    method getTimeStamp (line 194) | public function getTimeStamp()
    method getContent (line 208) | public function getContent()

FILE: Tool/smarty-3.1.32/libs/sysplugins/smarty_undefined_variable.php
  class Smarty_Undefined_Variable (line 10) | class Smarty_Undefined_Variable extends Smarty_Variable
    method __get (line 19) | public function __get($name)
    method __toString (line 29) | public function __toString()

FILE: Tool/smarty-3.1.32/libs/sysplugins/smarty_variable.php
  class Smarty_Variable (line 10) | class Smarty_Variable
    method __construct (line 32) | public function __construct($value = null, $nocache = false)
    method __toString (line 43) | public function __toString()

FILE: Tool/smarty-3.1.32/libs/sysplugins/smartycompilerexception.php
  class SmartyCompilerException (line 8) | class SmartyCompilerException extends SmartyException
    method __toString (line 13) | public function __toString()

FILE: Tool/smarty-3.1.32/libs/sysplugins/smartyexception.php
  class SmartyException (line 8) | class SmartyException extends Exception
    method __toString (line 15) | public function __toString()

FILE: book.sql
  type `book_info` (line 33) | CREATE TABLE `book_info` (
  type `borrow_list` (line 299) | CREATE TABLE `borrow_list` (
  type `user` (line 323) | CREATE TABLE `user` (
Condensed preview — 247 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (1,502K chars).
[
  {
    "path": "Admin/Controller/BookController.class.php",
    "chars": 4643,
    "preview": "<?php\nnamespace Admin\\Controller;\nuse Base\\BaseController;\nuse Admin\\Model\\BookModel;\nuse Admin\\Model\\BorrowModel;\nuse T"
  },
  {
    "path": "Admin/Controller/BorrowController.class.php",
    "chars": 3333,
    "preview": "<?php\nnamespace Admin\\Controller;\nuse Base\\BaseController;\nuse Admin\\Model\\BorrowModel;\n\nfinal class Borrow extends Base"
  },
  {
    "path": "Admin/Controller/IndexController.class.php",
    "chars": 591,
    "preview": "<?php\nnamespace Admin\\Controller;\nuse Base\\BaseController;\nuse Admin\\Model\\UserModel;\nuse Admin\\Model\\BookModel;\n\nfinal "
  },
  {
    "path": "Admin/Controller/UserController.class.php",
    "chars": 5402,
    "preview": "<?php\nnamespace Admin\\Controller;\nuse Base\\BaseController;\nuse Admin\\Model\\UserModel;\nuse Admin\\Model\\BorrowModel;\nuse T"
  },
  {
    "path": "Admin/Model/BookModel.class.php",
    "chars": 1087,
    "preview": "<?php\nnamespace Admin\\Model;\nuse Base\\BaseModel;\n\nfinal class BookModel extends BaseModel{\n\n    //要操作的数据表名\n    protected"
  },
  {
    "path": "Admin/Model/BorrowModel.class.php",
    "chars": 1346,
    "preview": "<?php\nnamespace Admin\\Model;\nuse Base\\BaseModel;\n\nfinal class BorrowModel extends BaseModel{\n\n    //操作的数据表名\n    protecte"
  },
  {
    "path": "Admin/Model/UserModel.class.php",
    "chars": 854,
    "preview": "<?php\nnamespace Admin\\Model;\nuse Base\\BaseModel;\n\nfinal class UserModel extends BaseModel{\n\n    //操作的数据表名\n    protected "
  },
  {
    "path": "Admin/View/Book/add.html",
    "chars": 5058,
    "preview": "<!DOCTYPE html>\n<html lang=\"zh-CN\">\n\n<head>\n    <meta charset=\"UTF-8\">\n    <meta name=\"viewport\" content=\"width=device-w"
  },
  {
    "path": "Admin/View/Book/detail.html",
    "chars": 4981,
    "preview": "<!DOCTYPE html>\n<html lang=\"zh-CN\">\n\n<head>\n    <meta charset=\"UTF-8\">\n    <meta name=\"viewport\" content=\"width=device-w"
  },
  {
    "path": "Admin/View/Book/edit.html",
    "chars": 5209,
    "preview": "<!DOCTYPE html>\n<html lang=\"zh-CN\">\n\n<head>\n    <meta charset=\"UTF-8\">\n    <meta name=\"viewport\" content=\"width=device-w"
  },
  {
    "path": "Admin/View/Book/index.html",
    "chars": 6360,
    "preview": "<!DOCTYPE html>\n<html lang=\"zh-CN\">\n\n<head>\n    <meta charset=\"UTF-8\">\n    <meta name=\"viewport\" content=\"width=device-w"
  },
  {
    "path": "Admin/View/Borrow/index.html",
    "chars": 4508,
    "preview": "<!DOCTYPE html>\n<html lang=\"zh-CN\">\n\n<head>\n    <meta charset=\"UTF-8\">\n    <meta name=\"viewport\" content=\"width=device-w"
  },
  {
    "path": "Admin/View/Index/index.html",
    "chars": 2638,
    "preview": "<!DOCTYPE html>\n<html lang=\"zh-CN\" style=\"height: 100%;\">\n\n<head>\n  <meta charset=\"UTF-8\">\n  <meta name=\"viewport\" conte"
  },
  {
    "path": "Admin/View/User/add.html",
    "chars": 4637,
    "preview": "<!DOCTYPE html>\n<html lang=\"zh-CN\">\n\n<head>\n    <meta charset=\"UTF-8\">\n    <meta name=\"viewport\" content=\"width=device-w"
  },
  {
    "path": "Admin/View/User/index.html",
    "chars": 5945,
    "preview": "<!DOCTYPE html>\n<html lang=\"zh-CN\">\n\n<head>\n    <meta charset=\"UTF-8\">\n    <meta name=\"viewport\" content=\"width=device-w"
  },
  {
    "path": "Admin/View/User/manage.html",
    "chars": 13536,
    "preview": "<!DOCTYPE html>\n<html lang=\"zh-CN\">\n\n<head>\n    <meta charset=\"UTF-8\">\n    <meta name=\"viewport\" content=\"width=device-w"
  },
  {
    "path": "Base/Base.class.php",
    "chars": 2144,
    "preview": "<?php\nabstract class Base{\n\n    public static function Run(){\n        self::pageInit();\n        self::dirInit();\n       "
  },
  {
    "path": "Base/BaseController.class.php",
    "chars": 1317,
    "preview": "<?php\nnamespace Base;\nuse Tool\\MySmarty;\n\nabstract class BaseController{\n\n    protected $smarty;\n    \n    public functio"
  },
  {
    "path": "Base/BaseModel.class.php",
    "chars": 1865,
    "preview": "<?php\nnamespace Base;\nuse Tool\\Db;\n\nabstract class BaseModel{\n\n    protected $Db;\n    protected $table;   //操作的数据表名\n\n   "
  },
  {
    "path": "Base/Conf.php",
    "chars": 337,
    "preview": "<?php\nreturn array(\n    //数据库配置\n    'db_host'   =>  \"127.0.0.1\",\n    'db_user'   =>  \"root\",\n    'db_pwd'    =>  \"root\","
  },
  {
    "path": "Common/Controller/LoginController.class.php",
    "chars": 2258,
    "preview": "<?php\nnamespace Common\\Controller;\nuse Base\\BaseController;\nuse Common\\Model\\UserModel;\nuse Tool\\Verify;\n\nfinal class Lo"
  },
  {
    "path": "Common/Model/UserModel.class.php",
    "chars": 144,
    "preview": "<?php\nnamespace Common\\Model;\nuse Base\\BaseModel;\n\nfinal class UserModel extends BaseModel{\n    \n    //操作的数据表名\n    prote"
  },
  {
    "path": "Common/View/login.html",
    "chars": 3609,
    "preview": "<!DOCTYPE html>\n<html lang=\"zh-CN\" style=\"height: 100%;\">\n\n<head>\n    <meta charset=\"UTF-8\">\n    <meta name=\"viewport\" c"
  },
  {
    "path": "Home/Controller/BookController.class.php",
    "chars": 2125,
    "preview": "<?php\nnamespace Home\\Controller;\nuse Base\\BaseController;\nuse Home\\Model\\BookModel;\nuse Tool\\Pager;\n\nfinal class Book ex"
  },
  {
    "path": "Home/Controller/BorrowController.class.php",
    "chars": 1151,
    "preview": "<?php\nnamespace Home\\Controller;\nuse Base\\BaseController;\nuse Home\\Model\\BorrowModel;\n\nfinal class Borrow extends BaseCo"
  },
  {
    "path": "Home/Controller/IndexController.class.php",
    "chars": 1137,
    "preview": "<?php\nnamespace Home\\Controller;\nuse Base\\BaseController;\nuse Home\\Model\\UserModel;\nuse Home\\Model\\BookModel;\nuse Home\\M"
  },
  {
    "path": "Home/Controller/UserController.class.php",
    "chars": 1964,
    "preview": "<?php\nnamespace Home\\Controller;\nuse Base\\BaseController;\nuse Home\\Model\\UserModel;\nuse Home\\Model\\BorrowModel;\n\nfinal c"
  },
  {
    "path": "Home/Model/BookModel.class.php",
    "chars": 1071,
    "preview": "<?php\nnamespace Home\\Model;\nuse Base\\BaseModel;\n\nfinal class BookModel extends BaseModel{\n\n    protected $table = \"book_"
  },
  {
    "path": "Home/Model/BorrowModel.class.php",
    "chars": 623,
    "preview": "<?php\nnamespace Home\\Model;\nuse Base\\BaseModel;\n\nfinal class BorrowModel extends BaseModel{\n\n    protected $table = \"bor"
  },
  {
    "path": "Home/Model/UserModel.class.php",
    "chars": 138,
    "preview": "<?php\nnamespace Home\\Model;\nuse Base\\BaseModel;\n\nfinal class UserModel extends BaseModel{\n\n    //操作的数据表名\n    protected $"
  },
  {
    "path": "Home/View/Book/detail.html",
    "chars": 4858,
    "preview": "<!DOCTYPE html>\n<html lang=\"zh-CN\">\n\n<head>\n    <meta charset=\"UTF-8\">\n    <meta name=\"viewport\" content=\"width=device-w"
  },
  {
    "path": "Home/View/Book/index.html",
    "chars": 5365,
    "preview": "<!DOCTYPE html>\n<html lang=\"zh-CN\">\n\n<head>\n    <meta charset=\"UTF-8\">\n    <meta name=\"viewport\" content=\"width=device-w"
  },
  {
    "path": "Home/View/Index/index.html",
    "chars": 2578,
    "preview": "<!DOCTYPE html>\n<html lang=\"zh-CN\" style=\"height: 100%;\">\n\n<head>\n  <meta charset=\"UTF-8\">\n  <meta name=\"viewport\" conte"
  },
  {
    "path": "Home/View/User/index.html",
    "chars": 9745,
    "preview": "<!DOCTYPE html>\n<html lang=\"zh-CN\">\n\n<head>\n    <meta charset=\"UTF-8\">\n    <meta name=\"viewport\" content=\"width=device-w"
  },
  {
    "path": "LICENSE",
    "chars": 35149,
    "preview": "                    GNU GENERAL PUBLIC LICENSE\n                       Version 3, 29 June 2007\n\n Copyright (C) 2007 Free "
  },
  {
    "path": "README.md",
    "chars": 1439,
    "preview": "# 图书管理系统\n>这个图书管理系统是我学完PHP时写的一个练手项目,功能参考了自己学校的图书管理系统。为了锻炼自己的动手能力以及加深对代码的理解,前端和后端均由自己完成,前端使用了一些基本的框架(毕竟我主攻后端开发方向),后端大部分要用到"
  },
  {
    "path": "Tool/Db.class.php",
    "chars": 2598,
    "preview": "<?php\nnamespace Tool;\nfinal Class Db{\n    //单例数据库类\n    private static $Db;\n    private $mysqli;\n    private $db_host;\n  "
  },
  {
    "path": "Tool/MySmarty.class.php",
    "chars": 700,
    "preview": "<?php\nnamespace Tool;\nrequire_once(ROOT.\"Tool\".DS.\"smarty-3.1.32\".DS.\"libs\".DS.\"Smarty.class.php\");\n\nfinal class MySmart"
  },
  {
    "path": "Tool/Pager.class.php",
    "chars": 4108,
    "preview": "<?php\nnamespace Tool;\n\n//Pager for bootstrap\nfinal class Pager{\n\n    private $currentPage;   //当前页数\n    private $total; "
  },
  {
    "path": "Tool/Verify.class.php",
    "chars": 1796,
    "preview": "<?php\nnamespace Tool;\nfinal class Verify\n{\n    private $width;\n    private $height;\n    private $picRes;\n\n    public fun"
  },
  {
    "path": "Tool/smarty-3.1.32/libs/Autoloader.php",
    "chars": 3102,
    "preview": "<?php\n/**\n * Smarty Autoloader\n *\n * @package    Smarty\n */\n\n/**\n * Smarty Autoloader\n *\n * @package    Smarty\n * @autho"
  },
  {
    "path": "Tool/smarty-3.1.32/libs/Smarty.class.php",
    "chars": 39802,
    "preview": "<?php\n/**\n * Project:     Smarty: the PHP compiling template engine\n * File:        Smarty.class.php\n *\n * This library "
  },
  {
    "path": "Tool/smarty-3.1.32/libs/SmartyBC.class.php",
    "chars": 12649,
    "preview": "<?php\n/**\n * Project:     Smarty: the PHP compiling template engine\n * File:        SmartyBC.class.php\n * SVN:         $"
  },
  {
    "path": "Tool/smarty-3.1.32/libs/bootstrap.php",
    "chars": 416,
    "preview": "<?php\n/*\n * This file is part of the Smarty package.\n *\n * (c) Sebastian Bergmann <sebastian@phpunit.de>\n *\n * For the f"
  },
  {
    "path": "Tool/smarty-3.1.32/libs/debug.tpl",
    "chars": 5056,
    "preview": "{capture name='_smarty_debug' assign=debug_output}\n    <!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.1//EN\" \"http://www.w3."
  },
  {
    "path": "Tool/smarty-3.1.32/libs/plugins/block.textformat.php",
    "chars": 3518,
    "preview": "<?php\n/**\n * Smarty plugin to format text blocks\n *\n * @package    Smarty\n * @subpackage PluginsBlock\n */\n/**\n * Smarty "
  },
  {
    "path": "Tool/smarty-3.1.32/libs/plugins/function.counter.php",
    "chars": 1836,
    "preview": "<?php\n/**\n * Smarty plugin\n *\n * @package    Smarty\n * @subpackage PluginsFunction\n */\n\n/**\n * Smarty {counter} function"
  },
  {
    "path": "Tool/smarty-3.1.32/libs/plugins/function.cycle.php",
    "chars": 3333,
    "preview": "<?php\n/**\n * Smarty plugin\n *\n * @package    Smarty\n * @subpackage PluginsFunction\n */\n\n/**\n * Smarty {cycle} function p"
  },
  {
    "path": "Tool/smarty-3.1.32/libs/plugins/function.fetch.php",
    "chars": 8085,
    "preview": "<?php\n/**\n * Smarty plugin\n *\n * @package    Smarty\n * @subpackage PluginsFunction\n */\n\n/**\n * Smarty {fetch} plugin\n * "
  },
  {
    "path": "Tool/smarty-3.1.32/libs/plugins/function.html_checkboxes.php",
    "chars": 8959,
    "preview": "<?php\n/**\n * Smarty plugin\n *\n * @package    Smarty\n * @subpackage PluginsFunction\n */\n/**\n * Smarty {html_checkboxes} f"
  },
  {
    "path": "Tool/smarty-3.1.32/libs/plugins/function.html_image.php",
    "chars": 5502,
    "preview": "<?php\n/**\n * Smarty plugin\n *\n * @package    Smarty\n * @subpackage PluginsFunction\n */\n\n/**\n * Smarty {html_image} funct"
  },
  {
    "path": "Tool/smarty-3.1.32/libs/plugins/function.html_options.php",
    "chars": 7897,
    "preview": "<?php\n/**\n * Smarty plugin\n *\n * @package    Smarty\n * @subpackage PluginsFunction\n */\n/**\n * Smarty {html_options} func"
  },
  {
    "path": "Tool/smarty-3.1.32/libs/plugins/function.html_radios.php",
    "chars": 7867,
    "preview": "<?php\n/**\n * Smarty plugin\n *\n * @package    Smarty\n * @subpackage PluginsFunction\n */\n/**\n * Smarty {html_radios} funct"
  },
  {
    "path": "Tool/smarty-3.1.32/libs/plugins/function.html_select_date.php",
    "chars": 15249,
    "preview": "<?php\n/**\n * Smarty plugin\n *\n * @package    Smarty\n * @subpackage PluginsFunction\n */\n/**\n * Smarty {html_select_date} "
  },
  {
    "path": "Tool/smarty-3.1.32/libs/plugins/function.html_select_time.php",
    "chars": 14677,
    "preview": "<?php\n/**\n * Smarty plugin\n *\n * @package    Smarty\n * @subpackage PluginsFunction\n */\n/**\n * Smarty {html_select_time} "
  },
  {
    "path": "Tool/smarty-3.1.32/libs/plugins/function.html_table.php",
    "chars": 5407,
    "preview": "<?php\n/**\n * Smarty plugin\n *\n * @package    Smarty\n * @subpackage PluginsFunction\n */\n\n/**\n * Smarty {html_table} funct"
  },
  {
    "path": "Tool/smarty-3.1.32/libs/plugins/function.mailto.php",
    "chars": 5379,
    "preview": "<?php\n/**\n * Smarty plugin\n *\n * @package    Smarty\n * @subpackage PluginsFunction\n */\n\n/**\n * Smarty {mailto} function "
  },
  {
    "path": "Tool/smarty-3.1.32/libs/plugins/function.math.php",
    "chars": 3536,
    "preview": "<?php\n/**\n * Smarty plugin\n * This plugin is only for Smarty2 BC\n *\n * @package    Smarty\n * @subpackage PluginsFunction"
  },
  {
    "path": "Tool/smarty-3.1.32/libs/plugins/modifier.capitalize.php",
    "chars": 3966,
    "preview": "<?php\n/**\n * Smarty plugin\n *\n * @package    Smarty\n * @subpackage PluginsModifier\n */\n\n/**\n * Smarty capitalize modifie"
  },
  {
    "path": "Tool/smarty-3.1.32/libs/plugins/modifier.date_format.php",
    "chars": 2800,
    "preview": "<?php\n/**\n * Smarty plugin\n *\n * @package    Smarty\n * @subpackage PluginsModifier\n */\n\n/**\n * Smarty date_format modifi"
  },
  {
    "path": "Tool/smarty-3.1.32/libs/plugins/modifier.debug_print_var.php",
    "chars": 3955,
    "preview": "<?php\n/**\n * Smarty plugin\n *\n * @package    Smarty\n * @subpackage Debug\n */\n\n/**\n * Smarty debug_print_var modifier plu"
  },
  {
    "path": "Tool/smarty-3.1.32/libs/plugins/modifier.escape.php",
    "chars": 8992,
    "preview": "<?php\n/**\n * Smarty plugin\n *\n * @package    Smarty\n * @subpackage PluginsModifier\n */\n\n/**\n * Smarty escape modifier pl"
  },
  {
    "path": "Tool/smarty-3.1.32/libs/plugins/modifier.mb_wordwrap.php",
    "chars": 2373,
    "preview": "<?php\n/**\n * Smarty plugin\n *\n * @package    Smarty\n * @subpackage PluginsModifier\n */\n/**\n * Smarty wordwrap modifier p"
  },
  {
    "path": "Tool/smarty-3.1.32/libs/plugins/modifier.regex_replace.php",
    "chars": 1664,
    "preview": "<?php\n/**\n * Smarty plugin\n *\n * @package    Smarty\n * @subpackage PluginsModifier\n */\n\n/**\n * Smarty regex_replace modi"
  },
  {
    "path": "Tool/smarty-3.1.32/libs/plugins/modifier.replace.php",
    "chars": 1003,
    "preview": "<?php\n/**\n * Smarty plugin\n *\n * @package    Smarty\n * @subpackage PluginsModifier\n */\n\n/**\n * Smarty replace modifier p"
  },
  {
    "path": "Tool/smarty-3.1.32/libs/plugins/modifier.spacify.php",
    "chars": 756,
    "preview": "<?php\n/**\n * Smarty plugin\n *\n * @package    Smarty\n * @subpackage PluginsModifier\n */\n\n/**\n * Smarty spacify modifier p"
  },
  {
    "path": "Tool/smarty-3.1.32/libs/plugins/modifier.truncate.php",
    "chars": 2201,
    "preview": "<?php\n/**\n * Smarty plugin\n *\n * @package    Smarty\n * @subpackage PluginsModifier\n */\n\n/**\n * Smarty truncate modifier "
  },
  {
    "path": "Tool/smarty-3.1.32/libs/plugins/modifiercompiler.cat.php",
    "chars": 617,
    "preview": "<?php\n/**\n * Smarty plugin\n *\n * @package    Smarty\n * @subpackage PluginsModifierCompiler\n */\n\n/**\n * Smarty cat modifi"
  },
  {
    "path": "Tool/smarty-3.1.32/libs/plugins/modifiercompiler.count_characters.php",
    "chars": 908,
    "preview": "<?php\n/**\n * Smarty plugin\n *\n * @package    Smarty\n * @subpackage PluginsModifierCompiler\n */\n\n/**\n * Smarty count_char"
  },
  {
    "path": "Tool/smarty-3.1.32/libs/plugins/modifiercompiler.count_paragraphs.php",
    "chars": 662,
    "preview": "<?php\n/**\n * Smarty plugin\n *\n * @package    Smarty\n * @subpackage PluginsModifierCompiler\n */\n\n/**\n * Smarty count_para"
  },
  {
    "path": "Tool/smarty-3.1.32/libs/plugins/modifiercompiler.count_sentences.php",
    "chars": 748,
    "preview": "<?php\n/**\n * Smarty plugin\n *\n * @package    Smarty\n * @subpackage PluginsModifierCompiler\n */\n\n/**\n * Smarty count_sent"
  },
  {
    "path": "Tool/smarty-3.1.32/libs/plugins/modifiercompiler.count_words.php",
    "chars": 980,
    "preview": "<?php\n/**\n * Smarty plugin\n *\n * @package    Smarty\n * @subpackage PluginsModifierCompiler\n */\n\n/**\n * Smarty count_word"
  },
  {
    "path": "Tool/smarty-3.1.32/libs/plugins/modifiercompiler.default.php",
    "chars": 773,
    "preview": "<?php\n/**\n * Smarty plugin\n *\n * @package    Smarty\n * @subpackage PluginsModifierCompiler\n */\n\n/**\n * Smarty default mo"
  },
  {
    "path": "Tool/smarty-3.1.32/libs/plugins/modifiercompiler.escape.php",
    "chars": 5026,
    "preview": "<?php\n/**\n * Smarty plugin\n *\n * @package    Smarty\n * @subpackage PluginsModifierCompiler\n */\n/**\n * Smarty escape modi"
  },
  {
    "path": "Tool/smarty-3.1.32/libs/plugins/modifiercompiler.from_charset.php",
    "chars": 755,
    "preview": "<?php\n/**\n * Smarty plugin\n *\n * @package    Smarty\n * @subpackage PluginsModifierCompiler\n */\n\n/**\n * Smarty from_chars"
  },
  {
    "path": "Tool/smarty-3.1.32/libs/plugins/modifiercompiler.indent.php",
    "chars": 715,
    "preview": "<?php\n/**\n * Smarty plugin\n *\n * @package    Smarty\n * @subpackage PluginsModifierCompiler\n */\n\n/**\n * Smarty indent mod"
  },
  {
    "path": "Tool/smarty-3.1.32/libs/plugins/modifiercompiler.lower.php",
    "chars": 726,
    "preview": "<?php\n/**\n * Smarty plugin\n *\n * @package    Smarty\n * @subpackage PluginsModifierCompiler\n */\n\n/**\n * Smarty lower modi"
  },
  {
    "path": "Tool/smarty-3.1.32/libs/plugins/modifiercompiler.noprint.php",
    "chars": 343,
    "preview": "<?php\n/**\n * Smarty plugin\n *\n * @package    Smarty\n * @subpackage PluginsModifierCompiler\n */\n\n/**\n * Smarty noprint mo"
  },
  {
    "path": "Tool/smarty-3.1.32/libs/plugins/modifiercompiler.string_format.php",
    "chars": 575,
    "preview": "<?php\n/**\n * Smarty plugin\n *\n * @package    Smarty\n * @subpackage PluginsModifierCompiler\n */\n\n/**\n * Smarty string_for"
  },
  {
    "path": "Tool/smarty-3.1.32/libs/plugins/modifiercompiler.strip.php",
    "chars": 801,
    "preview": "<?php\n/**\n * Smarty plugin\n *\n * @package    Smarty\n * @subpackage PluginsModifierCompiler\n */\n\n/**\n * Smarty strip modi"
  },
  {
    "path": "Tool/smarty-3.1.32/libs/plugins/modifiercompiler.strip_tags.php",
    "chars": 721,
    "preview": "<?php\n/**\n * Smarty plugin\n *\n * @package    Smarty\n * @subpackage PluginsModifierCompiler\n */\n\n/**\n * Smarty strip_tags"
  },
  {
    "path": "Tool/smarty-3.1.32/libs/plugins/modifiercompiler.to_charset.php",
    "chars": 749,
    "preview": "<?php\n/**\n * Smarty plugin\n *\n * @package    Smarty\n * @subpackage PluginsModifierCompiler\n */\n\n/**\n * Smarty to_charset"
  },
  {
    "path": "Tool/smarty-3.1.32/libs/plugins/modifiercompiler.unescape.php",
    "chars": 1196,
    "preview": "<?php\n/**\n * Smarty plugin\n *\n * @package    Smarty\n * @subpackage PluginsModifierCompiler\n */\n\n/**\n * Smarty unescape m"
  },
  {
    "path": "Tool/smarty-3.1.32/libs/plugins/modifiercompiler.upper.php",
    "chars": 679,
    "preview": "<?php\n/**\n * Smarty plugin\n *\n * @package    Smarty\n * @subpackage PluginsModifierCompiler\n */\n\n/**\n * Smarty upper modi"
  },
  {
    "path": "Tool/smarty-3.1.32/libs/plugins/modifiercompiler.wordwrap.php",
    "chars": 1111,
    "preview": "<?php\n/**\n * Smarty plugin\n *\n * @package    Smarty\n * @subpackage PluginsModifierCompiler\n */\n/**\n * Smarty wordwrap mo"
  },
  {
    "path": "Tool/smarty-3.1.32/libs/plugins/outputfilter.trimwhitespace.php",
    "chars": 3567,
    "preview": "<?php\n/**\n * Smarty plugin\n *\n * @package    Smarty\n * @subpackage PluginsFilter\n */\n\n/**\n * Smarty trimwhitespace outpu"
  },
  {
    "path": "Tool/smarty-3.1.32/libs/plugins/shared.escape_special_chars.php",
    "chars": 982,
    "preview": "<?php\n/**\n * Smarty shared plugin\n *\n * @package    Smarty\n * @subpackage PluginsShared\n */\n\n/**\n * escape_special_chars"
  },
  {
    "path": "Tool/smarty-3.1.32/libs/plugins/shared.literal_compiler_param.php",
    "chars": 1048,
    "preview": "<?php\n/**\n * Smarty plugin\n *\n * @package    Smarty\n * @subpackage PluginsShared\n */\n\n/**\n * evaluate compiler parameter"
  },
  {
    "path": "Tool/smarty-3.1.32/libs/plugins/shared.make_timestamp.php",
    "chars": 1430,
    "preview": "<?php\n/**\n * Smarty shared plugin\n *\n * @package    Smarty\n * @subpackage PluginsShared\n */\n\n/**\n * Function: smarty_mak"
  },
  {
    "path": "Tool/smarty-3.1.32/libs/plugins/shared.mb_str_replace.php",
    "chars": 1795,
    "preview": "<?php\n/**\n * Smarty shared plugin\n *\n * @package    Smarty\n * @subpackage PluginsShared\n */\nif (!function_exists('smarty"
  },
  {
    "path": "Tool/smarty-3.1.32/libs/plugins/shared.mb_unicode.php",
    "chars": 1534,
    "preview": "<?php\n/**\n * Smarty shared plugin\n *\n * @package    Smarty\n * @subpackage PluginsShared\n */\n\n/**\n * convert characters t"
  },
  {
    "path": "Tool/smarty-3.1.32/libs/plugins/variablefilter.htmlspecialchars.php",
    "chars": 451,
    "preview": "<?php\n/**\n * Smarty plugin\n *\n * @package    Smarty\n * @subpackage PluginsFilter\n */\n/**\n * Smarty htmlspecialchars vari"
  },
  {
    "path": "Tool/smarty-3.1.32/libs/sysplugins/smarty_cacheresource.php",
    "chars": 6648,
    "preview": "<?php\n/**\n * Smarty Internal Plugin\n *\n * @package    Smarty\n * @subpackage Cacher\n */\n\n/**\n * Cache Handler API\n *\n * @"
  },
  {
    "path": "Tool/smarty-3.1.32/libs/sysplugins/smarty_cacheresource_custom.php",
    "chars": 9667,
    "preview": "<?php\n/**\n * Smarty Internal Plugin\n *\n * @package    Smarty\n * @subpackage Cacher\n */\n\n/**\n * Cache Handler API\n *\n * @"
  },
  {
    "path": "Tool/smarty-3.1.32/libs/sysplugins/smarty_cacheresource_keyvaluestore.php",
    "chars": 17417,
    "preview": "<?php\n/**\n * Smarty Internal Plugin\n *\n * @package    Smarty\n * @subpackage Cacher\n */\n\n/**\n * Smarty Cache Handler Base"
  },
  {
    "path": "Tool/smarty-3.1.32/libs/sysplugins/smarty_data.php",
    "chars": 1690,
    "preview": "<?php\n/**\n * Smarty Plugin Data\n * This file contains the data object\n *\n * @package    Smarty\n * @subpackage Template\n "
  },
  {
    "path": "Tool/smarty-3.1.32/libs/sysplugins/smarty_internal_block.php",
    "chars": 1626,
    "preview": "<?php\n\n/**\n * Smarty {block} tag class\n *\n * @package    Smarty\n * @subpackage PluginsInternal\n * @author     Uwe Tews\n "
  },
  {
    "path": "Tool/smarty-3.1.32/libs/sysplugins/smarty_internal_cacheresource_file.php",
    "chars": 8097,
    "preview": "<?php\n/**\n * Smarty Internal Plugin CacheResource File\n *\n * @package    Smarty\n * @subpackage Cacher\n * @author     Uwe"
  },
  {
    "path": "Tool/smarty-3.1.32/libs/sysplugins/smarty_internal_compile_append.php",
    "chars": 1791,
    "preview": "<?php\n/**\n * Smarty Internal Plugin Compile Append\n * Compiles the {append} tag\n *\n * @package    Smarty\n * @subpackage "
  },
  {
    "path": "Tool/smarty-3.1.32/libs/sysplugins/smarty_internal_compile_assign.php",
    "chars": 3443,
    "preview": "<?php\n/**\n * Smarty Internal Plugin Compile Assign\n * Compiles the {assign} tag\n *\n * @package    Smarty\n * @subpackage "
  },
  {
    "path": "Tool/smarty-3.1.32/libs/sysplugins/smarty_internal_compile_block.php",
    "chars": 7836,
    "preview": "<?php\n/*\n * This file is part of Smarty.\n *\n * (c) 2015 Uwe Tews\n *\n * For the full copyright and license information, p"
  },
  {
    "path": "Tool/smarty-3.1.32/libs/sysplugins/smarty_internal_compile_block_child.php",
    "chars": 483,
    "preview": "<?php\n/*\n * This file is part of Smarty.\n *\n * (c) 2015 Uwe Tews\n *\n * For the full copyright and license information, p"
  },
  {
    "path": "Tool/smarty-3.1.32/libs/sysplugins/smarty_internal_compile_block_parent.php",
    "chars": 581,
    "preview": "<?php\n/*\n * This file is part of Smarty.\n *\n * (c) 2015 Uwe Tews\n *\n * For the full copyright and license information, p"
  },
  {
    "path": "Tool/smarty-3.1.32/libs/sysplugins/smarty_internal_compile_break.php",
    "chars": 3856,
    "preview": "<?php\n/**\n * Smarty Internal Plugin Compile Break\n * Compiles the {break} tag\n *\n * @package    Smarty\n * @subpackage Co"
  },
  {
    "path": "Tool/smarty-3.1.32/libs/sysplugins/smarty_internal_compile_call.php",
    "chars": 2872,
    "preview": "<?php\n/**\n * Smarty Internal Plugin Compile Function_Call\n * Compiles the calls of user defined tags defined by {functio"
  },
  {
    "path": "Tool/smarty-3.1.32/libs/sysplugins/smarty_internal_compile_capture.php",
    "chars": 3862,
    "preview": "<?php\n/**\n * Smarty Internal Plugin Compile Capture\n * Compiles the {capture} tag\n *\n * @package    Smarty\n * @subpackag"
  },
  {
    "path": "Tool/smarty-3.1.32/libs/sysplugins/smarty_internal_compile_child.php",
    "chars": 2465,
    "preview": "<?php\n/*\n * This file is part of Smarty.\n *\n * (c) 2015 Uwe Tews\n *\n * For the full copyright and license information, p"
  },
  {
    "path": "Tool/smarty-3.1.32/libs/sysplugins/smarty_internal_compile_config_load.php",
    "chars": 2767,
    "preview": "<?php\n/**\n * Smarty Internal Plugin Compile Config Load\n * Compiles the {config load} tag\n *\n * @package    Smarty\n * @s"
  },
  {
    "path": "Tool/smarty-3.1.32/libs/sysplugins/smarty_internal_compile_continue.php",
    "chars": 433,
    "preview": "<?php\n/**\n * Smarty Internal Plugin Compile Continue\n * Compiles the {continue} tag\n *\n * @package    Smarty\n * @subpack"
  },
  {
    "path": "Tool/smarty-3.1.32/libs/sysplugins/smarty_internal_compile_debug.php",
    "chars": 1087,
    "preview": "<?php\n/**\n * Smarty Internal Plugin Compile Debug\n * Compiles the {debug} tag.\n * It opens a window the the Smarty Debug"
  },
  {
    "path": "Tool/smarty-3.1.32/libs/sysplugins/smarty_internal_compile_eval.php",
    "chars": 1883,
    "preview": "<?php\n/**\n * Smarty Internal Plugin Compile Eval\n * Compiles the {eval} tag.\n *\n * @package    Smarty\n * @subpackage Com"
  },
  {
    "path": "Tool/smarty-3.1.32/libs/sysplugins/smarty_internal_compile_extends.php",
    "chars": 5821,
    "preview": "<?php\n\n/**\n * Smarty Internal Plugin Compile extend\n * Compiles the {extends} tag\n *\n * @package    Smarty\n * @subpackag"
  },
  {
    "path": "Tool/smarty-3.1.32/libs/sysplugins/smarty_internal_compile_for.php",
    "chars": 6723,
    "preview": "<?php\n/**\n * Smarty Internal Plugin Compile For\n * Compiles the {for} {forelse} {/for} tags\n *\n * @package    Smarty\n * "
  },
  {
    "path": "Tool/smarty-3.1.32/libs/sysplugins/smarty_internal_compile_foreach.php",
    "chars": 11637,
    "preview": "<?php\n/**\n * Smarty Internal Plugin Compile Foreach\n * Compiles the {foreach} {foreachelse} {/foreach} tags\n *\n * @packa"
  },
  {
    "path": "Tool/smarty-3.1.32/libs/sysplugins/smarty_internal_compile_function.php",
    "chars": 10037,
    "preview": "<?php\n/**\n * Smarty Internal Plugin Compile Function\n * Compiles the {function} {/function} tags\n *\n * @package    Smart"
  },
  {
    "path": "Tool/smarty-3.1.32/libs/sysplugins/smarty_internal_compile_if.php",
    "chars": 8259,
    "preview": "<?php\n/**\n * Smarty Internal Plugin Compile If\n * Compiles the {if} {else} {elseif} {/if} tags\n *\n * @package    Smarty\n"
  },
  {
    "path": "Tool/smarty-3.1.32/libs/sysplugins/smarty_internal_compile_include.php",
    "chars": 15085,
    "preview": "<?php\n/**\n * Smarty Internal Plugin Compile Include\n * Compiles the {include} tag\n *\n * @package    Smarty\n * @subpackag"
  },
  {
    "path": "Tool/smarty-3.1.32/libs/sysplugins/smarty_internal_compile_include_php.php",
    "chars": 3531,
    "preview": "<?php\n/**\n * Smarty Internal Plugin Compile Include PHP\n * Compiles the {include_php} tag\n *\n * @package    Smarty\n * @s"
  },
  {
    "path": "Tool/smarty-3.1.32/libs/sysplugins/smarty_internal_compile_insert.php",
    "chars": 5994,
    "preview": "<?php\n/**\n * Smarty Internal Plugin Compile Insert\n * Compiles the {insert} tag\n *\n * @package    Smarty\n * @subpackage "
  },
  {
    "path": "Tool/smarty-3.1.32/libs/sysplugins/smarty_internal_compile_ldelim.php",
    "chars": 1052,
    "preview": "<?php\n/**\n * Smarty Internal Plugin Compile Ldelim\n * Compiles the {ldelim} tag\n *\n * @package    Smarty\n * @subpackage "
  },
  {
    "path": "Tool/smarty-3.1.32/libs/sysplugins/smarty_internal_compile_make_nocache.php",
    "chars": 1667,
    "preview": "<?php\n/**\n * Smarty Internal Plugin Compile Make_Nocache\n * Compiles the {make_nocache} tag\n *\n * @package    Smarty\n * "
  },
  {
    "path": "Tool/smarty-3.1.32/libs/sysplugins/smarty_internal_compile_nocache.php",
    "chars": 2140,
    "preview": "<?php\n/**\n * Smarty Internal Plugin Compile Nocache\n * Compiles the {nocache} {/nocache} tags.\n *\n * @package    Smarty\n"
  },
  {
    "path": "Tool/smarty-3.1.32/libs/sysplugins/smarty_internal_compile_parent.php",
    "chars": 564,
    "preview": "<?php\n/*\n * This file is part of Smarty.\n *\n * (c) 2015 Uwe Tews\n *\n * For the full copyright and license information, p"
  },
  {
    "path": "Tool/smarty-3.1.32/libs/sysplugins/smarty_internal_compile_private_block_plugin.php",
    "chars": 5015,
    "preview": "<?php\n/**\n * Smarty Internal Plugin Compile Block Plugin\n * Compiles code for the execution of block plugin\n *\n * @packa"
  },
  {
    "path": "Tool/smarty-3.1.32/libs/sysplugins/smarty_internal_compile_private_foreachsection.php",
    "chars": 7073,
    "preview": "<?php\n/**\n * Smarty Internal Plugin Compile ForeachSection\n * Shared methods for {foreach} {section} tags\n *\n * @package"
  },
  {
    "path": "Tool/smarty-3.1.32/libs/sysplugins/smarty_internal_compile_private_function_plugin.php",
    "chars": 2495,
    "preview": "<?php\n/**\n * Smarty Internal Plugin Compile Function Plugin\n * Compiles code for the execution of function plugin\n *\n * "
  },
  {
    "path": "Tool/smarty-3.1.32/libs/sysplugins/smarty_internal_compile_private_modifier.php",
    "chars": 7761,
    "preview": "<?php\n\n/**\n * Smarty Internal Plugin Compile Modifier\n * Compiles code for modifier execution\n *\n * @package    Smarty\n "
  },
  {
    "path": "Tool/smarty-3.1.32/libs/sysplugins/smarty_internal_compile_private_object_block_function.php",
    "chars": 1356,
    "preview": "<?php\n/**\n * Smarty Internal Plugin Compile Object Block Function\n * Compiles code for registered objects as block funct"
  },
  {
    "path": "Tool/smarty-3.1.32/libs/sysplugins/smarty_internal_compile_private_object_function.php",
    "chars": 3182,
    "preview": "<?php\n/**\n * Smarty Internal Plugin Compile Object Function\n * Compiles code for registered objects as function\n *\n * @p"
  },
  {
    "path": "Tool/smarty-3.1.32/libs/sysplugins/smarty_internal_compile_private_php.php",
    "chars": 9628,
    "preview": "<?php\n/**\n * Smarty Internal Plugin Compile PHP Expression\n * Compiles any tag which will output an expression or variab"
  },
  {
    "path": "Tool/smarty-3.1.32/libs/sysplugins/smarty_internal_compile_private_print_expression.php",
    "chars": 6463,
    "preview": "<?php\n/**\n * Smarty Internal Plugin Compile Print Expression\n * Compiles any tag which will output an expression or vari"
  },
  {
    "path": "Tool/smarty-3.1.32/libs/sysplugins/smarty_internal_compile_private_registered_block.php",
    "chars": 2981,
    "preview": "<?php\n/**\n * Smarty Internal Plugin Compile Registered Block\n * Compiles code for the execution of a registered block fu"
  },
  {
    "path": "Tool/smarty-3.1.32/libs/sysplugins/smarty_internal_compile_private_registered_function.php",
    "chars": 3406,
    "preview": "<?php\n/**\n * Smarty Internal Plugin Compile Registered Function\n * Compiles code for the execution of a registered funct"
  },
  {
    "path": "Tool/smarty-3.1.32/libs/sysplugins/smarty_internal_compile_private_special_variable.php",
    "chars": 5409,
    "preview": "<?php\n/**\n * Smarty Internal Plugin Compile Special Smarty Variable\n * Compiles the special $smarty variables\n *\n * @pac"
  },
  {
    "path": "Tool/smarty-3.1.32/libs/sysplugins/smarty_internal_compile_rdelim.php",
    "chars": 901,
    "preview": "<?php\n/**\n * Smarty Internal Plugin Compile Rdelim\n * Compiles the {rdelim} tag\n *\n * @package    Smarty\n * @subpackage "
  },
  {
    "path": "Tool/smarty-3.1.32/libs/sysplugins/smarty_internal_compile_section.php",
    "chars": 18067,
    "preview": "<?php\n/**\n * Smarty Internal Plugin Compile Section\n * Compiles the {section} {sectionelse} {/section} tags\n *\n * @packa"
  },
  {
    "path": "Tool/smarty-3.1.32/libs/sysplugins/smarty_internal_compile_setfilter.php",
    "chars": 2184,
    "preview": "<?php\n/**\n * Smarty Internal Plugin Compile Setfilter\n * Compiles code for setfilter tag\n *\n * @package    Smarty\n * @su"
  },
  {
    "path": "Tool/smarty-3.1.32/libs/sysplugins/smarty_internal_compile_shared_inheritance.php",
    "chars": 1861,
    "preview": "<?php\n/**\n * Smarty Internal Plugin Compile Shared Inheritance\n * Shared methods for {extends} and {block} tags\n *\n * @p"
  },
  {
    "path": "Tool/smarty-3.1.32/libs/sysplugins/smarty_internal_compile_while.php",
    "chars": 3802,
    "preview": "<?php\n/**\n * Smarty Internal Plugin Compile While\n * Compiles the {while} tag\n *\n * @package    Smarty\n * @subpackage Co"
  },
  {
    "path": "Tool/smarty-3.1.32/libs/sysplugins/smarty_internal_compilebase.php",
    "chars": 6861,
    "preview": "<?php\n/**\n * Smarty Internal Plugin CompileBase\n *\n * @package    Smarty\n * @subpackage Compiler\n * @author     Uwe Tews"
  },
  {
    "path": "Tool/smarty-3.1.32/libs/sysplugins/smarty_internal_config_file_compiler.php",
    "chars": 6480,
    "preview": "<?php\n/**\n * Smarty Internal Plugin Config File Compiler\n * This is the config file compiler class. It calls the lexer a"
  },
  {
    "path": "Tool/smarty-3.1.32/libs/sysplugins/smarty_internal_configfilelexer.php",
    "chars": 24590,
    "preview": "<?php\n/**\n * Smarty Internal Plugin Configfilelexer\n *\n * This is the lexer to break the config file source into tokens\n"
  },
  {
    "path": "Tool/smarty-3.1.32/libs/sysplugins/smarty_internal_configfileparser.php",
    "chars": 34348,
    "preview": "<?php\n\nclass TPC_yyStackEntry\n{\n    public $stateno;       /* The state-number */\n    public $major;         /* The majo"
  },
  {
    "path": "Tool/smarty-3.1.32/libs/sysplugins/smarty_internal_data.php",
    "chars": 9155,
    "preview": "<?php\n/**\n * Smarty Internal Plugin Data\n * This file contains the basic classes and methods for template and variable c"
  },
  {
    "path": "Tool/smarty-3.1.32/libs/sysplugins/smarty_internal_debug.php",
    "chars": 15359,
    "preview": "<?php\n/**\n * Smarty Internal Plugin Debug\n * Class to collect data for the Smarty Debugging Console\n *\n * @package    Sm"
  },
  {
    "path": "Tool/smarty-3.1.32/libs/sysplugins/smarty_internal_errorhandler.php",
    "chars": 4406,
    "preview": "<?php\n\n/**\n * Smarty error handler\n *\n *\n * @package    Smarty\n * @subpackage PluginsInternal\n * @author     Uwe Tews\n *"
  },
  {
    "path": "Tool/smarty-3.1.32/libs/sysplugins/smarty_internal_extension_handler.php",
    "chars": 8418,
    "preview": "<?php\n\n/**\n * Smarty Extension handler\n *\n * Load extensions dynamically\n *\n *\n * @package    Smarty\n * @subpackage Plug"
  },
  {
    "path": "Tool/smarty-3.1.32/libs/sysplugins/smarty_internal_method_addautoloadfilters.php",
    "chars": 2137,
    "preview": "<?php\n\n/**\n * Smarty Method AddAutoloadFilters\n *\n * Smarty::addAutoloadFilters() method\n *\n * @package    Smarty\n * @su"
  },
  {
    "path": "Tool/smarty-3.1.32/libs/sysplugins/smarty_internal_method_adddefaultmodifiers.php",
    "chars": 1163,
    "preview": "<?php\n\n/**\n * Smarty Method AddDefaultModifiers\n *\n * Smarty::addDefaultModifiers() method\n *\n * @package    Smarty\n * @"
  },
  {
    "path": "Tool/smarty-3.1.32/libs/sysplugins/smarty_internal_method_append.php",
    "chars": 2866,
    "preview": "<?php\n\n/**\n * Smarty Method Append\n *\n * Smarty::append() method\n *\n * @package    Smarty\n * @subpackage PluginsInternal"
  },
  {
    "path": "Tool/smarty-3.1.32/libs/sysplugins/smarty_internal_method_appendbyref.php",
    "chars": 1801,
    "preview": "<?php\n\n/**\n * Smarty Method AppendByRef\n *\n * Smarty::appendByRef() method\n *\n * @package    Smarty\n * @subpackage Plugi"
  },
  {
    "path": "Tool/smarty-3.1.32/libs/sysplugins/smarty_internal_method_assignbyref.php",
    "chars": 1197,
    "preview": "<?php\n\n/**\n * Smarty Method AssignByRef\n *\n * Smarty::assignByRef() method\n *\n * @package    Smarty\n * @subpackage Plugi"
  },
  {
    "path": "Tool/smarty-3.1.32/libs/sysplugins/smarty_internal_method_assignglobal.php",
    "chars": 1328,
    "preview": "<?php\n\n/**\n * Smarty Method AssignGlobal\n *\n * Smarty::assignGlobal() method\n *\n * @package    Smarty\n * @subpackage Plu"
  },
  {
    "path": "Tool/smarty-3.1.32/libs/sysplugins/smarty_internal_method_clearallassign.php",
    "chars": 778,
    "preview": "<?php\n\n/**\n * Smarty Method ClearAllAssign\n *\n * Smarty::clearAllAssign() method\n *\n * @package    Smarty\n * @subpackage"
  },
  {
    "path": "Tool/smarty-3.1.32/libs/sysplugins/smarty_internal_method_clearallcache.php",
    "chars": 996,
    "preview": "<?php\n\n/**\n * Smarty Method ClearAllCache\n *\n * Smarty::clearAllCache() method\n *\n * @package    Smarty\n * @subpackage P"
  },
  {
    "path": "Tool/smarty-3.1.32/libs/sysplugins/smarty_internal_method_clearassign.php",
    "chars": 1073,
    "preview": "<?php\n\n/**\n * Smarty Method ClearAssign\n *\n * Smarty::clearAssign() method\n *\n * @package    Smarty\n * @subpackage Plugi"
  },
  {
    "path": "Tool/smarty-3.1.32/libs/sysplugins/smarty_internal_method_clearcache.php",
    "chars": 1271,
    "preview": "<?php\n\n/**\n * Smarty Method ClearCache\n *\n * Smarty::clearCache() method\n *\n * @package    Smarty\n * @subpackage Plugins"
  },
  {
    "path": "Tool/smarty-3.1.32/libs/sysplugins/smarty_internal_method_clearcompiledtemplate.php",
    "chars": 5433,
    "preview": "<?php\n\n/**\n * Smarty Method ClearCompiledTemplate\n *\n * Smarty::clearCompiledTemplate() method\n *\n * @package    Smarty\n"
  },
  {
    "path": "Tool/smarty-3.1.32/libs/sysplugins/smarty_internal_method_clearconfig.php",
    "chars": 976,
    "preview": "<?php\n\n/**\n * Smarty Method ClearConfig\n *\n * Smarty::clearConfig() method\n *\n * @package    Smarty\n * @subpackage Plugi"
  },
  {
    "path": "Tool/smarty-3.1.32/libs/sysplugins/smarty_internal_method_compileallconfig.php",
    "chars": 960,
    "preview": "<?php\n\n/**\n * Smarty Method CompileAllConfig\n *\n * Smarty::compileAllConfig() method\n *\n * @package    Smarty\n * @subpac"
  },
  {
    "path": "Tool/smarty-3.1.32/libs/sysplugins/smarty_internal_method_compilealltemplates.php",
    "chars": 4850,
    "preview": "<?php\n/**\n * Smarty Method CompileAllTemplates\n *\n * Smarty::compileAllTemplates() method\n *\n * @package    Smarty\n * @s"
  },
  {
    "path": "Tool/smarty-3.1.32/libs/sysplugins/smarty_internal_method_configload.php",
    "chars": 7381,
    "preview": "<?php\n\n/**\n * Smarty Method ConfigLoad\n *\n * Smarty::configLoad() method\n *\n * @package    Smarty\n * @subpackage Plugins"
  },
  {
    "path": "Tool/smarty-3.1.32/libs/sysplugins/smarty_internal_method_createdata.php",
    "chars": 1329,
    "preview": "<?php\n\n/**\n * Smarty Method CreateData\n *\n * Smarty::createData() method\n *\n * @package    Smarty\n * @subpackage Plugins"
  },
  {
    "path": "Tool/smarty-3.1.32/libs/sysplugins/smarty_internal_method_getautoloadfilters.php",
    "chars": 1348,
    "preview": "<?php\n\n/**\n * Smarty Method GetAutoloadFilters\n *\n * Smarty::getAutoloadFilters() method\n *\n * @package    Smarty\n * @su"
  },
  {
    "path": "Tool/smarty-3.1.32/libs/sysplugins/smarty_internal_method_getconfigvariable.php",
    "chars": 918,
    "preview": "<?php\n\n/**\n * Smarty Method GetConfigVariable\n *\n * Smarty::getConfigVariable() method\n *\n * @package    Smarty\n * @subp"
  },
  {
    "path": "Tool/smarty-3.1.32/libs/sysplugins/smarty_internal_method_getconfigvars.php",
    "chars": 1632,
    "preview": "<?php\n\n/**\n * Smarty Method GetConfigVars\n *\n * Smarty::getConfigVars() method\n *\n * @package    Smarty\n * @subpackage P"
  },
  {
    "path": "Tool/smarty-3.1.32/libs/sysplugins/smarty_internal_method_getdebugtemplate.php",
    "chars": 708,
    "preview": "<?php\n\n/**\n * Smarty Method GetDebugTemplate\n *\n * Smarty::getDebugTemplate() method\n *\n * @package    Smarty\n * @subpac"
  },
  {
    "path": "Tool/smarty-3.1.32/libs/sysplugins/smarty_internal_method_getdefaultmodifiers.php",
    "chars": 744,
    "preview": "<?php\n\n/**\n * Smarty Method GetDefaultModifiers\n *\n * Smarty::getDefaultModifiers() method\n *\n * @package    Smarty\n * @"
  },
  {
    "path": "Tool/smarty-3.1.32/libs/sysplugins/smarty_internal_method_getglobal.php",
    "chars": 1111,
    "preview": "<?php\n\n/**\n * Smarty Method GetGlobal\n *\n * Smarty::getGlobal() method\n *\n * @package    Smarty\n * @subpackage PluginsIn"
  },
  {
    "path": "Tool/smarty-3.1.32/libs/sysplugins/smarty_internal_method_getregisteredobject.php",
    "chars": 1343,
    "preview": "<?php\n\n/**\n * Smarty Method GetRegisteredObject\n *\n * Smarty::getRegisteredObject() method\n *\n * @package    Smarty\n * @"
  },
  {
    "path": "Tool/smarty-3.1.32/libs/sysplugins/smarty_internal_method_getstreamvariable.php",
    "chars": 1269,
    "preview": "<?php\n\n/**\n * Smarty Method GetStreamVariable\n *\n * Smarty::getStreamVariable() method\n *\n * @package    Smarty\n * @subp"
  },
  {
    "path": "Tool/smarty-3.1.32/libs/sysplugins/smarty_internal_method_gettags.php",
    "chars": 2071,
    "preview": "<?php\n\n/**\n * Smarty Method GetTags\n *\n * Smarty::getTags() method\n *\n * @package    Smarty\n * @subpackage PluginsIntern"
  },
  {
    "path": "Tool/smarty-3.1.32/libs/sysplugins/smarty_internal_method_gettemplatevars.php",
    "chars": 4014,
    "preview": "<?php\n\n/**\n * Smarty Method GetTemplateVars\n *\n * Smarty::getTemplateVars() method\n *\n * @package    Smarty\n * @subpacka"
  },
  {
    "path": "Tool/smarty-3.1.32/libs/sysplugins/smarty_internal_method_literals.php",
    "chars": 3032,
    "preview": "<?php\n\n/**\n * Smarty Method GetLiterals\n *\n * Smarty::getLiterals() method\n *\n * @package    Smarty\n * @subpackage Plugi"
  },
  {
    "path": "Tool/smarty-3.1.32/libs/sysplugins/smarty_internal_method_loadfilter.php",
    "chars": 2171,
    "preview": "<?php\n\n/**\n * Smarty Method LoadFilter\n *\n * Smarty::loadFilter() method\n *\n * @package    Smarty\n * @subpackage Plugins"
  },
  {
    "path": "Tool/smarty-3.1.32/libs/sysplugins/smarty_internal_method_loadplugin.php",
    "chars": 4248,
    "preview": "<?php\n\n/**\n * Smarty Extension Loadplugin\n *\n * $smarty->loadPlugin() method\n *\n * @package    Smarty\n * @subpackage Plu"
  },
  {
    "path": "Tool/smarty-3.1.32/libs/sysplugins/smarty_internal_method_mustcompile.php",
    "chars": 1769,
    "preview": "<?php\n\n/**\n * Smarty Method MustCompile\n *\n * Smarty_Internal_Template::mustCompile() method\n *\n * @package    Smarty\n *"
  },
  {
    "path": "Tool/smarty-3.1.32/libs/sysplugins/smarty_internal_method_registercacheresource.php",
    "chars": 1193,
    "preview": "<?php\n\n/**\n * Smarty Method RegisterCacheResource\n *\n * Smarty::registerCacheResource() method\n *\n * @package    Smarty\n"
  },
  {
    "path": "Tool/smarty-3.1.32/libs/sysplugins/smarty_internal_method_registerclass.php",
    "chars": 1426,
    "preview": "<?php\n\n/**\n * Smarty Method RegisterClass\n *\n * Smarty::registerClass() method\n *\n * @package    Smarty\n * @subpackage P"
  },
  {
    "path": "Tool/smarty-3.1.32/libs/sysplugins/smarty_internal_method_registerdefaultconfighandler.php",
    "chars": 1175,
    "preview": "<?php\n\n/**\n * Smarty Method RegisterDefaultConfigHandler\n *\n * Smarty::registerDefaultConfigHandler() method\n *\n * @pack"
  },
  {
    "path": "Tool/smarty-3.1.32/libs/sysplugins/smarty_internal_method_registerdefaultpluginhandler.php",
    "chars": 1273,
    "preview": "<?php\n\n/**\n * Smarty Method RegisterDefaultPluginHandler\n *\n * Smarty::registerDefaultPluginHandler() method\n *\n * @pack"
  },
  {
    "path": "Tool/smarty-3.1.32/libs/sysplugins/smarty_internal_method_registerdefaulttemplatehandler.php",
    "chars": 3019,
    "preview": "<?php\n\n/**\n * Smarty Method RegisterDefaultTemplateHandler\n *\n * Smarty::registerDefaultTemplateHandler() method\n *\n * @"
  },
  {
    "path": "Tool/smarty-3.1.32/libs/sysplugins/smarty_internal_method_registerfilter.php",
    "chars": 2498,
    "preview": "<?php\n\n/**\n * Smarty Method RegisterFilter\n *\n * Smarty::registerFilter() method\n *\n * @package    Smarty\n * @subpackage"
  },
  {
    "path": "Tool/smarty-3.1.32/libs/sysplugins/smarty_internal_method_registerobject.php",
    "chars": 3620,
    "preview": "<?php\n\n/**\n * Smarty Method RegisterObject\n *\n * Smarty::registerObject() method\n *\n * @package    Smarty\n * @subpackage"
  },
  {
    "path": "Tool/smarty-3.1.32/libs/sysplugins/smarty_internal_method_registerplugin.php",
    "chars": 2042,
    "preview": "<?php\n\n/**\n * Smarty Method RegisterPlugin\n *\n * Smarty::registerPlugin() method\n *\n * @package    Smarty\n * @subpackage"
  },
  {
    "path": "Tool/smarty-3.1.32/libs/sysplugins/smarty_internal_method_registerresource.php",
    "chars": 1669,
    "preview": "<?php\n\n/**\n * Smarty Method RegisterResource\n *\n * Smarty::registerResource() method\n *\n * @package    Smarty\n * @subpac"
  },
  {
    "path": "Tool/smarty-3.1.32/libs/sysplugins/smarty_internal_method_setautoloadfilters.php",
    "chars": 2191,
    "preview": "<?php\n\n/**\n * Smarty Method SetAutoloadFilters\n *\n * Smarty::setAutoloadFilters() method\n *\n * @package    Smarty\n * @su"
  },
  {
    "path": "Tool/smarty-3.1.32/libs/sysplugins/smarty_internal_method_setdebugtemplate.php",
    "chars": 1022,
    "preview": "<?php\n\n/**\n * Smarty Method SetDebugTemplate\n *\n * Smarty::setDebugTemplate() method\n *\n * @package    Smarty\n * @subpac"
  },
  {
    "path": "Tool/smarty-3.1.32/libs/sysplugins/smarty_internal_method_setdefaultmodifiers.php",
    "chars": 1008,
    "preview": "<?php\n\n/**\n * Smarty Method SetDefaultModifiers\n *\n * Smarty::setDefaultModifiers() method\n *\n * @package    Smarty\n * @"
  },
  {
    "path": "Tool/smarty-3.1.32/libs/sysplugins/smarty_internal_method_unloadfilter.php",
    "chars": 1440,
    "preview": "<?php\n\n/**\n * Smarty Method UnloadFilter\n *\n * Smarty::unloadFilter() method\n *\n * @package    Smarty\n * @subpackage Plu"
  },
  {
    "path": "Tool/smarty-3.1.32/libs/sysplugins/smarty_internal_method_unregistercacheresource.php",
    "chars": 1081,
    "preview": "<?php\n\n/**\n * Smarty Method UnregisterCacheResource\n *\n * Smarty::unregisterCacheResource() method\n *\n * @package    Sma"
  },
  {
    "path": "Tool/smarty-3.1.32/libs/sysplugins/smarty_internal_method_unregisterfilter.php",
    "chars": 1470,
    "preview": "<?php\n\n/**\n * Smarty Method UnregisterFilter\n *\n * Smarty::unregisterFilter() method\n *\n * @package    Smarty\n * @subpac"
  },
  {
    "path": "Tool/smarty-3.1.32/libs/sysplugins/smarty_internal_method_unregisterobject.php",
    "chars": 1058,
    "preview": "<?php\n\n/**\n * Smarty Method UnregisterObject\n *\n * Smarty::unregisterObject() method\n *\n * @package    Smarty\n * @subpac"
  },
  {
    "path": "Tool/smarty-3.1.32/libs/sysplugins/smarty_internal_method_unregisterplugin.php",
    "chars": 1157,
    "preview": "<?php\n\n/**\n * Smarty Method UnregisterPlugin\n *\n * Smarty::unregisterPlugin() method\n *\n * @package    Smarty\n * @subpac"
  },
  {
    "path": "Tool/smarty-3.1.32/libs/sysplugins/smarty_internal_method_unregisterresource.php",
    "chars": 1053,
    "preview": "<?php\n\n/**\n * Smarty Method UnregisterResource\n *\n * Smarty::unregisterResource() method\n *\n * @package    Smarty\n * @su"
  },
  {
    "path": "Tool/smarty-3.1.32/libs/sysplugins/smarty_internal_nocache_insert.php",
    "chars": 1737,
    "preview": "<?php\n/**\n * Smarty Internal Plugin Nocache Insert\n * Compiles the {insert} tag into the cache file\n *\n * @package    Sm"
  },
  {
    "path": "Tool/smarty-3.1.32/libs/sysplugins/smarty_internal_parsetree.php",
    "chars": 911,
    "preview": "<?php\n/**\n * Smarty Internal Plugin Templateparser Parsetree\n * These are classes to build parsetree in the template par"
  },
  {
    "path": "Tool/smarty-3.1.32/libs/sysplugins/smarty_internal_parsetree_code.php",
    "chars": 889,
    "preview": "<?php\n/**\n * Smarty Internal Plugin Templateparser Parse Tree\n * These are classes to build parse trees in the template "
  },
  {
    "path": "Tool/smarty-3.1.32/libs/sysplugins/smarty_internal_parsetree_dq.php",
    "chars": 3279,
    "preview": "<?php\n\n/**\n * Double quoted string inside a tag.\n *\n * @package    Smarty\n * @subpackage Compiler\n * @ignore\n */\n\n/**\n *"
  },
  {
    "path": "Tool/smarty-3.1.32/libs/sysplugins/smarty_internal_parsetree_dqcontent.php",
    "chars": 930,
    "preview": "<?php\n/**\n * Smarty Internal Plugin Templateparser Parse Tree\n * These are classes to build parse tree  in the template "
  }
]

// ... and 47 more files (download for full content)

About this extraction

This page contains the full source code of the horvey/Library-Manager GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 247 files (1.3 MB), approximately 363.1k tokens, and a symbol index with 1241 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!