first commit

This commit is contained in:
2024-11-10 21:08:49 +01:00
commit 0d932ce5ee
14455 changed files with 2567501 additions and 0 deletions

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@@ -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", "&#10;"), " ",$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", "&#10;"), " ",$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);
}
}

View File

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