Commit 3e16e6b6 by Arun Raj

Adding 3d flipbook plugin

parent bdd334dc
.full-size {
width: 100%;
height: 100%;
}
.alert {
border: 1px solid transparent;
border-radius: 4px;
padding: 10px;
}
.alert-danger {
color: #a94442;
background-color: #f2dede;
border-color: #ebccd1;
}
.fb3d-fs-dark .fullscreen {
background-image: url('../images/texture.jpg');
}
.fb3d-fs-light .fullscreen {
background-image: url('../images/inverse-texture.jpg');
}
.fb3d-h-100 {
height: 100px;
}
.fb3d-h-200 {
height: 200px;
}
.fb3d-h-300 {
height: 300px;
}
.fb3d-h-400 {
height: 400px;
}
.fb3d-h-500 {
height: 500px;
}
.fb3d-h-600 {
height: 600px;
}
.fb3d-h-700 {
height: 700px;
}
.fb3d-h-800 {
height: 800px;
}
.fb3d-h-900 {
height: 900px;
}
.fb3d-h-1000 {
height: 1000px;
}
/*Lightbox Effect*/
.fb3d-modal-shadow {
}
body::before {
position: fixed;
content: ' ';
top: 0;
left: 0;
width: 100%;
height: 100%;
background-color: #000;
z-index: -10;
opacity: 0;
transition: opacity 0.5s, z-index 0.5s step-end;
}
.fb3d-modal-shadow::before {
z-index: 50000;
opacity: 0.5;
transition: opacity 0.5s;
}
.fb3d-modal {
position: fixed;
width: 95%;
height: 95%;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
box-shadow: 0 0 5px #fff;
z-index: -9;
opacity: 0;
transition: opacity 0.5s, z-index 0.5s step-end;
}
.fb3d-modal.visible {
z-index: 50001;
opacity: 1;
transition: opacity 0.5s;
}
.fb3d-modal::before {
position: absolute;
content: ' ';
width: 100%;
height: 100%;
opacity: 0.5;
z-index: -1;
}
.fb3d-modal.light::before {
background-color: #fff;
}
.fb3d-modal.dark::before {
background-color: #000;
}
.fb3d-modal .cmd-close {
font-size: 16pt;
color: #ccc;
position: absolute;
right: 10px;
top: 10px;
z-index: 1;
}
.fb3d-modal.light .cmd-close {
color: #555;
}
.fb3d-modal .mount-container {
width: 100%;
height: 100%;
}
.fb3d-modal .cmd-close:hover {
font-size: 16pt;
color: #eee;
}
.fb3d-modal.light .cmd-close:hover {
color: #111;
}
.fb3d-modal .cmd-close:active {
font-size: 14pt;
padding-top: 2px;
padding-right: 2px;
}
.light .mount-container.fullscreen {
background-image: url('../images/inverse-texture.jpg');
}
.dark .mount-container.fullscreen {
background-image: url('../images/texture.jpg');
}
.colorpicker {
width: 356px;
height: 176px;
overflow: hidden;
position: absolute;
background: url(../images/colorpicker_background.png);
font-family: Arial, Helvetica, sans-serif;
display: none;
}
.colorpicker_color {
width: 150px;
height: 150px;
left: 14px;
top: 13px;
position: absolute;
background: #f00;
overflow: hidden;
cursor: crosshair;
}
.colorpicker_color div {
position: absolute;
top: 0;
left: 0;
width: 150px;
height: 150px;
background: url(../images/colorpicker_overlay.png);
}
.colorpicker_color div div {
position: absolute;
top: 0;
left: 0;
width: 11px;
height: 11px;
overflow: hidden;
background: url(../images/colorpicker_select.gif);
margin: -5px 0 0 -5px;
}
.colorpicker_hue {
position: absolute;
top: 13px;
left: 171px;
width: 35px;
height: 150px;
cursor: n-resize;
}
.colorpicker_hue div {
position: absolute;
width: 35px;
height: 9px;
overflow: hidden;
background: url(../images/colorpicker_indic.gif) left top;
margin: -4px 0 0 0;
left: 0px;
}
.colorpicker_new_color {
position: absolute;
width: 60px;
height: 30px;
left: 213px;
top: 13px;
background: #f00;
}
.colorpicker_current_color {
position: absolute;
width: 60px;
height: 30px;
left: 283px;
top: 13px;
background: #f00;
}
.colorpicker input {
background-color: transparent;
border: 1px solid transparent;
position: absolute;
font-size: 10px;
font-family: Arial, Helvetica, sans-serif;
color: #898989;
top: 4px;
right: 11px;
text-align: right;
margin: 0;
padding: 0;
height: 11px;
}
.colorpicker_hex {
position: absolute;
width: 72px;
height: 22px;
background: url(../images/colorpicker_hex.png) top;
left: 212px;
top: 142px;
}
.colorpicker_hex input {
right: 6px;
}
.colorpicker_field {
height: 22px;
width: 62px;
background-position: top;
position: absolute;
}
.colorpicker_field span {
position: absolute;
width: 12px;
height: 22px;
overflow: hidden;
top: 0;
right: 0;
cursor: n-resize;
}
.colorpicker_rgb_r {
background-image: url(../images/colorpicker_rgb_r.png);
top: 52px;
left: 212px;
}
.colorpicker_rgb_g {
background-image: url(../images/colorpicker_rgb_g.png);
top: 82px;
left: 212px;
}
.colorpicker_rgb_b {
background-image: url(../images/colorpicker_rgb_b.png);
top: 112px;
left: 212px;
}
.colorpicker_hsb_h {
background-image: url(../images/colorpicker_hsb_h.png);
top: 52px;
left: 282px;
}
.colorpicker_hsb_s {
background-image: url(../images/colorpicker_hsb_s.png);
top: 82px;
left: 282px;
}
.colorpicker_hsb_b {
background-image: url(../images/colorpicker_hsb_b.png);
top: 112px;
left: 282px;
}
.colorpicker_submit {
position: absolute;
width: 22px;
height: 22px;
background: url(../images/colorpicker_submit.png) top;
left: 322px;
top: 142px;
overflow: hidden;
}
/* white skin */
.colorpicker {
background-image: url(../images/custom_background.png);
position: absolute;
bottom: 0;
left: 0;
}
.colorpicker_hue div {
background-image: url(../images/custom_indic.gif);
}
.colorpicker_hex {
background-image: url(../images/custom_hex.png);
}
.colorpicker_rgb_r {
background-image: url(../images/custom_rgb_r.png);
}
.colorpicker_rgb_g {
background-image: url(../images/custom_rgb_g.png);
}
.colorpicker_rgb_b {
background-image: url(../images/custom_rgb_b.png);
}
.colorpicker_hsb_s {
background-image: url(../images/custom_hsb_s.png);
display: none;
}
.colorpicker_hsb_h {
background-image: url(../images/custom_hsb_h.png);
display: none;
}
.colorpicker_hsb_b {
background-image: url(../images/custom_hsb_b.png);
display: none;
}
.colorpicker_submit {
background-image: url(../images/custom_submit.png);
}
.colorpicker input {
color: #778398;
}
/* white skin */
.colorpicker_focus {
background-position: center;
}
.colorpicker_hex.colorpicker_focus {
background-position: bottom;
}
.colorpicker_submit.colorpicker_focus {
background-position: bottom;
}
.colorpicker_slider {
background-position: bottom;
}
.fb3d .nav {
margin-bottom: 15px;
}
.fb3d .thumbnail {
text-align: center;
}
.fb3d .page {
padding: 10px;
border: 1px solid #CCC;
margin: 10px 0;
border-radius: 5px;
}
.fb3d .menu-control {
}
.fb3d .menu-control li {
display: inline-block;
padding-right: 20px;
}
.fb3d .control a {
margin-left: 10px;
}
.fb3d .nav {
margin-bottom: 15px;
}
.fb3d .menu-control ul {
margin-bottom: 15px;
}
.fb3d .menu-control select {
border: 1px solid #ccc;
}
.fb3d .paged-container .items {
margin-bottom: 15px;
}
.fb3d .text-center {
text-align: center;
}
.fb3d hr {
height: 1px;
width: 100%;
background-color: #ccc;
margin: 10px 0;
}
.fb3d .radio label, .fb3d .checkbox label {
margin: 0;
padding: 0;
}
.fb3d .form-control {
width: 100%;
margin-bottom: 10px;
}
.fb3d .book-select .items {
overflow-y: scroll;
height: 245px;
}
.fb3d .book-select .post {
margin-bottom: 5px;
}
.fb3d-admin-container {
background-color: #fff;
padding: 10px;
border: 1px solid #ddd;
}
.mce-container .fb3d .pagination {
margin: 8px 0;
}
.mce-container .fb3d .form-control {
width: 94%;
height: auto;
line-height: normal;
}
.mce-container .alert {
padding: 15px;
margin-bottom: 20px;
border: 1px solid transparent;
border-radius: 4px;
}
.mce-container .alert-danger {
color: #a94442;
background-color: #f2dede;
border-color: #ebccd1;
}
.mce-container .alert-info {
color: #31708f;
background-color: #d9edf7;
border-color: #bce8f1;
}
.mce-container .alert {
text-shadow: 0 1px 0 rgba(255,255,255,.2);
-webkit-box-shadow: inset 0 1px 0 rgba(255,255,255,.25), 0 1px 2px rgba(0,0,0,.05);
box-shadow: inset 0 1px 0 rgba(255,255,255,.25), 0 1px 2px rgba(0,0,0,.05);
}
.mce-container .alert-danger {
background-image: -webkit-linear-gradient(top,#f2dede 0,#e7c3c3 100%);
background-image: -o-linear-gradient(top,#f2dede 0,#e7c3c3 100%);
background-image: -webkit-gradient(linear,left top,left bottom,from(#f2dede),to(#e7c3c3));
background-image: linear-gradient(to bottom,#f2dede 0,#e7c3c3 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffe7c3c3', GradientType=0);
background-repeat: repeat-x;
border-color: #dca7a7;
}
.mce-container .alert-info {
background-image: -webkit-linear-gradient(top,#d9edf7 0,#b9def0 100%);
background-image: -o-linear-gradient(top,#d9edf7 0,#b9def0 100%);
background-image: -webkit-gradient(linear,left top,left bottom,from(#d9edf7),to(#b9def0));
background-image: linear-gradient(to bottom,#d9edf7 0,#b9def0 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffb9def0', GradientType=0);
background-repeat: repeat-x;
border-color: #9acfea;
}
.mce-container .alert .fa {
vertical-align: baseline;
font-family: FontAwesome;
}
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
function init(container) {
var instance;
if(window.jQuery) {
var $ = window.jQuery;
instance = {
floatWnd: container.find('.float-wnd'),
binds: {
showDropMenu: function(e) {
e.preventDefault();
var el = $(e.target);
while(!el.hasClass('toggle')) {
el = $(el[0].parentNode);
}
var menu = el.find('.menu');
if(menu.hasClass('hidden')) {
container.find('.ctrl .fnavbar .menu').addClass('hidden');
menu.removeClass('hidden');
e.stopPropagation();
}
},
hideDropMenu: function() {
container.find('.ctrl .fnavbar .menu').addClass('hidden');
},
pickFloatWnd: function(e) {
if(instance.pos) {
instance.binds.dropFloatWnd();
}
else {
instance.pos = {
x: e.pageX,
y: e.pageY
};
}
},
moveFloatWnd: function(e) {
if(instance.pos) {
var dv = {
x: e.pageX-instance.pos.x,
y: e.pageY-instance.pos.y
}, old = {
x: parseInt(instance.floatWnd.css('left')),
y: parseInt(instance.floatWnd.css('top'))
};
instance.floatWnd.css('left', old.x+dv.x+'px').css('top', old.y+dv.y+'px');
instance.pos = {
x: e.pageX,
y: e.pageY
};
}
},
dropFloatWnd: function() {
delete instance.pos;
},
jsCenter: function() {
setTimeout(function() {
var ns = container.find('.js-center');
for(var i=0; i<ns.length; ++i) {
var n = $(ns[i]), parentWidth = $(ns[i].parentNode).width(), width = n.width();
n.css('left', 0.5*(parentWidth-width)+'px');
}
}, 100);
}
},
appLoaded: function() {
instance.binds.jsCenter();
},
linkLoaded: function(link) {
instance.binds.jsCenter();
},
dispose: function() {
container.find('.ctrl .fnavbar .fnav .toggle').off('click', instance.binds.showDropMenu);
$(container[0].ownerDocument).off('click', instance.binds.hideDropMenu);
$(container[0].ownerDocument).off('mousemove', instance.binds.moveFloatWnd);
$(container[0].ownerDocument).off('mouseup', instance.binds.dropFloatWnd);
instance.floatWnd.find('.header').off('mousedown', instance.binds.pickFloatWnd);
$(container[0].ownerDocument.defaultView).off('resize', instance.binds.jsCenter);
}
};
container.find('.ctrl .fnavbar .fnav .toggle').on('click', instance.binds.showDropMenu);
$(container[0].ownerDocument).on('click', instance.binds.hideDropMenu);
$(container[0].ownerDocument).on('mousemove', instance.binds.moveFloatWnd);
$(container[0].ownerDocument).on('mouseup', instance.binds.dropFloatWnd);
instance.floatWnd.find('.header').on('mousedown', instance.binds.pickFloatWnd);
$(container[0].ownerDocument.defaultView).on('resize', instance.binds.jsCenter);
instance.binds.jsCenter();
}
else {
instance = {
dispose: function() {
}
};
console.error('jQuery is not found');
}
return instance;
} init
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
/**
* ReactDOM v15.3.1
*
* Copyright 2013-present, Facebook, Inc.
* All rights reserved.
*
* This source code is licensed under the BSD-style license found in the
* LICENSE file in the root directory of this source tree. An additional grant
* of patent rights can be found in the PATENTS file in the same directory.
*
*/
!function(e){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=e(require("react"));else if("function"==typeof define&&define.amd)define(["react"],e);else{var f;f="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this,f.ReactDOM=e(f.React)}}(function(e){return e.__SECRET_DOM_DO_NOT_USE_OR_YOU_WILL_BE_FIRED});
\ No newline at end of file
This source diff could not be displayed because it is too large. You can view the blob instead.
if(window.fb3dCreateInsertApp) {
var $ = jQuery, instance = fb3dCreateInsertApp($('#'+FB3D_ADMIN_LOCALE.shortcodeGeneratorMountNode)[0], ''),
text = $('#3dfb-shortcode-textarea');
instance.onUpdate = function() {
text[0].value = instance.getShortCode();
};
text.on('input', function() {
instance.setShortCode(text[0].value);
});
}
This source diff could not be displayed because it is too large. You can view the blob instead.
tinymce.PluginManager.add('3dfbInsert', function(editor) {
if(!window.FB3D_MCE_LOCALE) {
window.FB3D_MCE_LOCALE = {
key: '3d-flip-book'
}
}
function showDialog() {
var shortCode, insert, time=0;
function loadInsertApp() {
if(window.fb3dCreateInsertApp) {
var instance, win = editor.windowManager.open({
title: "3D FlipBook",
spacing: 10,
padding: 10,
items: [
{
minWidth: 450,
minHeight: 400,
type: 'container',
html: '<div id="3dfb-insert">Mount node</div>'
},
],
buttons: [{
text: "Close",
onclick: function() {
win.close();
}
}, {
text: "Ok",
subtype: 'primary',
onclick: function() {
var newShortCode = instance.getShortCode();
if(newShortCode!=='') {
insert(newShortCode);
win.close();
}
else {
editor.windowManager.alert('Select a 3D FlipBook');
}
}
}]
});
instance = fb3dCreateInsertApp(jQuery('#'+win._id).find('#3dfb-insert')[0], shortCode);
}
else if(time<5000) {
var dt = 500;
time += dt;
setTimeout(loadInsertApp, dt);
}
else {
editor.windowManager.alert('Cannot connect to the insert application');
}
}
var sel = editor.selection.getSel();
if(sel.focusNode!==sel.anchorNode || sel.focusOffset!==sel.anchorOffset) {
editor.windowManager.alert('Please reset multiple selection and place the cursor in a short code or a free space');
}
else {
var text = sel.focusNode.nodeValue || '', p = text.lastIndexOf('[',sel.focusOffset);
if(~p && text.lastIndexOf(']',sel.focusOffset)<p && text.substr(p).match(/\[.*?\]/)) {
var startText = text.substr(0, p);
text = text.substr(p);
var regex = new RegExp(['\\[',FB3D_MCE_LOCALE.key,'.*?\\]'].join(''), 'm'), matchs = regex.exec(text);
if(matchs && text.indexOf(matchs[0])===0) {
shortCode = matchs[0];
var offset = sel.focusOffset, node = sel.focusNode;
if(shortCode.match(/mode\s*=\s*['"]{0,1}link-lightbox['"]{0,1}/)) {
regex = new RegExp(['\\[',FB3D_MCE_LOCALE.key,'.*?\\[/', FB3D_MCE_LOCALE.key, '\\]'].join(''), 'm');
matchs = regex.exec(text);
if(matchs) {
shortCode = matchs[0];
}
}
insert = function(newShortCode) {
node.nodeValue = startText+text.replace(shortCode, newShortCode);
sel.collapse(node, Math.min(offset, startText.length+newShortCode.length));
};
loadInsertApp();
}
else {
editor.windowManager.alert('This short code is unknown for 3D FlipBook');
}
}
else {
shortCode = '';
insert = function(newShortCode) {
editor.execCommand('mceInsertContent', false, newShortCode);
};
loadInsertApp();
}
}
}
editor.addCommand('mceShow3dfbInsert', showDialog);
editor.addButton('3dfbInsert', {
icon: 'newdocument',
image: FB3D_MCE_LOCALE.icon,
tooltip: '3D FlipBook',
cmd: 'mceShow3dfbInsert'
});
editor.addMenuItem('3dfbInsert', {
icon: 'newdocument',
image: FB3D_MCE_LOCALE.icon,
text: '3D FlipBook',
cmd: 'mceShow3dfbInsert',
context: 'insert'
});
return {
};
});
<div id="fb3d-ctx" class="flip-book">
<div class="view">
<div class="fnav">
<div class="prev">
<a class="cmdBigBackward" href="#"><span class="icon"><i class="fa fa-angle-left" title="<$tr>Previous page</$tr>"></i></span></a>
</div>
<div class="next">
<a class="cmdBigForward" href="#"><span class="icon"><i class="fa fa-angle-right" title="<$tr>Next page</$tr>"></i></span></a>
</div>
</div>
<div class="widLoadingProgress loading-progress hidden">
<div class="progress">
</div>
<div class="txtLoadingProgress caption">
</div>
</div>
<div class="widLoading page-loading hidden">
</div>
</div>
<div class="widFloatWnd float-wnd hidden">
<div class="header">
<$tr>Table of contents</$tr>
<a href="#" title="<$tr>Close</$tr>" class="close cmdCloseToc">
<span class="icon"><i class="fa fa-times"></i></span>
</a>
</div>
<div class="body">
<div class="ctrl">
<div class="toc">
<div class="toc-menu widTocMenu">
<ul>
<li class="cmdBookmarks"><a href="#"><$tr>Bookmarks</$tr></a></li>
<li class="cmdThumbnails"><a href="#"><$tr>Thumbnails</$tr></a></li>
<li class="cmdSearch"><a href="#"><$tr>Search</$tr></a></li>
</ul>
</div>
<div class="widBookmarks toc-view">
</div>
<div class="widThumbnails toc-view">
</div>
<div class="widSearch toc-view">
</div>
</div>
</div>
</div>
</div>
<div class="controls">
<div class="ctrl js-center">
<nav class="fnavbar">
<ul class="fnav">
<li class="fnav-item logo"><a href="http://3dflipbook.net" target="_blank">3D FlipBook</a></li>
<li class="fnav-item cmdZoomIn"><a href="#"><span class="icon"><i class="fa fa-search-plus" title="<$tr>Zoom in</$tr>"></i></span></a></li>
<li class="fnav-item cmdZoomOut"><a href="#"><span class="icon"><i class="fa fa-search-minus" title="<$tr>Zoom out</$tr>"></i></span></a></li>
<li class="fnav-item cmdDefaultZoom"><a href="#"><span class="icon"><i class="fa fa-compress" title="<$tr>Fit view</$tr>"></i></span></a></li>
<li class="fnav-item cmdToc"><a href="#"><span class="icon"><i class="fa fa-bookmark" title="<$tr>Table of contents</$tr>"></i></span></a></li>
<li class="fnav-item cmdFastBackward"><a href="#"><span class="icon"><i class="fa fa-fast-backward" title="<$tr>10 pages backward</$tr>"></i></span></a></li>
<li class="fnav-item cmdBackward"><a href="#"><span class="icon"><i class="fa fa-backward" title="<$tr>Previous page</$tr>"></i></span></a></li>
<li class="fnav-item">
<div class="pages">
<input type="text" class="number inpPage" maxlength="4" placeholder="1">
<input type="text" class="amount inpPages" readOnly maxlength="4" placeholder="1">
</div>
</li>
<li class="fnav-item cmdForward"><a href="#"><span class="icon"><i class="fa fa-forward" title="<$tr>Next page</$tr>"></i></span></a></li>
<li class="fnav-item cmdFastForward"><a href="#"><span class="icon"><i class="fa fa-fast-forward" title="<$tr>10 pages forward</$tr>"></i></span></a></li>
<li class="fnav-item cmdSave"><a href="#"><span class="icon"><i class="fa fa-download" title="<$tr>Download</$tr>"></i></span></a></li>
<li class="fnav-item cmdPrint"><a href="#"><span class="icon"><i class="fa fa-print" title="<$tr>Print</$tr>"></i></span></a></li>
<li class="fnav-item cmdFullScreen"><a href="#"><span class="icon"><i class="fa fa-arrows-alt" title="<$tr>Full screen</$tr>"></i></span></a></li>
<li class="dropup fnav-item toggle widSettings">
<a href="#"><div class="icon-caret"><span class="icon"><i class="fa fa-cog" title="<$tr>Settings</$tr>"></i> <i class="caret"></i></span></div></a>
<ul class="menu hidden">
<li class="cmdSmartPan"><a href="#"><span class="icon"><i class="fa fa-eye"></i></span> <$tr>Smart pan</$tr></a></li>
<li class="cmdSinglePage"><a href="#"><span class="icon"><i class="fa fa-file-o"></i></span> <$tr>Single page</$tr></a></li>
<li class="cmdSounds"><a href="#"><span class="icon"><i class="fa fa-volume-up"></i></span> <$tr>Sounds</$tr></a></li>
<li class="cmdStats"><a href="#"><span class="icon"><i class="fa fa-line-chart"></i></span> <$tr>Stats</$tr></a></li>
<li class="divider"></li>
<li class="cmdLightingUp"><a href="#"><span class="icon"><i class="fa fa-chevron-up"></i></span> <$tr>Increase lighting</$tr></a></li>
<li class="cmdLightingDown"><a href="#"><span class="icon"><i class="fa fa-chevron-down"></i></span> <$tr>Reduce lighting</$tr></a></li>
</ul>
</li>
</ul>
</nav>
</div>
</div>
</div>
<?php
namespace iberezansky\fb3d;
get_header();
echo(shortcode_handler(array(
'id'=> get_the_ID()
)));
get_footer();
?>
<?php
namespace iberezansky\fb3d;
use \WP_Query;
function send_json_finish($code) {
if($code) {
wp_send_json(array(
'code'=> $code
));
}
}
function post_to_user_post($post, $isMeta) {
if($isMeta) {
$meta = get_post_meta($post->ID);
}
else {
$meta = array();
}
$def = get_post_data($post->ID, array());
$def = $def['3dfb']['post'];
return array(
'ID'=> $post->ID,
'title'=> $post->post_title,
'type'=> isset($meta[META_PREFIX.'type'][0])? $meta[META_PREFIX.'type'][0]: 'pdf',
'ready_function'=> isset($meta[META_PREFIX.'ready_function'][0])? $meta[META_PREFIX.'ready_function'][0]: '',
'data'=> unserialize(isset($meta[META_PREFIX.'data'][0])? $meta[META_PREFIX.'data'][0]: serialize($def['data'])),
'thumbnail'=> unserialize(isset($meta[META_PREFIX.'thumbnail'][0])? $meta[META_PREFIX.'thumbnail'][0]: serialize($def['thumbnail'])),
'props'=> unserialize(isset($meta[META_PREFIX.'props'][0])? $meta[META_PREFIX.'props'][0]: serialize($def['props'])),
'controlProps'=> unserialize(isset($meta[META_PREFIX.'controlProps'][0])? $meta[META_PREFIX.'controlProps'][0]: serialize($def['controlProps']))
);
}
function send_taxonomy_terms_json() {
wp_send_json(array('code'=> CODE_OK,'taxonomies'=> get_terms(POST_ID.'-category', array('hide_empty' => false))));
}
add_action('wp_ajax_fb3d_send_taxonomy_terms', '\iberezansky\fb3d\send_taxonomy_terms_json');
function send_posts_json() {
$q = new WP_Query(array('post_type'=> POST_ID, 'posts_per_page'=>-1));
$r = array();
for($i=0; $i<$q->post_count; ++$i) {
array_push($r, post_to_user_post($q->posts[$i], false));
}
wp_send_json(array('code'=> CODE_OK,'posts'=> $r));
}
add_action('wp_ajax_fb3d_send_posts', '\iberezansky\fb3d\send_posts_json');
add_action('wp_ajax_nopriv_fb3d_send_posts', '\iberezansky\fb3d\send_posts_json');
// function send_template_html() {
// $template_url = isset($_GET['template'])? $_GET['template']: ASSETS_TEMPLATES.'default-book-view.php';
// include(template_url_to_path($template_url));
// exit(0);
// }
//
// add_action('wp_ajax_fb3d_send_template_html', '\iberezansky\fb3d\send_template_html');
// add_action('wp_ajax_nopriv_fb3d_send_template_html', '\iberezansky\fb3d\send_template_html');
function get_media_image($id) {
$q = new WP_Query(array(
'p'=> $id,
'post_type'=> 'attachment',
'post_status'=> 'inherit',
'post_mime_type'=> array(
'image/gif',
'image/jpeg',
'image/pjpeg',
'image/png',
'image/svg+xml'
)
));
if($q->post_count) {
$post = $q->posts[0];
$meta = wp_get_attachment_metadata($post->ID);
$meta['parent_url'] = substr($post->guid, 0, strrpos($post->guid, '/')+1);
$meta['id'] = $post->ID;
}
else {
$meta = null;
}
return $meta;
}
function send_post_json() {
$code = CODE_ERROR;
$id = intval($_GET['id']);
if($id) {
$q = new WP_Query(array('post_type'=> POST_ID, 'p'=> $id));
if($q->post_count) {
$code = CODE_OK;
$post = post_to_user_post($q->posts[0], true);
if($_GET['thumbnailUrl']=='true') {
if($post['thumbnail']['type']=='mediaImage') {
$post['thumbnail']['data']['mediaImage'] = get_media_image(intval($post['thumbnail']['data']['post_ID']));
}
}
wp_send_json(array('code'=> $code,'post'=> $post));
}
else {
$code = CODE_NOT_FOUND;
}
}
send_json_finish($code);
}
add_action('wp_ajax_fb3d_send_post', '\iberezansky\fb3d\send_post_json');
add_action('wp_ajax_nopriv_fb3d_send_post', '\iberezansky\fb3d\send_post_json');
function send_posts_in_json() {
$ids = array();
if(isset($_GET['tus'])) {
$ids = array_merge($ids, $_GET['tus']);
}
if(isset($_GET['ntus'])) {
$ids = array_merge($ids, $_GET['ntus']);
}
$posts = array();
if(count($ids)) {
$q = new WP_Query(array('post_type'=> POST_ID, 'post__in'=> $ids, 'posts_per_page'=>-1));
for($i = 0; $i<$q->post_count; ++$i) {
$post = post_to_user_post($q->posts[$i], true);
if(isset($_GET['tus']) && in_array(strval($post['ID']), $_GET['tus'])) {
if($post['thumbnail']['type']=='mediaImage') {
$post['thumbnail']['data']['mediaImage'] = get_media_image(intval($post['thumbnail']['data']['post_ID']));
}
}
array_push($posts, $post);
}
}
wp_send_json(array('code'=> CODE_OK,'posts'=> $posts));
}
add_action('wp_ajax_fb3d_send_posts_in', '\iberezansky\fb3d\send_posts_in_json');
add_action('wp_ajax_nopriv_fb3d_send_posts_in', '\iberezansky\fb3d\send_posts_in_json');
function send_post_pages_json() {
$code = CODE_ERROR;
$id = intval($_GET['id']);
if($id) {
$pages = select_post_pages_by_page_post_ID($id);
$code = CODE_OK;
wp_send_json(array('code'=> $code, 'pages'=> $pages));
}
send_json_finish($code);
}
add_action('wp_ajax_fb3d_send_post_pages', '\iberezansky\fb3d\send_post_pages_json');
add_action('wp_ajax_nopriv_fb3d_send_post_pages', '\iberezansky\fb3d\send_post_pages_json');
function send_posts_in_pages_json() {
$ids = $_GET['ids'];
$pages = isset($ids)? select_post_pages_by_page_posts_IDs_in($ids): array();
wp_send_json(array('code'=> CODE_OK, 'pages'=> $pages));
}
add_action('wp_ajax_fb3d_send_posts_in_pages', '\iberezansky\fb3d\send_posts_in_pages_json');
add_action('wp_ajax_nopriv_fb3d_send_posts_in_pages', '\iberezansky\fb3d\send_posts_in_pages_json');
function send_posts_in_first_page_json() {
$ids = $_GET['ids'];
$pages = isset($ids)? select_post_first_page_by_page_post_IDs_in($ids): array();
wp_send_json(array('code'=> CODE_OK, 'pages'=> $pages));
}
add_action('wp_ajax_fb3d_send_posts_in_first_page', '\iberezansky\fb3d\send_posts_in_first_page_json');
add_action('wp_ajax_nopriv_fb3d_send_posts_in_first_page', '\iberezansky\fb3d\send_posts_in_first_page_json');
function send_post_first_page_json() {
$code = CODE_ERROR;
$id = intval($_GET['id']);
if($id) {
$page = select_post_first_page_by_page_post_ID($id);
$code = CODE_OK;
wp_send_json(array('code'=> $code, 'page'=> $page));
}
send_json_finish($code);
}
add_action('wp_ajax_fb3d_send_post_first_page', '\iberezansky\fb3d\send_post_first_page_json');
add_action('wp_ajax_nopriv_fb3d_send_post_first_page', '\iberezansky\fb3d\send_post_first_page_json');
function send_media_image_json() {
$code = CODE_ERROR;
$id = intval($_GET['id']);
if($id) {
$meta = get_media_image($id);
if($meta) {
$code = CODE_OK;
wp_send_json(array('code'=> $code, 'mediaImage'=> $meta));
}
else {
$code = CODE_NOT_FOUND;
}
}
send_json_finish($code);
}
add_action('wp_ajax_fb3d_send_media_image', '\iberezansky\fb3d\send_media_image_json');
add_action('wp_ajax_nopriv_fb3d_send_media_image', '\iberezansky\fb3d\send_media_image_json');
function send_book_control_props_json() {
$props = get_option(META_PREFIX.'book_control_props');
$props = unserialize($props);
$props = $props? $props: array();
wp_send_json(array('code'=> CODE_OK, 'props'=> $props));
}
add_action('wp_ajax_fb3d_send_book_control_props', '\iberezansky\fb3d\send_book_control_props_json');
add_action('wp_ajax_nopriv_fb3d_send_book_control_props', '\iberezansky\fb3d\send_book_control_props_json');
?>
<?php
namespace iberezansky\fb3d;
function receive_book_control_props_json() {
$props = $_POST['props'];
update_option(META_PREFIX.'book_control_props', serialize($props));
wp_send_json(array('code'=> CODE_OK));
}
add_action('wp_ajax_fb3d_receive_book_control_props', '\iberezansky\fb3d\receive_book_control_props_json');
?>
<?php
namespace iberezansky\fb3d;
define('iberezansky\fb3d\CODE_OK', 0);
define('iberezansky\fb3d\CODE_ERROR', 1);
define('iberezansky\fb3d\CODE_NOT_FOUND', 3);
define('iberezansky\fb3d\CODE_UNKNOWN', 4);
?>
<?php
namespace iberezansky\fb3d;
function __($str, $domain) {
global $fb3d;
return $fb3d['load-keys']? $str: call_user_func('\__', $str, $domain);
}
function load_textdomain() {
global $fb3d;
$fb3d['load-keys'] = true;
$keys = load_dictionary();
$fb3d['load-keys'] = false;
load_plugin_textdomain(POST_ID, false, DIR_NAME.'/languages');
$values = load_dictionary();
$l = count($keys);
$fb3d['dictionary'] = array();
for($i=0; $i<$l; ++$i) {
$fb3d['dictionary'][$keys[$i]] = $values[$i];
}
}
add_action('plugins_loaded', '\iberezansky\fb3d\load_textdomain');
function load_dictionary() {
return array(
__('auto', POST_ID),
__('Sorry something went wrong with the server please try again', POST_ID),
__('General', POST_ID),
__('Pages', POST_ID),
__('Book properties', POST_ID),
__('Sheet properties', POST_ID),
__('Cover properties', POST_ID),
__('Page properties', POST_ID),
__('Source', POST_ID),
__('PDF file', POST_ID),
__('Images, HTMLs files', POST_ID),
__('interactive', POST_ID),
__('Page number', POST_ID),
__('Remove', POST_ID),
__('CSS Layer', POST_ID),
__('CSS', POST_ID),
__('HTML', POST_ID),
__('Java Script', POST_ID),
__('Title', POST_ID),
__('Select files', POST_ID),
__('Open', POST_ID),
__('Add image pages', POST_ID),
__('Add HTML pages', POST_ID),
__('Add PDF page', POST_ID),
__('Remove all pages', POST_ID),
__('items per page', POST_ID),
__('All', POST_ID),
__('None', POST_ID),
__('Next', POST_ID),
__('Previous', POST_ID),
__('PDF page number', POST_ID),
__('Select image', POST_ID),
__('Change image', POST_ID),
__('Auto thumbnail', POST_ID),
__('book height', POST_ID),
__('book width', POST_ID),
__('gravity constant', POST_ID),
__('amount of rendered cached pages', POST_ID),
__('render loaded hidden pages in the background', POST_ID),
__('render pages while they are flipping, it can slow down animation', POST_ID),
__('amount of loaded by user pages that are used for predicting user behaviour', POST_ID),
__('quantity of predicted pages for automatic loading', POST_ID),
__('initial flipping velocity, it should be enough to overcome the gravity', POST_ID),
__('max corner (flexible part of the sheet) deviation from the whole sheet', POST_ID),
__('sheet flexibility', POST_ID),
__('part of the sheet that can be flexed, should be in range (0, 1)', POST_ID),
__('speed of changing bending angle of the flexible corner', POST_ID),
__('curvature of open sheet, 0 is for flat sheet', POST_ID),
__('width texture resolution', POST_ID),
__('height texture resolution', POST_ID),
__('sheet color', POST_ID),
__('sheet thickness', POST_ID),
__('sheet weight', POST_ID),
__('cover height is more on 2*padding and cover width more on 1*padding than page ones, so you can set different sizes for typical pages and cover like for real book', POST_ID),
__('binder texture', POST_ID),
__('Deep linking URL parameter name', POST_ID),
__('items pre page', POST_ID),
__('3D Flip Book', POST_ID),
__('View mode', POST_ID),
__('Advanced', POST_ID),
__('Title', POST_ID),
__('Thumbnail', POST_ID),
__('Thumbnail and Lightbox', POST_ID),
__('Lightbox activation link', POST_ID),
__('Fullscreen', POST_ID),
__('Select skin', POST_ID),
__('3D FlipBook container CSS classes', POST_ID),
__('Lightbox theme', POST_ID),
__('Light', POST_ID),
__('Dark', POST_ID),
__('default value', POST_ID),
__('minimum value', POST_ID),
__('maximum value', POST_ID),
__('amount of zoom levels', POST_ID),
__('amount of lighting levels', POST_ID),
__('pan step for comands cmdPanLeft, cmdPanRight, cmdPanUp, cmdPanDown', POST_ID),
__('zoom in', POST_ID),
__('zoom out', POST_ID),
__('set default zoom', POST_ID),
__('show bookmarks', POST_ID),
__('turn 10 pages backward', POST_ID),
__('turn a page backward', POST_ID),
__('turn a page forward', POST_ID),
__('turn 10 pages forward', POST_ID),
__('download', POST_ID),
__('print', POST_ID),
__('toggle fulscreen mode', POST_ID),
__('show/hide the settings toolbar button', POST_ID),
__('toggle the smart pan mode', POST_ID),
__('toggle single page mode', POST_ID),
__('toggle sound effects', POST_ID),
__('toggle statistics monitor', POST_ID),
__('increase lighting', POST_ID),
__('reduce lighting', POST_ID),
__('move pan to the left', POST_ID),
__('move pan to the right', POST_ID),
__('move pan to the up', POST_ID),
__('move pan to the down', POST_ID),
__('rotate the book by means mouse drag operation', POST_ID),
__('zoom by means mouse drag operation', POST_ID),
__('pan by means mouse drag operation', POST_ID),
__('zoom by means mouse wheel operation', POST_ID),
__('rotate the book by means touch drag operation', POST_ID),
__('zoom by means touch drag operation', POST_ID),
__('pan by means touch drag operation', POST_ID),
__('Ctrl, Shift, Alt, or their combination like Ctrl+Shift', POST_ID),
__('modificator', POST_ID),
__('keyboard key', POST_ID),
__('key', POST_ID),
__('mouse button', POST_ID),
__('button', POST_ID),
__('amount of touches', POST_ID),
__('touches', POST_ID),
__('event that activates the action', POST_ID),
__('event', POST_ID),
__('is action enabled', POST_ID),
__('enabled', POST_ID),
__('is active by default', POST_ID),
__('active', POST_ID),
__('is active for mobile devices by default', POST_ID),
__('activeForMobile', POST_ID),
__('Zoom', POST_ID),
__('Lighting', POST_ID),
__('Pan', POST_ID),
__('3D FlipBook - Settings', POST_ID),
__('General', POST_ID),
__('Actions', POST_ID),
__('Update', POST_ID),
__('Sorry something went wrong with the server please try again', POST_ID),
__('Settings saved successfully', POST_ID),
__('One', POST_ID),
__('Two', POST_ID),
__('Three', POST_ID),
__('Left', POST_ID),
__('Middle', POST_ID),
__('Right', POST_ID),
__('Mouse button down', POST_ID),
__('Mouse move', POST_ID),
__('Mouse button up', POST_ID),
__('Click', POST_ID),
__('Double click', POST_ID),
__('Touch start', POST_ID),
__('Touch move', POST_ID),
__('Touch end', POST_ID),
__('Key down', POST_ID),
__('Key press', POST_ID),
__('Key up', POST_ID),
__('rtl is a right-to-left, top-to-bottom script, writing starts from the right of the page and continues to the left', POST_ID),
__('Please wait... the Application is Loading', POST_ID),
__('PDF is Loading:', POST_ID),
__('Previous page', POST_ID),
__('Next page', POST_ID),
__('Table of contents', POST_ID),
__('Close', POST_ID),
__('Bookmarks', POST_ID),
__('Thumbnails', POST_ID),
__('Search', POST_ID),
__('Zoom in', POST_ID),
__('Zoom out', POST_ID),
__('Fit view', POST_ID),
__('10 pages backward', POST_ID),
__('10 pages forward', POST_ID),
__('Download', POST_ID),
__('Print', POST_ID),
__('Full screen', POST_ID),
__('Settings', POST_ID),
__('Smart pan', POST_ID),
__('Single page', POST_ID),
__('Sounds', POST_ID),
__('Stats', POST_ID),
__('Increase lighting', POST_ID),
__('Reduce lighting', POST_ID),
__('Loading...', POST_ID)
);
}
?>
<?php
namespace iberezansky\fb3d;
function put_value(&$arr, &$key, &$value, $p=0) {
$i = strpos($key, '-', $p);
if($i===false) {
$arr[substr($key, $p)] = $value;
}
else {
$k = substr($key, $p, $i-$p);
if(!isset($arr[$k])) {
$arr[$k] = array();
}
put_value($arr[$k], $key, $value, $i+1);
}
}
function cast_type($value, $spec) {
return sprintf($spec, $value); //sanitize_text_field
}
function plane2struct($data, $info) {
$struct = array();
foreach($info['base'] as $k=> $i) {
$data[$k] = isset($data[$k])? $data[$k]: $i['default'];
}
foreach($data as $k=> $v) {
unset($value);
if(isset($info['base'][$k])) {
$value = $v=='auto'? $v: cast_type($v, $info['base'][$k]['qualifier']);
}
else {
foreach($info['regs'] as $reg) {
if(preg_match($reg['pattern'], $k)) {
$value = $v=='auto'? $v: cast_type(isset($v)? $v: $reg['default'], $reg['qualifier']);
}
}
}
if(isset($value)) {
put_value($struct, $k, $value);
}
}
return $struct;
}
function get_post_data($id, $plane) {
$data = plane2struct($plane, array(
'base'=> array(
'3dfb-post-type'=> array('default'=> 'pdf', 'qualifier'=> '%s'),
'3dfb-post-data-post_ID'=> array('default'=> 0, 'qualifier'=> '%d'),
'3dfb-post-data-guid'=> array('default'=> '', 'qualifier'=> '%s'),
'3dfb-post-data-pages_customization'=> array('default'=> 'all', 'qualifier'=> '%s'),
'3dfb-post-data-pdf_pages'=> array('default'=> 0, 'qualifier'=> '%d'),
'3dfb-post-thumbnail-type'=> array('default'=> 'auto', 'qualifier'=> '%s'),
'3dfb-post-thumbnail-data-post_ID'=> array('default'=> 0, 'qualifier'=> '%d'),
'3dfb-post-ready_function'=> array('default'=> '', 'qualifier'=> '%s'),
'3dfb-post-props-height'=> array('default'=> 'auto', 'qualifier'=> '%f'),
'3dfb-post-props-width'=> array('default'=> 'auto', 'qualifier'=> '%f'),
'3dfb-post-props-gravity'=> array('default'=> 'auto', 'qualifier'=> '%f'),
'3dfb-post-props-cachedPages'=> array('default'=> 'auto', 'qualifier'=> '%f'),
'3dfb-post-props-renderInactivePages'=> array('default'=> 'auto', 'qualifier'=> '%d'),
'3dfb-post-props-renderInactivePagesOnMobile'=> array('default'=> 'auto', 'qualifier'=> '%d'),
'3dfb-post-props-renderWhileFlipping'=> array('default'=> 'auto', 'qualifier'=> '%d'),
'3dfb-post-props-pagesForPredicting'=> array('default'=> 'auto', 'qualifier'=> '%d'),
'3dfb-post-props-preloadPages'=> array('default'=> 'auto', 'qualifier'=> '%d'),
'3dfb-post-props-rtl'=> array('default'=> 'auto', 'qualifier'=> '%d'),
'3dfb-post-props-sheet-startVelocity'=> array('default'=> 'auto', 'qualifier'=> '%f'),
'3dfb-post-props-sheet-cornerDeviation'=> array('default'=> 'auto', 'qualifier'=> '%f'),
'3dfb-post-props-sheet-flexibility'=> array('default'=> 'auto', 'qualifier'=> '%f'),
'3dfb-post-props-sheet-flexibleCorner'=> array('default'=> 'auto', 'qualifier'=> '%f'),
'3dfb-post-props-sheet-bending'=> array('default'=> 'auto', 'qualifier'=> '%f'),
'3dfb-post-props-sheet-wave'=> array('default'=> 'auto', 'qualifier'=> '%f'),
'3dfb-post-props-sheet-widthTexels'=> array('default'=> 'auto', 'qualifier'=> '%f'),
'3dfb-post-props-sheet-heightTexels'=> array('default'=> 'auto', 'qualifier'=> '%f'),
'3dfb-post-props-sheet-color'=> array('default'=> 'auto', 'qualifier'=> '%f'),
'3dfb-post-props-cover-startVelocity'=> array('default'=> 'auto', 'qualifier'=> '%f'),
'3dfb-post-props-cover-flexibility'=> array('default'=> 'auto', 'qualifier'=> '%f'),
'3dfb-post-props-cover-flexibleCorner'=> array('default'=> 'auto', 'qualifier'=> '%f'),
'3dfb-post-props-cover-bending'=> array('default'=> 'auto', 'qualifier'=> '%f'),
'3dfb-post-props-cover-wave'=> array('default'=> 'auto', 'qualifier'=> '%f'),
'3dfb-post-props-cover-widthTexels'=> array('default'=> 'auto', 'qualifier'=> '%f'),
'3dfb-post-props-cover-heightTexels'=> array('default'=> 'auto', 'qualifier'=> '%f'),
'3dfb-post-props-cover-color'=> array('default'=> 'auto', 'qualifier'=> '%f'),
'3dfb-post-props-cover-depth'=> array('default'=> 'auto', 'qualifier'=> '%f'),
'3dfb-post-props-cover-padding'=> array('default'=> 'auto', 'qualifier'=> '%f'),
'3dfb-post-props-cover-binderTexture'=> array('default'=> 'auto', 'qualifier'=> '%s'),
'3dfb-post-props-cover-mass'=> array('default'=> 'auto', 'qualifier'=> '%f'),
'3dfb-post-props-page-startVelocity'=> array('default'=> 'auto', 'qualifier'=> '%f'),
'3dfb-post-props-page-flexibility'=> array('default'=> 'auto', 'qualifier'=> '%f'),
'3dfb-post-props-page-flexibleCorner'=> array('default'=> 'auto', 'qualifier'=> '%f'),
'3dfb-post-props-page-bending'=> array('default'=> 'auto', 'qualifier'=> '%f'),
'3dfb-post-props-page-wave'=> array('default'=> 'auto', 'qualifier'=> '%f'),
'3dfb-post-props-page-widthTexels'=> array('default'=> 'auto', 'qualifier'=> '%f'),
'3dfb-post-props-page-heightTexels'=> array('default'=> 'auto', 'qualifier'=> '%f'),
'3dfb-post-props-page-color'=> array('default'=> 'auto', 'qualifier'=> '%f'),
'3dfb-post-props-page-depth'=> array('default'=> 'auto', 'qualifier'=> '%f'),
'3dfb-post-props-page-mass'=> array('default'=> 'auto', 'qualifier'=> '%f'),
'3dfb-post-controlProps-actions-cmdSave-enabled'=> array('default'=> 'auto', 'qualifier'=> '%d'),
'3dfb-post-controlProps-actions-cmdPrint-enabled'=> array('default'=> 'auto', 'qualifier'=> '%d'),
'3dfb-post-controlProps-actions-cmdSinglePage-enabled'=> array('default'=> 'auto', 'qualifier'=> '%d'),
'3dfb-post-controlProps-actions-cmdSinglePage-active'=> array('default'=> 'auto', 'qualifier'=> '%d'),
),
'regs'=> array( array(
'pattern'=> '/3dfb-pages-\d+-page_ID/',
'qualifier'=> '%d',
'default'=> 0
), array(
'pattern'=> '/3dfb-pages-\d+-page_post_ID/',
'qualifier'=> '%d',
'default'=> $id
), array(
'pattern'=> '/3dfb-pages-\d+-page_title/',
'qualifier'=> '%s',
'default'=> ''
), array(
'pattern'=> '/3dfb-pages-\d+-page_source_type/',
'qualifier'=> '%s',
'default'=> 'epdf'
), array(
'pattern'=> '/3dfb-pages-\d+-page_source_data-post_ID/',
'qualifier'=> '%d',
'default'=> 0
), array(
'pattern'=> '/3dfb-pages-\d+-page_source_data-guid/',
'qualifier'=> '%s',
'default'=> ''
), array(
'pattern'=> '/3dfb-pages-\d+-page_source_data-interactive/',
'qualifier'=> '%d',
'default'=> 0
), array(
'pattern'=> '/3dfb-pages-\d+-page_source_data-number/',
'qualifier'=> '%d',
'default'=> 0
), array(
'pattern'=> '/3dfb-pages-\d+-page_thumbnail_type/',
'qualifier'=> '%s',
'default'=> 'auto'
), array(
'pattern'=> '/3dfb-pages-\d+-page_thumbnail_data-post_ID/',
'qualifier'=> '%s',
'default'=> ''
), array(
'pattern'=> '/3dfb-pages-\d+-page_meta_data-css_layer-css/',
'qualifier'=> '%s',
'default'=> ''
), array(
'pattern'=> '/3dfb-pages-\d+-page_meta_data-css_layer-html/',
'qualifier'=> '%s',
'default'=> ''
), array(
'pattern'=> '/3dfb-pages-\d+-page_meta_data-css_layer-js/',
'qualifier'=> '%s',
'default'=> ''
), array(
'pattern'=> '/3dfb-pages-\d+-page_number/',
'qualifier'=> '%d',
'default'=> ''
) )
));
$data['3dfb']['pages'] = isset($data['3dfb']['pages'])? $data['3dfb']['pages']: array();
return $data;
}
function props_save($id) {
$autosave = wp_is_post_autosave($id);
$revision = wp_is_post_revision($id);
$valid = isset($_POST[PROPS_NONCE_NAME]) && wp_verify_nonce($_POST[PROPS_NONCE_NAME], PROPS_NONCE_ACTION);
if(!($autosave || $revision || !$valid)) {
$data = get_post_data($id, $_POST);
foreach ($data['3dfb']['post'] as $key => $value) {
update_post_meta($id, META_PREFIX.$key, $value);
}
set_post_pages($id, $data['3dfb']['pages']);
}
}
add_action('save_post', '\iberezansky\fb3d\props_save');
?>
<?php
namespace iberezansky\fb3d;
define('iberezansky\fb3d\PROPS_NONCE_ACTION', basename(__FILE__));
define('iberezansky\fb3d\PROPS_NONCE_NAME', 'fb3d-props-nonce');
require_once(INC.'edit-save.php');
function add_details_meta_box() {
add_meta_box(
POST_ID.'-details',
__('Details', POST_ID),
'\iberezansky\fb3d\details_metabox_render',
POST_ID,
'normal',
'core'
);
}
add_action('add_meta_boxes', '\iberezansky\fb3d\add_details_meta_box');
function enqueue_edit_scripts() {
global $pagenow, $typenow;
if(($pagenow == 'post.php' || $pagenow == 'post-new.php') && $typenow == POST_ID) {
register_scripts_and_styles();
wp_enqueue_media();
wp_enqueue_style(POST_ID.'-edit');
wp_enqueue_script(POST_ID.'-edit');
}
}
add_action('admin_enqueue_scripts', '\iberezansky\fb3d\enqueue_edit_scripts');
function details_metabox_render($post) {
wp_nonce_field(PROPS_NONCE_ACTION, PROPS_NONCE_NAME);
$meta = get_post_meta($post->ID);
?>
<div id="<?php echo(POST_ID.'-edit');?>" data-id="<?php echo($post->ID);?>">
</div>
<?php
}
?>
<?php
namespace iberezansky\fb3d;
function register_tinymce_plugin( $plugin_array ) {
$plugin_array['3dfbInsert'] = ASSETS_JS.'tiny-mce-insert.js';
return $plugin_array;
}
function register_tinymce_button( $buttons ) {
array_push( $buttons, 'dropcap', '3dfbInsert' ); // dropcap', 'recentposts
return $buttons;
}
function add_tinymce_plugins() {
add_filter('mce_external_plugins', '\iberezansky\fb3d\register_tinymce_plugin');
add_filter('mce_buttons', '\iberezansky\fb3d\register_tinymce_button');
}
add_action('init', '\iberezansky\fb3d\add_tinymce_plugins');
function enqueue_insert_scripts() {
global $pagenow, $typenow;
if(($pagenow == 'post.php' || $pagenow == 'post-new.php' || $pagenow == 'admin.php') && $typenow != POST_ID) {
register_scripts_and_styles();
wp_enqueue_style(POST_ID.'-insert');
wp_enqueue_script(POST_ID.'-insert');
before_wp_tiny_mce();
}
}
add_action('admin_enqueue_scripts', '\iberezansky\fb3d\enqueue_insert_scripts');
function before_wp_tiny_mce() {
?>
<script type="text/javascript">
window.FB3D_MCE_LOCALE = {
key: '<?php echo(POST_ID)?>',
icon: '<?php echo(ASSETS_IMAGES.'icon.ico')?>'
};
</script>
<?php
}
// add_action('before_wp_tiny_mce', '\iberezansky\fb3d\before_wp_tiny_mce');
?>
<?php
namespace iberezansky\fb3d;
function install() {
global $wpdb;
$table = TABLE_NAME;
$charset_collate = $wpdb->get_charset_collate();
$sql = "CREATE TABLE $table (
page_ID bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT,
page_post_ID bigint(20) UNSIGNED NOT NULL,
page_title text NOT NULL,
page_source_type varchar(20) NOT NULL,
page_source_data longtext NOT NULL,
page_thumbnail_type varchar(20) NOT NULL,
page_thumbnail_data longtext NOT NULL,
page_meta_data longtext NOT NULL,
page_number int(11) NOT NULL,
PRIMARY KEY (page_ID),
KEY page_post_ID (page_post_ID ASC),
KEY page_source_type (page_source_type ASC),
KEY page_thumbnail_type (page_thumbnail_type ASC)
) $charset_collate;";
require_once(ABSPATH.'wp-admin/includes/upgrade.php');
dbDelta($sql);
add_option($table.'_version', DBVERSION);
}
register_activation_hook(MAIN, '\iberezansky\fb3d\install');
?>
<?php
namespace iberezansky\fb3d;
function is_page_ID($page_ID) {
return isset($page_ID) && $page_ID!=0;
}
function pages2ids($pages) {
$ids = array();
foreach($pages as $page) {
if(is_page_ID($page['page_ID'])) {
array_push($ids, $page['page_ID']);
}
}
return $ids;
}
function page_description() {
return array(
'page_ID'=> array('val'=> 0, 'type'=> '%ai'),
'page_post_ID'=> array('val'=> 0, 'type'=> '%d'),
'page_title'=> array('val'=> '', 'type'=> '%s'),
'page_source_type'=> array('val'=> '', 'type'=> '%s'),
'page_source_data'=> array('val'=> array(), 'type'=> '%a'),
'page_thumbnail_type'=> array('val'=> '', 'type'=> '%s'),
'page_thumbnail_data'=> array('val'=> array(), 'type'=> '%a'),
'page_meta_data'=> array('val'=> array('css_layer'=> array('css'=> '', 'html'=> '', 'js'=> '')), 'type'=> '%a'),
'page_number'=> array('val'=> 0, 'type'=> '%d')
);
}
function serialize_page_records($records, $fields=null) {
$desc = page_description();
if(!$fields) {
$fields = array_keys($records);
}
$serialized = array('records'=> array(), 'types'=> array());
foreach($fields as $name) {
$d = $desc[$name];
if($d['type']=='%a') {
$serialized['records'][$name] = serialize(isset($records[$name])? $records[$name]: $d['val']);
$serialized['types'][$name] = '%s';
}
else if($d['type']=='%a') {
// don't serialize auto generated fields
}
else {
$serialized['records'][$name] = isset($records[$name])? $records[$name]: $d['val'];
$serialized['types'][$name] = $d['type'];
}
}
return $serialized;
}
function stripslashesAray($a) {
$res = array();
foreach($a as $k=> $v) {
if(is_array($v)) {
$res[$k] = stripslashesAray($v);
}
else if(is_string($v)) {
$res[$k] = stripslashes($v);
}
else {
$res[$k] = $v;
}
}
return $res;
}
function unserialize_page_records($records) {
$desc = page_description();
$fields = array_keys($desc);
$unserialized = array();
foreach($fields as $name) {
$d = $desc[$name];
if($d['type']=='%a') {
$un = unserialize($records[$name]);
$unserialized[$name] = stripslashesAray($un===false? $d['val']: $un);
}
else {
$unserialized[$name] = $records[$name];
}
}
return $unserialized;
}
function serialize_page($page) {
return serialize_page_records($page, array_keys(page_description()));
}
function delete_post_pages($ids) {
global $wpdb;
$table = TABLE_NAME;
$wpdb->query(sprintf("
DELETE FROM $table
WHERE page_ID IN %s
", a_to_sql_list($ids)));
}
function insert_post_pages($pages) {
global $wpdb;
$table = TABLE_NAME;
foreach($pages as $page) {
$serialized = serialize_page($page);
$wpdb->insert($table, $serialized['records']);//, $serialized['types']
}
}
function update_post_pages($pages) {
global $wpdb;
$table = TABLE_NAME;
foreach($pages as $page) {
$serialized = serialize_page_records($page);
$wpdb->update($table, $serialized['records'], array('page_ID'=> $page['page_ID']));//, $serialized['types'], array('%d')
}
}
function select_post_pages($where) {
global $wpdb;
$table = TABLE_NAME;
$serialized_pages = $wpdb->get_results("
SELECT *
FROM $table
WHERE $where
", ARRAY_A);
$pages = array();
foreach($serialized_pages as $serialized_page) {
array_push($pages, unserialize_page_records($serialized_page));
}
return $pages;
}
function select_post_pages_by_page_post_ID($page_post_ID) {
global $wpdb;
return select_post_pages($wpdb->prepare('page_post_ID = %d', $page_post_ID));
}
function a_to_sql_list($a) {
$a = array_map(function($v) {
return "'" . esc_sql($v) . "'";
}, $a);
$a = implode(',', $a);
return '('.($a===''? "'0'": $a).')';
}
function select_post_pages_by_page_posts_IDs_in($ids) {
return select_post_pages('page_post_ID IN '.a_to_sql_list($ids));
}
function select_post_first_page_by_page_post_IDs_in($ids) {
global $wpdb;
$res = select_post_pages('page_number = 0 AND page_post_ID IN '.a_to_sql_list($ids));
return $res;
}
function select_post_first_page_by_page_post_ID($page_post_ID) {
global $wpdb;
$res = select_post_pages($wpdb->prepare('page_post_ID = %d AND page_number = 0', $page_post_ID));
return $res[0];
}
// function select_post_pages_in_page_IDs($page_IDs) {
// global $wpdb;
// return select_post_pages($wpdb->prepare('page_ID IN %s', a_to_sql_list($page_IDs)));
// }
function select_post_pages_by_page_post_ID_and_not_in_page_IDs($page_post_ID, $page_IDs) {
global $wpdb;
if(count($page_IDs)) {
$q = sprintf('page_post_ID = %d AND page_ID NOT IN %s', $page_post_ID, a_to_sql_list($page_IDs));
}
else {
$q = sprintf('page_post_ID = %d', $page_post_ID);
}
return select_post_pages($q);
}
function divide_to_updated_and_inserted($pages) {
$res = array('inserted'=> array(), 'updated'=> array());
foreach($pages as $page) {
if(is_page_ID($page['page_ID'])) {
array_push($res['updated'], $page);
}
else {
array_push($res['inserted'], $page);
}
}
return $res;
}
function set_post_pages($page_post_ID, $pages) {
$ids = pages2ids($pages);
$deleted = select_post_pages_by_page_post_ID_and_not_in_page_IDs($page_post_ID, $ids);
delete_post_pages(pages2ids($deleted));
$res = divide_to_updated_and_inserted($pages);
update_post_pages($res['updated']);
insert_post_pages($res['inserted']);
}
?>
<?php
namespace iberezansky\fb3d;
function register_post_type() {
\register_post_type(POST_ID, array(
'public'=> true,
'label'=> __('3D FlipBook', POST_ID),
'labels'=> array(
'all_items'=> __('All Books', POST_ID),
),
'menu_icon'=> 'dashicons-book-alt',
'exclude_from_search'=> true,
'supports'=> array(
'title'
)
));
}
add_action('init', '\iberezansky\fb3d\register_post_type');
function custom_template($single) {
global $wp_query, $post;
if($post->post_type===POST_ID) {
$template = TEMPLATES.'/single-3d-flip-book.php';
if(file_exists($template)) {
$single = $template;
}
}
return $single;
}
add_filter('single_template', '\iberezansky\fb3d\custom_template');
?>
<?php
namespace iberezansky\fb3d;
define('iberezansky\fb3d\PDFJS_WORKER', ASSETS_JS.'pdf.worker.js');
function register_scripts() {
wp_register_script('react', ASSETS_JS.'react.min.js', null, '15.3.1', true);
wp_register_script('react-dom', ASSETS_JS.'react-dom.min.js', array('react'), '15.3.1', true);
wp_register_script('pdf-js', ASSETS_JS.'pdf.min.js', null, '1.5.188', true);
wp_register_script('three', ASSETS_JS.'three.min.js', null, '0.83', true);
wp_register_script('html2canvas', ASSETS_JS.'html2canvas.min.js', null, '0.5', true);
wp_register_script(POST_ID.'-colorpicker', ASSETS_JS.'colorpicker.js', array('jquery'), '1.1.0', true);
wp_register_script(POST_ID.'-edit', ASSETS_JS.'edit.min.js', array('react', 'react-dom', 'jquery', 'pdf-js', 'html2canvas', POST_ID.'-colorpicker'), VERSION, true);
wp_register_script(POST_ID.'-insert', ASSETS_JS.'insert.min.js', array('react', 'react-dom', 'jquery'), VERSION, true);
wp_register_script(POST_ID.'-settings', ASSETS_JS.'settings.min.js', array('react', 'react-dom', 'jquery'), VERSION, true);
wp_register_script(POST_ID.'-shortcode-generator', ASSETS_JS.'shortcode-generator.js', array('react', 'react-dom', 'jquery', POST_ID.'-insert'), VERSION, true);
wp_register_script(POST_ID, ASSETS_JS.'3d-flip-book.min.js', array('jquery', 'pdf-js', 'html2canvas', 'three'), VERSION, true);
wp_register_script(POST_ID.'-fullscreen', ASSETS_JS.'fullscreen.min.js', array('jquery', 'pdf-js', 'html2canvas', POST_ID), VERSION, true);
wp_register_script(POST_ID.'-thumbnail', ASSETS_JS.'thumbnail.min.js', array('jquery', 'pdf-js', 'html2canvas'), VERSION, true);
wp_register_script(POST_ID.'-thumbnail-lightbox', ASSETS_JS.'thumbnail-lightbox.min.js', array('jquery', 'pdf-js', 'html2canvas', POST_ID), VERSION, true);
wp_register_script(POST_ID.'-link-lightbox', ASSETS_JS.'link-lightbox.min.js', array('jquery', 'pdf-js', 'html2canvas', POST_ID), VERSION, true);
localize_scripts();
}
$fb3d['registered_scripts_and_styles'] = false;
function register_scripts_and_styles() {
global $fb3d;
if(!$fb3d['registered_scripts_and_styles']) {
register_scripts();
register_styles();
$fb3d['registered_scripts_and_styles'] = true;
}
}
function localize_scripts() {
global $fb3d;
wp_localize_script('pdf-js', 'PDFJS_LOCALE', array(
'pdfJsWorker'=> PDFJS_WORKER,
'pdfJsCMapUrl'=> ASSETS_CMAPS
));
wp_localize_script(POST_ID, 'FB3D_LOCALE', array(
'dictionary'=> $fb3d['dictionary']
));
wp_localize_script(POST_ID.'-edit', 'FB3D_ADMIN_LOCALE', array(
'editMountNode'=> POST_ID.'-edit',
'images'=> ASSETS_IMAGES,
'dictionary'=> $fb3d['dictionary']
));
wp_localize_script(POST_ID.'-insert', 'FB3D_ADMIN_LOCALE', array(
'key'=> POST_ID,
'templates'=> $fb3d['templates'],
'dictionary'=> $fb3d['dictionary'],
'shortcodeGeneratorMountNode'=> POST_ID.'-shortcode-generator'
));
wp_localize_script(POST_ID.'-settings', 'FB3D_ADMIN_LOCALE', array(
'settingsMountNode'=> POST_ID.'-settings',
'images'=> ASSETS_IMAGES,
'templates'=> $fb3d['templates'],
'dictionary'=> $fb3d['dictionary']
));
$client_locale = array(
'key'=> POST_ID,
'ajaxurl'=> admin_url('admin-ajax.php'),
'templates'=> $fb3d['templates'],
'images'=> ASSETS_IMAGES
);
wp_localize_script(POST_ID.'-fullscreen', 'FB3D_CLIENT_LOCALE', $client_locale);
wp_localize_script(POST_ID.'-thumbnail', 'FB3D_CLIENT_LOCALE', $client_locale);
wp_localize_script(POST_ID.'-thumbnail-lightbox', 'FB3D_CLIENT_LOCALE', $client_locale);
wp_localize_script(POST_ID.'-link-lightbox', 'FB3D_CLIENT_LOCALE', $client_locale);
}
?>
<?php
namespace iberezansky\fb3d;
function add_shortcode_generator_page() {
add_submenu_page(
'edit.php?post_type='.POST_ID,
__('3D FlipBook - Shortcode Generator', POST_ID),
__('Shortcode Generator', POST_ID),
'edit_posts',//'manage_options',
POST_ID.'-shortcode-generator',
'\iberezansky\fb3d\shortcode_generator_render'
);
}
add_action('admin_menu', '\iberezansky\fb3d\add_shortcode_generator_page');
function shortcode_generator_render() {
register_scripts_and_styles();
wp_enqueue_style(POST_ID.'-insert');
wp_enqueue_script(POST_ID.'-shortcode-generator');
?>
<div class="fb3d">
<h1><?php _e('3D FlipBook - Shortcode Generator', POST_ID);?></h1>
<div class="form-group">
<textarea id="3dfb-shortcode-textarea" class="form-control"></textarea>
</div>
<div class="fb3d-admin-container">
<div id="<?php echo(POST_ID.'-shortcode-generator');?>">
</div>
</div>
</div>
<?php
}
?>
<?php
namespace iberezansky\fb3d;
use \WP_Query;
function convert_tax_to_tax_query($tax) {
$ids = explode(',', $tax);
$iids = array();
foreach($ids as $id) {
array_push($iids, intval($id));
}
return array(array(
'taxonomy'=> POST_ID.'-category',
'field'=> 'term_id',
'terms'=> $iids
));
}
function shortcode_handler($atts, $content='') {
$atts = shortcode_atts(
array(
'id'=> '0',
'mode'=> 'fullscreen',
'title'=> 'false',
'template'=> 'default',
'lightbox'=> 'dark',
'classes'=> '',
'urlparam'=> 'fb3d-page',
'page-n'=>'0',
'pdf'=> '',
'tax'=> 'null',
'thumbnail'=> '',
'cols'=> '3'
),
$atts
);
if($atts['tax']==='null') {
$is_link = $atts['mode']=='link-lightbox'; $atts['template'] = 'short-white-book-view';
register_scripts_and_styles();
wp_enqueue_style(POST_ID.'-client');
wp_enqueue_script(POST_ID.'-'.$atts['mode']);
$classes = str_replace(array(' ', "\t"), '', $atts['classes']);
$classes = implode(' ', explode(',', $classes));
$r = sprintf('<%s class="full-size %s %s"', $is_link? 'a href="#"': 'div', POST_ID, $classes);
foreach($atts as $k=> $v) {
if($k!=='classes') {
$r .= sprintf(' data-%s="%s"', $k, $v);
}
}
$res = $is_link? $r.'>'.$content.'</a>' :$r.'></div>'.$content;
}
else {
$params = array('post_type'=> '3d-flip-book', 'posts_per_page'=>-1);
if($atts['tax']!=='') {
if(substr($atts['tax'], 0, 1)==='{') {
$params['tax_query'] = json_decode(str_replace("'", '"', $atts['tax']), true);
}
else {
$params['tax_query'] = convert_tax_to_tax_query($atts['tax']);
}
}
$q = new WP_Query($params);
$params = $atts;
$cols = intval($atts['cols']);
unset($params['tax']);
ob_start();
echo('<table><tr>');
for($i=0; $i<$q->post_count; ++$i) {
if($i%$cols===0 && $i) {
echo('</tr><tr>');
}
$params['id'] = $q->posts[$i]->ID;
echo('<td>'.shortcode_handler($params).'</td>');
}
echo('</tr></table>');
$res = ob_get_clean();
}
return $res;
}
add_shortcode(POST_ID, '\iberezansky\fb3d\shortcode_handler');
?>
<?php
namespace iberezansky\fb3d;
function register_styles() {
wp_register_style('font-awesome', ASSETS_CSS.'font-awesome.min.css', array(), '4.7.0');
wp_register_style('colorpicker', ASSETS_CSS.'colorpicker.css', array(), '1.1.0');
wp_register_style(POST_ID.'-admin', ASSETS_CSS.'admin.css', array('font-awesome'), VERSION);
wp_register_style(POST_ID.'-edit', ASSETS_CSS.'edit.css', array(POST_ID.'-admin', 'colorpicker'), VERSION);
wp_register_style(POST_ID.'-insert', ASSETS_CSS.'insert.css', array(POST_ID.'-admin'), VERSION);
wp_register_style(POST_ID.'-settings', ASSETS_CSS.'settings.css', array(POST_ID.'-admin'), VERSION);
wp_register_style(POST_ID.'-client', ASSETS_CSS.'client.css', array('font-awesome'), VERSION);
}
?>
<?php
namespace iberezansky\fb3d;
function register_taxonomy() {
\register_taxonomy(POST_ID.'-category', POST_ID, array(
'hierarchical'=> true,
'label'=> __('Categories', POST_ID),
'show-ui'=> true
));
}
add_action('init', '\iberezansky\fb3d\register_taxonomy');
?>
<?php
namespace iberezansky\fb3d;
$fb3d['templates'] = array(
'short-white-book-view'=> array(
'styles'=> array(
ASSETS_CSS.'short-white-book-view.css'
),
'links'=> array(
array(
'rel'=> 'stylesheet',
'href'=> ASSETS_CSS.'font-awesome.min.css'
)
),
'html'=> ASSETS_TEMPLATES.'default-book-view.html',
'script'=> ASSETS_JS.'default-book-view.js',
'sounds'=> array(
'startFlip'=> ASSETS_SOUNDS.'start-flip.mp3',
'endFlip'=> ASSETS_SOUNDS.'end-flip.mp3'
)
)
);
function import_templates($skins) {
global $fb3d;
$fb3d['templates'] = $skins[POST_ID]['skins'];
}
add_action('iberezansky_skinedit_export_skins', '\iberezansky\fb3d\import_templates');
function export_templates($skins) {
global $fb3d;
$skins[POST_ID] = array(
'skins'=> $fb3d['templates'],
'version'=> SKINVERSION,
'name'=> __('3D FlipBook'),
'description'=> array(
'caption'=> array(
'type'=> 'text',
'required'=> false
),
'styles'=> array(
'type'=> 'file',
'ext'=> 'css',
'number'=> 'inf',
'required'=> false
),
'links'=> array(
'type'=> 'links',
'number'=> 'inf',
'required'=> false
),
'html'=> array(
'type'=> 'file',
'ext'=> 'php',
'number'=> 'one',
'required'=> true
),
'script'=> array(
'type'=> 'file',
'ext'=> 'js',
'number'=> 'one',
'required'=> false
),
'sounds'=> array(
'type'=> 'file',
'ext'=> 'mp3',
'number'=> array(
'startFlip',
'endFlip'
),
'required'=> false
)
)
);
return $skins;
}
add_filter('iberezansky_skinedit_import_skins', '\iberezansky\fb3d\export_templates');
// function template_url_to_path($url) {
// $url = str_replace('\\', '/', $url);
// $dir = str_replace('\\', '/', DIR);
// $wp_content = str_replace('\\', '/', WP_CONTENT_DIR);
// $wp_content = substr($wp_content, strrpos($wp_content, '/'));
// $pattern = $wp_content.'/plugins/';
// return substr($dir, 0, strpos($dir, $pattern)).substr($url, strpos($url, $pattern));
// }
?>
<?php
/*
Plugin Name: 3D FlipBook - Light Edition
Plugin URI: http://3dflipbook.net
Description: Interactive 3D FlipBook Powered Physics Engine WordPress Plugin
Author: iberezansky
Author URI: http://iberezansky.net
Version: 1.9.21
License: GPLv2 or later
Text Domain: 3d-flip-book
*/
namespace iberezansky\fb3d;
function get_dump($var) {
ob_start();
var_dump($var);
return '<pre class="dump"><code>'.htmlspecialchars(ob_get_clean()).'</code></pre>';
}
function dump($var) {
echo get_dump($var);
}
$fb3d = array(
'load-keys'=> false,
'dictionary'=> array()
);
function define_tables_names() {
global $wpdb;
define('iberezansky\fb3d\TABLE_NAME', $wpdb->prefix.'fb3d_pages');
}
define('iberezansky\fb3d\VERSION', '1.6');
define('iberezansky\fb3d\DBVERSION', '1.1');
define('iberezansky\fb3d\SKINVERSION', '1.0');
define_tables_names();
define('iberezansky\fb3d\MAIN', __FILE__);
define('iberezansky\fb3d\DIR', plugin_dir_path(__FILE__));
define('iberezansky\fb3d\DIR_NAME', dirname(plugin_basename(__FILE__)));
define('iberezansky\fb3d\INC', DIR.'inc/');
define('iberezansky\fb3d\TEMPLATES', DIR.'assets/templates/');
define('iberezansky\fb3d\URL', plugins_url('/', __FILE__));
define('iberezansky\fb3d\ASSETS', URL.'assets/');
define('iberezansky\fb3d\ASSETS_JS', ASSETS.'js/');
define('iberezansky\fb3d\ASSETS_CSS', ASSETS.'css/');
define('iberezansky\fb3d\ASSETS_TEMPLATES', ASSETS.'templates/');
define('iberezansky\fb3d\ASSETS_IMAGES', ASSETS.'images/');
define('iberezansky\fb3d\ASSETS_SOUNDS', ASSETS.'sounds/');
define('iberezansky\fb3d\ASSETS_CMAPS', ASSETS.'cmaps/');
define('iberezansky\fb3d\POST_ID', '3d-flip-book');
define('iberezansky\fb3d\META_PREFIX', '3dfb_');
require_once(INC.'codes.php');
require_once(INC.'templates.php');
require_once(INC.'install.php');
require_once(INC.'post-pages.php');
require_once(INC.'post.php');
require_once(INC.'taxonomy.php');
require_once(INC.'dictionary.php');
require_once(INC.'styles.php');
require_once(INC.'scripts.php');
require_once(INC.'edit.php');
require_once(INC.'insert.php');
require_once(INC.'shortcode-generator.php');
require_once(INC.'shortcode.php');
require_once(INC.'ajax-get.php');
require_once(INC.'ajax-post.php');
//file_put_contents('d:/php.html', get_dump($w));
//file_put_contents('d:/php.html', get_dump(array('post'=>$_POST,'data'=>$data)));
?>
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment