first commit
This commit is contained in:
@@ -0,0 +1,254 @@
|
||||
<?php
|
||||
/**
|
||||
* WP Table Manager
|
||||
*
|
||||
* @package WP Table Manager
|
||||
* @author Joomunited
|
||||
* @version 1.0
|
||||
*/
|
||||
|
||||
use Joomunited\WPFramework\v1_0_4\Model;
|
||||
|
||||
defined( 'ABSPATH' ) || die();
|
||||
|
||||
class wptmModelCategories extends Model {
|
||||
|
||||
|
||||
public function getCategories() {
|
||||
global $wpdb;
|
||||
$query = 'SELECT c.* FROM '.$wpdb->prefix.'wptm_categories as c WHERE c.level >0 ORDER BY c.lft ASC';
|
||||
$result = $wpdb->query($query);
|
||||
if($result===false){
|
||||
return false;
|
||||
}
|
||||
return stripslashes_deep($wpdb->get_results($query,OBJECT));
|
||||
}
|
||||
|
||||
public function delete($nodeId){
|
||||
global $wpdb;
|
||||
$wpdb->query('START TRANSACTION');
|
||||
if(!$this->_delete($nodeId)){
|
||||
$wpdb->query('ROLLBACK');
|
||||
return false;
|
||||
}
|
||||
$wpdb->query('COMMIT');
|
||||
return true;
|
||||
}
|
||||
|
||||
private function _delete($nodeId){
|
||||
global $wpdb;
|
||||
$query = 'SELECT rgt,lft,level FROM '.$wpdb->prefix.'wptm_categories WHERE id='.(int)$nodeId;
|
||||
$nodeInfos = $wpdb->get_row($query);
|
||||
if($nodeInfos===false){
|
||||
return false;
|
||||
}
|
||||
|
||||
$width = $nodeInfos->rgt - $nodeInfos->lft + 1;
|
||||
|
||||
//Delete node
|
||||
$query = 'DELETE FROM '.$wpdb->prefix.'wptm_categories WHERE
|
||||
lft >= '.$nodeInfos->lft.' AND
|
||||
rgt <= '.$nodeInfos->rgt;
|
||||
if($wpdb->query($query)===false){
|
||||
return false;
|
||||
}
|
||||
|
||||
//Update right brothers
|
||||
$query = 'UPDATE '.$wpdb->prefix.'wptm_categories SET
|
||||
lft = lft - '.$width.',
|
||||
rgt = rgt - '.$width.'
|
||||
WHERE
|
||||
lft > '.$nodeInfos->rgt.' AND
|
||||
rgt > '.$nodeInfos->rgt;
|
||||
if($wpdb->query($query)===false){
|
||||
return false;
|
||||
}
|
||||
|
||||
//Update parents
|
||||
$query = 'UPDATE '.$wpdb->prefix.'wptm_categories SET
|
||||
|
||||
rgt = rgt - '.$width.'
|
||||
WHERE
|
||||
lft < '.$nodeInfos->lft.' AND
|
||||
rgt > '.$nodeInfos->rgt;
|
||||
if($wpdb->query($query)===false){
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @global type $wpdb
|
||||
* @param int $nodeTo id to the reference node
|
||||
* @param array $nodes array of nodes to insert ordered by left asc
|
||||
* @param type $where
|
||||
* @return boolean
|
||||
*/
|
||||
private function _insert($nodeTo,$nodes,$where='first-child',$refInfos=null){
|
||||
global $wpdb;
|
||||
$query = 'SELECT rgt,lft,level,parent_id FROM '.$wpdb->prefix.'wptm_categories WHERE id='.(int)$nodeTo;
|
||||
$nodeToInfos = $wpdb->get_row($query);
|
||||
if($nodeToInfos===false){
|
||||
return false;
|
||||
}
|
||||
|
||||
//Get the node width
|
||||
$maxRgt = 0;
|
||||
$minLft = $nodes[0]->lft;
|
||||
foreach ($nodes as $node) {
|
||||
$minLft = min($node->lft, $minLft);
|
||||
$maxRgt = max($node->rgt, $maxRgt);
|
||||
}
|
||||
$width = $maxRgt - $minLft +1;
|
||||
|
||||
//Update parents
|
||||
if($where=='first-child'){
|
||||
//Update right brothers
|
||||
$query = 'UPDATE '.$wpdb->prefix.'wptm_categories SET
|
||||
lft = lft + '.$width.',
|
||||
rgt = rgt + '.$width.'
|
||||
WHERE
|
||||
lft > '.$nodeToInfos->lft.' AND
|
||||
rgt > '.$nodeToInfos->lft;
|
||||
if($wpdb->query($query)===false){
|
||||
return false;
|
||||
}
|
||||
|
||||
//insert at first position
|
||||
$query = 'UPDATE '.$wpdb->prefix.'wptm_categories SET
|
||||
|
||||
rgt = rgt + '.$width.'
|
||||
WHERE
|
||||
lft <= '.$nodeToInfos->lft.' AND
|
||||
rgt >= '.$nodeToInfos->rgt;
|
||||
if($wpdb->query($query)===false){
|
||||
return false;
|
||||
}
|
||||
|
||||
//new position left
|
||||
$leftTo = $nodeToInfos->lft+1;
|
||||
$diffLevel = $nodeToInfos->level + 1 - $nodes[0]->level;
|
||||
}else{
|
||||
//Update right brothers
|
||||
$query = 'UPDATE '.$wpdb->prefix.'wptm_categories SET
|
||||
lft = lft + '.$width.',
|
||||
rgt = rgt + '.$width.'
|
||||
WHERE
|
||||
lft > '.$nodeToInfos->rgt.' AND
|
||||
rgt > '.$nodeToInfos->rgt;
|
||||
if($wpdb->query($query)===false){
|
||||
return false;
|
||||
}
|
||||
|
||||
//insert after element
|
||||
$query = 'UPDATE '.$wpdb->prefix.'wptm_categories SET
|
||||
|
||||
rgt = rgt + '.($width).'
|
||||
WHERE
|
||||
lft <= '.$nodeToInfos->lft.' AND
|
||||
rgt > '.$nodeToInfos->rgt;
|
||||
if($wpdb->query($query)===false){
|
||||
return false;
|
||||
}
|
||||
//new position left
|
||||
$leftTo = $nodeToInfos->rgt+1;
|
||||
$diffLevel = $nodeToInfos->level - $nodes[0]->level;
|
||||
}
|
||||
|
||||
$diff = $minLft;
|
||||
//prepare and insert old nodes
|
||||
foreach ($nodes as $NodeElement){
|
||||
$NodeElement->lft += $leftTo-$diff;
|
||||
$NodeElement->rgt += $leftTo-$diff;
|
||||
$NodeElement->level += $diffLevel;
|
||||
$keys = array();
|
||||
$values = array();
|
||||
foreach ($NodeElement as $key => $value){
|
||||
$keys[] = '`'.$key.'`';
|
||||
$values[] = '"'.addslashes($value).'"';
|
||||
}
|
||||
$query = 'INSERT INTO '.$wpdb->prefix.'wptm_categories ('.implode(',', $keys).') VALUES ('.implode(',',$values).')';
|
||||
if($wpdb->query($query)===false){
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
//update parent value
|
||||
if($where=='first-child'){
|
||||
$query = 'UPDATE '.$wpdb->prefix.'wptm_categories SET
|
||||
parent_id = '.$refInfos->id.'
|
||||
WHERE
|
||||
id = '.(int)$nodes[0]->id;
|
||||
if($wpdb->query($query)===false){
|
||||
return false;
|
||||
}
|
||||
}else{
|
||||
$query = 'UPDATE '.$wpdb->prefix.'wptm_categories SET
|
||||
parent_id = '.$refInfos->parent_id.'
|
||||
WHERE
|
||||
id = '.(int)$nodes[0]->id;
|
||||
if($wpdb->query($query)===false){
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
public function move($node,$ref,$position='first-child'){
|
||||
global $wpdb;
|
||||
$wpdb->query('START TRANSACTION');
|
||||
if(!$this->_move($node,$ref,$position)){
|
||||
$wpdb->query('ROLLBACK');
|
||||
return false;
|
||||
}
|
||||
$wpdb->query('COMMIT');
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Move a node $node to the $position of $ref element
|
||||
* @param int $node
|
||||
* @param int $ref
|
||||
* @param string $position
|
||||
*/
|
||||
private function _move($node,$ref,$position='first-child'){
|
||||
global $wpdb;
|
||||
|
||||
$query = 'SELECT rgt,lft,level FROM '.$wpdb->prefix.'wptm_categories WHERE id='.(int)$node;
|
||||
|
||||
$nodeInfos = $wpdb->get_row($query);
|
||||
if($nodeInfos===false){
|
||||
return false;
|
||||
}
|
||||
|
||||
$query = 'SELECT id,rgt,lft,level,parent_id FROM '.$wpdb->prefix.'wptm_categories WHERE ';
|
||||
if($ref=='0'){
|
||||
//case ROOT
|
||||
$query .= 'level=0 LIMIT 0,1';
|
||||
}else{
|
||||
$query .= 'id='.(int)$ref;
|
||||
}
|
||||
$refInfos = $wpdb->get_row($query);
|
||||
if($refInfos===false){
|
||||
return false;
|
||||
}
|
||||
|
||||
$query = 'SELECT * FROM '.$wpdb->prefix.'wptm_categories WHERE lft >= '.(int)$nodeInfos->lft.' AND rgt <= '.(int)$nodeInfos->rgt.' ORDER BY lft ASC';
|
||||
$nodes = $wpdb->get_results($query);
|
||||
if($nodes===false){
|
||||
return false;
|
||||
}
|
||||
|
||||
if(!$this->_delete($node)){
|
||||
return false;
|
||||
}
|
||||
if(!$this->_insert($ref,$nodes,$position,$refInfos)){
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,25 @@
|
||||
<?php
|
||||
/**
|
||||
* WP Table Manager
|
||||
*
|
||||
* @package WP Table Manager
|
||||
* @author Joomunited
|
||||
* @version 1.0
|
||||
*/
|
||||
|
||||
use Joomunited\WPFramework\v1_0_4\Model;
|
||||
|
||||
defined( 'ABSPATH' ) || die();
|
||||
|
||||
class wptmModelCategory extends Model {
|
||||
|
||||
function isCategoryExist($id_category) {
|
||||
global $wpdb;
|
||||
$query = 'SELECT c.id FROM '.$wpdb->prefix.'wptm_categories as c WHERE c.id='.(int)$id_category;
|
||||
$result = $wpdb->query($query);
|
||||
if(!$result){
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,38 @@
|
||||
<?php
|
||||
/**
|
||||
* WP Table Manager
|
||||
*
|
||||
* @package WP Table Manager
|
||||
* @author Joomunited
|
||||
* @version 1.0
|
||||
*/
|
||||
|
||||
use Joomunited\WPFramework\v1_0_4\Model;
|
||||
use Joomunited\WPFramework\v1_0_4\Factory;
|
||||
|
||||
defined( 'ABSPATH' ) || die();
|
||||
|
||||
class wptmModelConfig extends Model {
|
||||
|
||||
public function getConfig(){
|
||||
|
||||
$defaultConfig = array('enable_import_excel'=>1,'export_excel_format'=>'xlsx','enable_tooltip'=> 0, 'enable_autosave'=> 1, 'sync_periodicity' => 0 ,'enable_frontend'=>0);
|
||||
$config = (array)get_option('_wptm_global_config', $defaultConfig);
|
||||
$config = array_merge($defaultConfig, $config);
|
||||
|
||||
return $config;
|
||||
}
|
||||
|
||||
public function save($datas){
|
||||
$config = get_option('_wptm_global_config');
|
||||
foreach ($datas as $key => $value) {
|
||||
$config[$key]= $value;
|
||||
}
|
||||
|
||||
$result = update_option('_wptm_global_config', $config);
|
||||
return $result;
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
@@ -0,0 +1,26 @@
|
||||
<?php
|
||||
/**
|
||||
* WP Table Manager
|
||||
*
|
||||
* @package WP Table Manager
|
||||
* @author Joomunited
|
||||
* @version 1.0
|
||||
*/
|
||||
|
||||
use Joomunited\WPFramework\v1_0_4\Model;
|
||||
|
||||
defined( 'ABSPATH' ) || die();
|
||||
|
||||
class wptmModelStyle extends Model {
|
||||
|
||||
public function getItem($id) {
|
||||
global $wpdb;
|
||||
$query = 'SELECT c.* FROM '.$wpdb->prefix.'wptm_styles as c WHERE c.id='.(int)$id;
|
||||
$result = $wpdb->query($query);
|
||||
if($result===false){
|
||||
return false;
|
||||
}
|
||||
return stripslashes_deep($wpdb->get_row($query,OBJECT));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,28 @@
|
||||
<?php
|
||||
/**
|
||||
* WP Table Manager
|
||||
*
|
||||
* @package WP Table Manager
|
||||
* @author Joomunited
|
||||
* @version 1.0
|
||||
*/
|
||||
|
||||
use Joomunited\WPFramework\v1_0_4\Model;
|
||||
|
||||
defined( 'ABSPATH' ) || die();
|
||||
|
||||
class wptmModelStyles extends Model {
|
||||
|
||||
|
||||
public function getStyles() {
|
||||
global $wpdb;
|
||||
$query = 'SELECT c.* FROM '.$wpdb->prefix.'wptm_styles as c ORDER BY c.ordering ASC';
|
||||
$result = $wpdb->query($query);
|
||||
if($result===false){
|
||||
return false;
|
||||
}
|
||||
return stripslashes_deep($wpdb->get_results($query,OBJECT));
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@@ -0,0 +1,150 @@
|
||||
<?php
|
||||
/**
|
||||
* WP Table Manager
|
||||
*
|
||||
* @package WP Table Manager
|
||||
* @author Joomunited
|
||||
* @version 1.0
|
||||
*/
|
||||
|
||||
use Joomunited\WPFramework\v1_0_4\Model;
|
||||
|
||||
defined( 'ABSPATH' ) || die();
|
||||
|
||||
class wptmModelTable extends Model {
|
||||
|
||||
public function save($id_table,$datas) {
|
||||
global $wpdb;
|
||||
$hash = md5($datas['style'].$datas['css']);
|
||||
|
||||
if(empty($datas['datas']) ) {
|
||||
$result = $wpdb->update( $wpdb->prefix."wptm_tables" ,
|
||||
array( 'style'=>$datas['style'],'css'=>$datas['css'],'hash'=> $hash ),
|
||||
array( 'ID' => (int)$id_table ) );
|
||||
}else {
|
||||
$result = $wpdb->update( $wpdb->prefix."wptm_tables" ,
|
||||
array( 'datas' => $datas['datas'],'style'=>$datas['style'],'css'=>$datas['css'],'hash'=> $hash, 'params'=>json_encode($datas['params']) ),
|
||||
array( 'ID' => (int)$id_table ) );
|
||||
}
|
||||
|
||||
|
||||
if($result===false) {
|
||||
echo $wpdb->last_query ;
|
||||
exit();
|
||||
}
|
||||
if($result==0) {
|
||||
$result = $id_table;
|
||||
}
|
||||
|
||||
return $result;
|
||||
}
|
||||
|
||||
public function add($id_category) {
|
||||
global $wpdb;
|
||||
|
||||
$query = 'SELECT MAX(c.position) AS lastPos FROM '.$wpdb->prefix.'wptm_tables as c WHERE c.id_category='.(int)$id_category;
|
||||
$lastPos = (int)$wpdb->get_var($query);
|
||||
$lastPos++;
|
||||
$wpdb->query( $wpdb->prepare(
|
||||
"
|
||||
INSERT INTO ".$wpdb->prefix."wptm_tables (id_category, title, created_time, modified_time, author, position) VALUES
|
||||
( %d,%s,%s,%s,%d,%d)
|
||||
",
|
||||
$id_category,__('New table','wp-smart-editor'),date("Y-m-d H:i:s"),date("Y-m-d H:i:s"),get_current_user_id(), $lastPos
|
||||
) );
|
||||
return $wpdb->insert_id;
|
||||
}
|
||||
public function copy($id_table) {
|
||||
global $wpdb;
|
||||
|
||||
$query = 'SELECT c.* FROM '.$wpdb->prefix.'wptm_tables as c WHERE c.id='.(int)$id_table;
|
||||
$result = $wpdb->query($query);
|
||||
if($result===false){
|
||||
return false;
|
||||
}
|
||||
$table = $wpdb->get_row($query,OBJECT);
|
||||
$wpdb->query( $wpdb->prepare(
|
||||
"
|
||||
INSERT INTO ".$wpdb->prefix."wptm_tables (id_category, title,datas,style,css,hash,params,created_time, modified_time, author, position) VALUES
|
||||
( %d,%s,%s,%s,%s,%s,%s,%s,%s,%d,%d)
|
||||
",
|
||||
$table->id_category,$table->title. __(" (copy)", 'wp-smart-editor'),$table->datas,$table->style,$table->css,$table->hash,$table->params,date("Y-m-d H:i:s"),date("Y-m-d H:i:s"),get_current_user_id(),$table->position
|
||||
) );
|
||||
return $wpdb->insert_id;
|
||||
}
|
||||
public function delete($id) {
|
||||
global $wpdb;
|
||||
$result = $wpdb->delete( $wpdb->prefix."wptm_tables" , array( 'id' => (int)$id ) );
|
||||
|
||||
return $result;
|
||||
}
|
||||
|
||||
public function setTitle($id, $title) {
|
||||
global $wpdb;
|
||||
$result = $wpdb->update( $wpdb->prefix."wptm_tables" , array( 'title' => $title ), array( 'id' => (int)$id ) );
|
||||
|
||||
return $result;
|
||||
}
|
||||
|
||||
public function getItem($id) {
|
||||
global $wpdb;
|
||||
$query = 'SELECT c.* FROM '.$wpdb->prefix.'wptm_tables as c WHERE c.id='.(int)$id;
|
||||
$result = $wpdb->query($query);
|
||||
if($result===false){
|
||||
return false;
|
||||
}
|
||||
$item = $wpdb->get_row($query,OBJECT);
|
||||
|
||||
$item->params = str_replace(array("\n\r","\r\n", "\n", "\r", " "), " ",$item->params );
|
||||
$params = json_decode( $item->params);
|
||||
if (!isset($params->query)){
|
||||
$params->query = '';
|
||||
}
|
||||
$item->params = $params;
|
||||
$params->query = str_replace(array("\n\r","\r\n", "\n", "\r", " "), " ",$params->query );
|
||||
if( $params->query) {
|
||||
$tableData = $this->getTableData($params->query . " Limit 50");
|
||||
$cols = array_keys($tableData[0] );
|
||||
$headerCols = array();
|
||||
$i= 0;
|
||||
foreach ($cols as $col) {
|
||||
$headerCols[$col] = $params->custom_titles[$i];
|
||||
$i++;
|
||||
}
|
||||
array_unshift($tableData, $headerCols);
|
||||
$item->datas = json_encode($tableData);
|
||||
$item->query = $params->query;
|
||||
}
|
||||
return stripslashes_deep($item);
|
||||
}
|
||||
|
||||
public function setPosition($tables) {
|
||||
global $wpdb;
|
||||
$i = 1;
|
||||
$ids = explode(",",$tables);
|
||||
foreach ($ids as $id) {
|
||||
$result = $wpdb->update( $wpdb->prefix."wptm_tables" , array( 'position' => $i ), array( 'id' => (int)$id ) );
|
||||
$i++;
|
||||
}
|
||||
|
||||
return $result;
|
||||
}
|
||||
|
||||
public function setCategory($id,$category) {
|
||||
global $wpdb;
|
||||
$result = $wpdb->update( $wpdb->prefix."wptm_tables" , array( 'id_category' => $category, 'position' => 0 ), array( 'id' => (int)$id ) );
|
||||
|
||||
return $result;
|
||||
}
|
||||
|
||||
// get result data of build query
|
||||
public function getTableData($query) {
|
||||
global $wpdb;
|
||||
|
||||
$result = $wpdb->query($query);
|
||||
if($result===false){
|
||||
return false;
|
||||
}
|
||||
return $wpdb->get_results($query, ARRAY_A);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,38 @@
|
||||
<?php
|
||||
/**
|
||||
* WP Table Manager
|
||||
*
|
||||
* @package WP Table Manager
|
||||
* @author Joomunited
|
||||
* @version 1.0
|
||||
*/
|
||||
|
||||
use Joomunited\WPFramework\v1_0_4\Model;
|
||||
|
||||
defined( 'ABSPATH' ) || die();
|
||||
|
||||
class wptmModelTables extends Model {
|
||||
|
||||
|
||||
public function getItems() {
|
||||
global $wpdb;
|
||||
$show_all = true;
|
||||
$user_id = get_current_user_id();
|
||||
if (!user_can($user_id, 'edit_others_posts')) {
|
||||
$show_all = false;
|
||||
}
|
||||
|
||||
if($show_all) {
|
||||
$query = 'SELECT c.* FROM '.$wpdb->prefix.'wptm_tables as c ORDER BY c.id_category ASC, c.position ASC ';
|
||||
}else {
|
||||
$query = 'SELECT c.* FROM '.$wpdb->prefix.'wptm_tables as c WHERE c.author = '.$user_id.' ORDER BY c.id_category ASC, c.position ASC ';
|
||||
}
|
||||
$result = $wpdb->query($query);
|
||||
if($result===false){
|
||||
return false;
|
||||
}
|
||||
return stripslashes_deep($wpdb->get_results($query,OBJECT));
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user