232 lines
No EOL
7.6 KiB
PHP
232 lines
No EOL
7.6 KiB
PHP
<?php
|
|
require_once 'functions.php';
|
|
class FlipBook_Model {
|
|
private $controller;
|
|
function __construct($controller) {
|
|
$this->controller = $controller;
|
|
}
|
|
|
|
function get_upload_path() {
|
|
$uploads = wp_upload_dir();
|
|
return $uploads['basedir'] . '/flipbook/';
|
|
}
|
|
|
|
function get_upload_url() {
|
|
$uploads = wp_upload_dir();
|
|
return $uploads['baseurl'] . '/flipbook/';
|
|
}
|
|
|
|
function install_book_from_folder($install_folder, $id) {
|
|
// write to db
|
|
$ret = $this->add_book_to_db($install_folder . 'data/', $id);
|
|
if ( is_wp_error($ret) )
|
|
return $ret;
|
|
|
|
// copy to uploads folder
|
|
$upload_folder = $this->get_upload_path();
|
|
if ( !is_dir( $upload_folder ) ){
|
|
if ( 0 == wp_mkdir_p( $upload_folder ) )
|
|
return new WP_Error('filesystem', __("Cannot create folder", "flipbook"));
|
|
}
|
|
|
|
$book_folder = $upload_folder . $ret['id'] . '/';
|
|
if ( is_dir( $book_folder ) )
|
|
flipbook_recurse_rmdir( $book_folder );
|
|
if ( 0 == wp_mkdir_p( $book_folder ) )
|
|
return new WP_Error('filesystem', __("Cannot create folder", "flipbook"));
|
|
flipbook_recurse_copy($install_folder . 'data/', $book_folder);
|
|
/*
|
|
// copy sharedengine to upload folder
|
|
$sharedengine_folder = $upload_folder . 'sharedengine/';
|
|
if ( is_dir( $sharedengine_folder ) )
|
|
flipbook_recurse_rmdir( $sharedengine_folder );
|
|
if ( 0 == wp_mkdir_p( $sharedengine_folder ) )
|
|
return new WP_Error('filesystem', __("Cannot create folder", "flipbook"));
|
|
|
|
flipbook_recurse_copy($install_folder . 'sharedengine/', $sharedengine_folder);
|
|
// modify id of slider
|
|
$file = $slider_folder . 'js/config.js';
|
|
$content = file_get_contents($file);
|
|
$jsfolder = $this->get_upload_url() . $ret['id'] . '/';
|
|
$content = str_replace("%DESTURL%", $jsfolder, $content);
|
|
$content = str_replace("%SLIDERID%", $ret['id'], $content);
|
|
file_put_contents($file, $content);
|
|
|
|
$file1 = $slider_folder . 'js/jquery.hislider.js';
|
|
$content1 = file_get_contents($file1);
|
|
$jsfolder = $this->get_upload_url() . $ret['id'] . '/';
|
|
$content1 = str_replace("%DESTURL%", $jsfolder, $content1);
|
|
$content1 = str_replace("%SLIDERID%", $ret['id'], $content1);
|
|
file_put_contents($file1, $content1);*/
|
|
|
|
return array(
|
|
"id" => $ret['id']);
|
|
}
|
|
|
|
function install_book($zipfile, $id){
|
|
// unzip
|
|
$unzip_folder = trailingslashit ( dirname( $zipfile ) );
|
|
$ret = flipbook_unzip_file($zipfile, $unzip_folder);
|
|
if ( is_wp_error($ret) )
|
|
return $ret;
|
|
unlink( $zipfile );
|
|
$ret = $this->install_book_from_folder( $unzip_folder . "flipbook-plugin/", $id );
|
|
if ( is_wp_error($ret) )
|
|
return $ret;
|
|
// check new version
|
|
$ret["new"] = false;
|
|
$file = $unzip_folder . "flipbook-plugin/" . "flipbook.php";
|
|
$content = file_get_contents($file);
|
|
$pattern = '/define\(\'FLIPBOOK_VERSION\', \'([0-9\.]+)\'\);/';
|
|
if ( preg_match($pattern, $content, $matches) )
|
|
{
|
|
if ( floatval($matches[1]) > floatval(FLIPBOOK_VERSION) )
|
|
$ret["new"] = true;
|
|
}
|
|
flipbook_recurse_rmdir( $unzip_folder . "flipbook-plugin/" );
|
|
return $ret;
|
|
}
|
|
|
|
function add_book_to_db($folder, $id) {
|
|
$this->create_db_table();
|
|
return $this->insert_book_to_db_table($folder, $id);
|
|
}
|
|
|
|
function is_db_table_exists() {
|
|
global $wpdb;
|
|
$table_name = $wpdb->prefix . "flipbook";
|
|
return ( $wpdb->get_var("SHOW TABLES LIKE '$table_name'") == $table_name );
|
|
}
|
|
|
|
function create_db_table() {
|
|
global $wpdb;
|
|
$table_name = $wpdb->prefix . "flipbook";
|
|
$charset = '';
|
|
if ( !empty($wpdb -> charset) )
|
|
$charset = "DEFAULT CHARACTER SET $wpdb->charset";
|
|
if ( !empty($wpdb -> collate) )
|
|
$charset .= " COLLATE $wpdb->collate";
|
|
$sql = "CREATE TABLE $table_name (
|
|
id mediumint(9) NOT NULL AUTO_INCREMENT,
|
|
time datetime DEFAULT '0000-00-00 00:00:00' NOT NULL,
|
|
authorid tinytext NOT NULL,
|
|
name tinytext DEFAULT '' NOT NULL,
|
|
images text DEFAULT '' NOT NULL,
|
|
bookcode text DEFAULT '' NOT NULL,
|
|
PRIMARY KEY (id)
|
|
) $charset;";
|
|
require_once(ABSPATH . 'wp-admin/includes/upgrade.php');
|
|
dbDelta($sql);
|
|
}
|
|
|
|
function insert_book_to_db_table($folder, $id) {
|
|
global $wpdb, $user_ID;
|
|
$table_name = $wpdb->prefix . "flipbook";
|
|
$file = $folder . "index.html";
|
|
if ( !is_file($file) )
|
|
return new WP_Error('filesystem', __("Cannot find book file", "flipbook"));
|
|
$time = current_time('mysql');
|
|
$authorid = $user_ID;
|
|
if ( ($id > 0) && $this->is_id_exist($id) ){
|
|
$ret = $wpdb->query( $wpdb->prepare("UPDATE $table_name SET time=%s, authorid=%s WHERE id=%d",$time,$authorid,$id) );
|
|
if (!$ret)
|
|
return new WP_Error('wp_db', __("Cannot insert book to database", "flipbook"));
|
|
}else{
|
|
$ret = $wpdb->query( $wpdb->prepare(
|
|
"INSERT INTO $table_name (time, authorid, name, images, bookcode)
|
|
VALUES (%s, %s, %s, %s, %s)",$time,$authorid,"","",""));
|
|
if(!$ret)
|
|
return new WP_Error('wp_db', __("Cannot insert book to database", "flipbook"));
|
|
$id = $wpdb->insert_id;
|
|
}
|
|
$ret = $this->read_book($file, $id);
|
|
if ( is_wp_error($ret) )
|
|
return $ret;
|
|
$name = $ret['name'];
|
|
$images = $ret['images'];
|
|
$bookcode = $ret['bookcode'];
|
|
$ret = $wpdb->query( $wpdb->prepare(
|
|
"UPDATE $table_name SET name=%s,images=%s,bookcode=%s WHERE id=%d",$name,$images,$bookcode,$id));
|
|
return array("id"=>$id);
|
|
}
|
|
|
|
function read_book($file, $id) {
|
|
$dest_url = $this->get_upload_url() . $id . '/';
|
|
$content = file_get_contents($file);
|
|
$name = "";
|
|
$pattern = '/<title>(.*)<\/title>/';
|
|
if ( preg_match($pattern, $content, $matches) )
|
|
$name = $matches[1];
|
|
$bookcode = "";
|
|
$pattern = '/<!--you can copy the below code to your htm page-----------------------------begin--->(.*)<!--you can copy the above code to your htm page-----------------------------end--->/s';
|
|
if ( preg_match($pattern, $content, $matches) ){
|
|
$bookcode = str_replace("%DESTURL%", $dest_url, $matches[1]);
|
|
$bookcode = str_replace("%SLIDERID%", $id, $bookcode);
|
|
}
|
|
|
|
$imagescode = $bookcode;
|
|
$pattern = '/<ul class=[\"\']flipbook-books[\"\'].*<\/ul>/sU';
|
|
if ( preg_match($pattern, $bookcode, $matches) ){
|
|
$imagescode = $matches[0];
|
|
}
|
|
$images = "";
|
|
$pattern = '/<img (data-)*src="([^"]+)"/';
|
|
if ( preg_match_all($pattern, $imagescode, $matches) )
|
|
$images = serialize($matches[2]);
|
|
return array("name" => $name,"images" => $images,"bookcode" => $bookcode);
|
|
}
|
|
|
|
function is_id_exist($id){
|
|
global $wpdb;
|
|
$table_name = $wpdb->prefix . "flipbook";
|
|
$book_row = $wpdb->get_row("SELECT * FROM $table_name WHERE id = $id");
|
|
return ($book_row != null);
|
|
}
|
|
|
|
function generate_body_code($id){
|
|
global $wpdb;
|
|
$table_name = $wpdb->prefix . "flipbook";
|
|
$ret = "";
|
|
$book_row = $wpdb->get_row("SELECT * FROM $table_name WHERE id = $id");
|
|
if ($book_row != null){
|
|
$ret = $book_row->bookcode;
|
|
}else{
|
|
$ret = '<p>The specified book id does not exist.</p>';
|
|
}
|
|
return $ret;
|
|
}
|
|
|
|
function generate_body_code_Preview($id){
|
|
global $wpdb;
|
|
$table_name = $wpdb->prefix . "flipbook";
|
|
$ret = "";
|
|
$book_row = $wpdb->get_row("SELECT * FROM $table_name WHERE id = $id");
|
|
if ($book_row != null){
|
|
$str = $book_row->bookcode;
|
|
$ret='<iframe style="width:100%;height:500px" '.strstr($str, 'src=');
|
|
}else{
|
|
$ret = '<p>The specified book id does not exist.</p>';
|
|
}
|
|
return $ret;
|
|
}
|
|
|
|
function get_list_data(){
|
|
global $wpdb;
|
|
$table_name = $wpdb->prefix . "flipbook";
|
|
$book_rows = $wpdb->get_results( "SELECT * FROM $table_name", ARRAY_A);
|
|
$ret = array();
|
|
if($book_rows){
|
|
foreach($book_rows as $row){
|
|
$ret[]=array("id"=>$row['id'],'name'=>$row['name'],'images'=>$row['images'],'time'=>$row['time'],'author'=>$row['authorid']);
|
|
}
|
|
}
|
|
return $ret;
|
|
}
|
|
|
|
function delete_book($id){
|
|
global $wpdb;
|
|
$table_name = $wpdb->prefix . "flipbook";
|
|
$ret = $wpdb->query($wpdb->prepare("DELETE FROM $table_name WHERE id=%s",$id));
|
|
return $ret;
|
|
}
|
|
} |