Merged release/3.4.0 into bugfix/PMC-1054

This commit is contained in:
Paula Quispe
2019-08-14 11:46:35 -04:00
3 changed files with 268 additions and 250 deletions

View File

@@ -25,35 +25,35 @@
* *
*/ */
/* vim: set expandtab tabstop=4 shiftwidth=4: */ /* vim: set expandtab tabstop=4 shiftwidth=4: */
// +----------------------------------------------------------------------+ // +----------------------------------------------------------------------+
// | TemplatePower: | // | TemplatePower: |
// | offers you the ability to separate your PHP code and your HTML | // | offers you the ability to separate your PHP code and your HTML |
// +----------------------------------------------------------------------+ // +----------------------------------------------------------------------+
// | | // | |
// | Copyright (C) 2001,2002 R.P.J. Velzeboer, The Netherlands | // | Copyright (C) 2001,2002 R.P.J. Velzeboer, The Netherlands |
// | | // | |
// | This program is free software; you can redistribute it and/or | // | This program is free software; you can redistribute it and/or |
// | modify it under the terms of the GNU General Public License | // | modify it under the terms of the GNU General Public License |
// | as published by the Free Software Foundation; either version 2 | // | as published by the Free Software Foundation; either version 2 |
// | of the License, or (at your option) any later version. | // | of the License, or (at your option) any later version. |
// | | // | |
// | This program is distributed in the hope that it will be useful, | // | This program is distributed in the hope that it will be useful, |
// | but WITHOUT ANY WARRANTY; without even the implied warranty of | // | but WITHOUT ANY WARRANTY; without even the implied warranty of |
// | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | // | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
// | GNU General Public License for more details. | // | GNU General Public License for more details. |
// | | // | |
// | You should have received a copy of the GNU General Public License | // | You should have received a copy of the GNU General Public License |
// | along with this program; if not, write to the Free Software | // | along with this program; if not, write to the Free Software |
// | Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA | // | Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA |
// | 02111-1307, USA. | // | 02111-1307, USA. |
// | | // | |
// | Author: R.P.J. Velzeboer, rovel@codocad.nl The Netherlands | // | Author: R.P.J. Velzeboer, rovel@codocad.nl The Netherlands |
// | | // | |
// +----------------------------------------------------------------------+ // +----------------------------------------------------------------------+
// | http://templatepower.codocad.com | // | http://templatepower.codocad.com |
// +----------------------------------------------------------------------+ // +----------------------------------------------------------------------+
// //
// $Id: Version 3.0.2$ // $Id: Version 3.0.2$
/** /**
@@ -62,10 +62,10 @@
* *
*/ */
define( "T_BYFILE", 0 ); define("T_BYFILE", 0);
define( "T_BYVAR", 1 ); define("T_BYVAR", 1);
define( "TP_ROOTBLOCK", '_ROOT' ); define("TP_ROOTBLOCK", '_ROOT');
/** /**
* class TemplatePowerParser * class TemplatePowerParser
@@ -76,13 +76,13 @@ define( "TP_ROOTBLOCK", '_ROOT' );
class TemplatePowerParser class TemplatePowerParser
{ {
public $tpl_base; public $tpl_base;
//Array( [filename/varcontent], [T_BYFILE/T_BYVAR] ) //Array( [filename/varcontent], [T_BYFILE/T_BYVAR] )
public $tpl_include; public $tpl_include;
//Array( [filename/varcontent], [T_BYFILE/T_BYVAR] ) //Array( [filename/varcontent], [T_BYFILE/T_BYVAR] )
public $tpl_count; public $tpl_count;
public $parent = Array (); public $parent = [];
// $parent[{blockname}] = {parentblockname} // $parent[{blockname}] = {parentblockname}
public $defBlock = Array (); public $defBlock = [];
public $rootBlockName; public $rootBlockName;
public $ignore_stack; public $ignore_stack;
public $version; public $version;
@@ -95,116 +95,117 @@ class TemplatePowerParser
* @param string $type * @param string $type
* @access private * @access private
*/ */
public function TemplatePowerParser ($tpl_file, $type) public function __construct($tpl_file, $type)
{ {
$this->version = '3.0.2'; $this->version = '3.0.2';
$this->tpl_base = Array ($tpl_file,$type); $this->tpl_base = [$tpl_file, $type];
$this->tpl_count = 0; $this->tpl_count = 0;
$this->ignore_stack = Array (false); $this->ignore_stack = [false];
} }
/** /**
* TemplatePowerParser::__errorAlert() * TemplatePowerParser::errorAlert()
* *
* @param string $message * @param string $message
* *
* @access private * @access private
*/ */
public function __errorAlert ($message) public function errorAlert($message)
{ {
print ('<br>' . $message . '<br>' . "\r\n") ; print ('<br>' . $message . '<br>' . "\r\n");
} }
/** /**
* TemplatePowerParser::__prepare() * TemplatePowerParser::prepare()
* *
* @access private * @access private
* @return void * @return void
*/ */
public function __prepare () public function prepare()
{ {
$this->defBlock[TP_ROOTBLOCK] = Array (); $this->defBlock[TP_ROOTBLOCK] = [];
$tplvar = $this->__prepareTemplate( $this->tpl_base[0], $this->tpl_base[1] ); $tplvar = $this->prepareTemplate($this->tpl_base[0], $this->tpl_base[1]);
$initdev["varrow"] = 0; $initdev["varrow"] = 0;
$initdev["coderow"] = 0; $initdev["coderow"] = 0;
$initdev["index"] = 0; $initdev["index"] = 0;
$initdev["ignore"] = false; $initdev["ignore"] = false;
$this->__parseTemplate( $tplvar, TP_ROOTBLOCK, $initdev ); $this->parseTemplate($tplvar, TP_ROOTBLOCK, $initdev);
$this->__cleanUp(); $this->cleanUp();
} }
/** /**
* TemplatePowerParser::__cleanUp() * TemplatePowerParser::cleanUp()
* *
* @return void * @return void
* *
* @access private * @access private
*/ */
public function __cleanUp () public function cleanUp()
{ {
for ($i = 0; $i <= $this->tpl_count; $i ++) { for ($i = 0; $i <= $this->tpl_count; $i++) {
$tplvar = 'tpl_rawContent' . $i; $tplvar = 'tpl_rawContent' . $i;
unset( $this->{$tplvar} ); unset($this->{$tplvar});
} }
} }
/** /**
* TemplatePowerParser::__prepareTemplate() * TemplatePowerParser::prepareTemplate()
* *
* @param string $tpl_file * @param string $tpl_file
* @param string $type * @param string $type
* @access private * @access private
*/ */
public function __prepareTemplate ($tpl_file, $type) public function prepareTemplate($tpl_file, $type)
{ {
$tplvar = 'tpl_rawContent' . $this->tpl_count; $tplvar = 'tpl_rawContent' . $this->tpl_count;
if ($type == T_BYVAR) { if ($type == T_BYVAR) {
$this->{$tplvar}["content"] = preg_split( "/\n/", $tpl_file, - 1, PREG_SPLIT_DELIM_CAPTURE ); $this->{$tplvar}["content"] = preg_split("/\r\n/", $tpl_file, -1, PREG_SPLIT_DELIM_CAPTURE);
} else { } else {
//Trigger the error in the local scope of the function //Trigger the error in the local scope of the function
//trigger_error ("Some error", E_USER_WARNING); //trigger_error ("Some error", E_USER_WARNING);
$this->{$tplvar}["content"] = @file( $tpl_file ) or die( $this->__errorAlert( 'TemplatePower Error: Couldn\'t open [ ' . $tpl_file . ' ]!' ) ); $this->{$tplvar}["content"] = @file($tpl_file) or die($this->errorAlert('TemplatePower Error: Couldn\'t open [ ' . $tpl_file . ' ]!'));
} }
$this->{$tplvar}["size"] = sizeof( $this->{$tplvar}["content"] ); $this->{$tplvar}["size"] = sizeof($this->{$tplvar}["content"]);
$this->tpl_count ++; $this->tpl_count++;
return $tplvar; return $tplvar;
} }
/** /**
* TemplatePowerParser::__parseTemplate() * TemplatePowerParser::parseTemplate()
* *
* @param string $tplvar * @param string $tplvar
* @param string $blockname * @param string $blockname
* @param string $initdev * @param string $initdev
* @access private * @access private
*/ */
public function __parseTemplate ($tplvar, $blockname, $initdev) public function parseTemplate($tplvar, $blockname, $initdev)
{ {
$coderow = $initdev["coderow"]; $coderow = $initdev["coderow"];
$varrow = $initdev["varrow"]; $varrow = $initdev["varrow"];
$index = $initdev["index"]; $index = $initdev["index"];
$ignore = $initdev["ignore"]; $ignore = $initdev["ignore"];
while ($index < $this->{$tplvar}["size"]) { while ($index < $this->{$tplvar}["size"]) {
if (preg_match( '/<!--[ ]?(START|END) IGNORE -->/', $this->{$tplvar}["content"][$index], $ignreg )) { if (preg_match('/<!--[ ]?(START|END) IGNORE -->/', $this->{$tplvar}["content"][$index], $ignreg)) {
if ($ignreg[1] == 'START') { if ($ignreg[1] == 'START') {
//$ignore = true; //$ignore = true;
array_push( $this->ignore_stack, true ); array_push($this->ignore_stack, true);
} else { } else {
//$ignore = false; //$ignore = false;
array_pop( $this->ignore_stack ); array_pop($this->ignore_stack);
} }
} else { } else {
if (! end( $this->ignore_stack )) { if (!end($this->ignore_stack)) {
if (preg_match( '/<!--[ ]?(START|END|INCLUDE|INCLUDESCRIPT|REUSE) BLOCK : (.+)-->/', $this->{$tplvar}["content"][$index], $regs )) { if (preg_match('/<!--[ ]?(START|END|INCLUDE|INCLUDESCRIPT|REUSE) BLOCK : (.+)-->/',
//remove trailing and leading spaces $this->{$tplvar}["content"][$index], $regs)) {
$regs[2] = trim( $regs[2] ); //remove trailing and leading spaces
$regs[2] = trim($regs[2]);
if ($regs[1] == 'INCLUDE') { if ($regs[1] == 'INCLUDE') {
$include_defined = true; $include_defined = true;
//check if the include file is assigned //check if the include file is assigned
if (isset( $this->tpl_include[$regs[2]] )) { if (isset($this->tpl_include[$regs[2]])) {
$tpl_file = $this->tpl_include[$regs[2]][0]; $tpl_file = $this->tpl_include[$regs[2]][0];
$type = $this->tpl_include[$regs[2]][1]; $type = $this->tpl_include[$regs[2]][1];
} elseif (file_exists( $regs[2] )) { } elseif (file_exists($regs[2])) {
//check if defined as constant in template //check if defined as constant in template
$tpl_file = $regs[2]; $tpl_file = $regs[2];
$type = T_BYFILE; $type = T_BYFILE;
@@ -213,24 +214,24 @@ class TemplatePowerParser
} }
if ($include_defined) { if ($include_defined) {
//initialize startvalues for recursive call //initialize startvalues for recursive call
$initdev["varrow"] = $varrow; $initdev["varrow"] = $varrow;
$initdev["coderow"] = $coderow; $initdev["coderow"] = $coderow;
$initdev["index"] = 0; $initdev["index"] = 0;
$initdev["ignore"] = false; $initdev["ignore"] = false;
$tplvar2 = $this->__prepareTemplate( $tpl_file, $type ); $tplvar2 = $this->prepareTemplate($tpl_file, $type);
$initdev = $this->__parseTemplate( $tplvar2, $blockname, $initdev ); $initdev = $this->parseTemplate($tplvar2, $blockname, $initdev);
$coderow = $initdev["coderow"]; $coderow = $initdev["coderow"];
$varrow = $initdev["varrow"]; $varrow = $initdev["varrow"];
} }
} elseif ($regs[1] == 'INCLUDESCRIPT') { } elseif ($regs[1] == 'INCLUDESCRIPT') {
$include_defined = true; $include_defined = true;
//check if the includescript file is assigned by the assignInclude function //check if the includescript file is assigned by the assignInclude function
if (isset( $this->tpl_include[$regs[2]] )) { if (isset($this->tpl_include[$regs[2]])) {
$include_file = $this->tpl_include[$regs[2]][0]; $include_file = $this->tpl_include[$regs[2]][0];
$type = $this->tpl_include[$regs[2]][1]; $type = $this->tpl_include[$regs[2]][1];
} elseif (file_exists( $regs[2] )) { } elseif (file_exists($regs[2])) {
//check if defined as constant in template //check if defined as constant in template
$include_file = $regs[2]; $include_file = $regs[2];
$type = T_BYFILE; $type = T_BYFILE;
} else { } else {
@@ -239,111 +240,112 @@ class TemplatePowerParser
if ($include_defined) { if ($include_defined) {
ob_start(); ob_start();
if ($type == T_BYFILE) { if ($type == T_BYFILE) {
if (! @include_once ($include_file)) { if (!@include_once($include_file)) {
$this->__errorAlert( 'TemplatePower Error: Couldn\'t include script [ ' . $include_file . ' ]!' ); $this->errorAlert('TemplatePower Error: Couldn\'t include script [ ' . $include_file . ' ]!');
exit(); exit();
} }
} else { } else {
eval( "?>" . $include_file ); eval("?>" . $include_file);
} }
$this->defBlock[$blockname]["_C:$coderow"] = ob_get_contents(); $this->defBlock[$blockname]["_C:$coderow"] = ob_get_contents();
$coderow ++; $coderow++;
ob_end_clean(); ob_end_clean();
} }
} elseif ($regs[1] == 'REUSE') { } elseif ($regs[1] == 'REUSE') {
//do match for 'AS' //do match for 'AS'
if (preg_match( '/(.+) AS (.+)/', $regs[2], $reuse_regs )) { if (preg_match('/(.+) AS (.+)/', $regs[2], $reuse_regs)) {
$originalbname = trim( $reuse_regs[1] ); $originalbname = trim($reuse_regs[1]);
$copybname = trim( $reuse_regs[2] ); $copybname = trim($reuse_regs[2]);
//test if original block exist //test if original block exist
if (isset( $this->defBlock[$originalbname] )) { if (isset($this->defBlock[$originalbname])) {
//copy block //copy block
$this->defBlock[$copybname] = $this->defBlock[$originalbname]; $this->defBlock[$copybname] = $this->defBlock[$originalbname];
//tell the parent that he has a child block //tell the parent that he has a child block
$this->defBlock[$blockname]["_B:" . $copybname] = ''; $this->defBlock[$blockname]["_B:" . $copybname] = '';
//create index and parent info //create index and parent info
$this->index[$copybname] = 0; $this->index[$copybname] = 0;
$this->parent[$copybname] = $blockname; $this->parent[$copybname] = $blockname;
} else { } else {
$this->__errorAlert( 'TemplatePower Error: Can\'t find block \'' . $originalbname . '\' to REUSE as \'' . $copybname . '\'' ); $this->errorAlert('TemplatePower Error: Can\'t find block \'' . $originalbname . '\' to REUSE as \'' . $copybname . '\'');
} }
} else { } else {
//so it isn't a correct REUSE tag, save as code //so it isn't a correct REUSE tag, save as code
$this->defBlock[$blockname]["_C:$coderow"] = $this->{$tplvar}["content"][$index]; $this->defBlock[$blockname]["_C:$coderow"] = $this->{$tplvar}["content"][$index];
$coderow ++; $coderow++;
} }
} else { } else {
if ($regs[2] == $blockname) { if ($regs[2] == $blockname) {
//is it the end of a block //is it the end of a block
break; break;
} else { } else {
//its the start of a block //its the start of a block
//make a child block and tell the parent that he has a child //make a child block and tell the parent that he has a child
$this->defBlock[$regs[2]] = Array (); $this->defBlock[$regs[2]] = [];
$this->defBlock[$blockname]["_B:" . $regs[2]] = ''; $this->defBlock[$blockname]["_B:" . $regs[2]] = '';
//set some vars that we need for the assign functions etc. //set some vars that we need for the assign functions etc.
$this->index[$regs[2]] = 0; $this->index[$regs[2]] = 0;
$this->parent[$regs[2]] = $blockname; $this->parent[$regs[2]] = $blockname;
//prepare for the recursive call //prepare for the recursive call
$index ++; $index++;
$initdev["varrow"] = 0; $initdev["varrow"] = 0;
$initdev["coderow"] = 0; $initdev["coderow"] = 0;
$initdev["index"] = $index; $initdev["index"] = $index;
$initdev["ignore"] = false; $initdev["ignore"] = false;
$initdev = $this->__parseTemplate( $tplvar, $regs[2], $initdev ); $initdev = $this->parseTemplate($tplvar, $regs[2], $initdev);
$index = $initdev["index"]; $index = $initdev["index"];
} }
} }
} else { } else {
//is it code and/or var(s) //is it code and/or var(s)
//explode current template line on the curly bracket '{' //explode current template line on the curly bracket '{'
$sstr = explode( '{', $this->{$tplvar}["content"][$index] ); $sstr = explode('{', $this->{$tplvar}["content"][$index]);
reset( $sstr ); reset($sstr);
if (current( $sstr ) != '') { if (current($sstr) != '') {
//the template didn't start with a '{', //the template didn't start with a '{',
//so the first element of the array $sstr is just code //so the first element of the array $sstr is just code
$this->defBlock[$blockname]["_C:$coderow"] = current( $sstr ); $this->defBlock[$blockname]["_C:$coderow"] = current($sstr);
$coderow ++; $coderow++;
} }
while (next( $sstr )) { while (next($sstr)) {
//find the position of the end curly bracket '}' //find the position of the end curly bracket '}'
$pos = strpos( current( $sstr ), "}" ); $pos = strpos(current($sstr), "}");
if (($pos !== false) && ($pos > 0)) { if (($pos !== false) && ($pos > 0)) {
//a curly bracket '}' is found //a curly bracket '}' is found
//and at least on position 1, to eliminate '{}' //and at least on position 1, to eliminate '{}'
//note: position 1 taken without '{', because we did explode on '{' //note: position 1 taken without '{', because we did explode on '{'
$strlength = strlen( current( $sstr ) ); $strlength = strlen(current($sstr));
$varname = substr( current( $sstr ), 0, $pos ); $varname = substr(current($sstr), 0, $pos);
if (strstr( $varname, ' ' )) { if (strstr($varname, ' ')) {
//the varname contains one or more spaces //the varname contains one or more spaces
//so, it isn't a variable, save as code //so, it isn't a variable, save as code
$this->defBlock[$blockname]["_C:$coderow"] = '{' . current( $sstr ); $this->defBlock[$blockname]["_C:$coderow"] = '{' . current($sstr);
$coderow ++; $coderow++;
} else { } else {
//save the variable //save the variable
$this->defBlock[$blockname]["_V:$varrow"] = $varname; $this->defBlock[$blockname]["_V:$varrow"] = $varname;
$varrow ++; $varrow++;
//is there some code after the varname left? //is there some code after the varname left?
if (($pos + 1) != $strlength) { if (($pos + 1) != $strlength) {
//yes, save that code //yes, save that code
$this->defBlock[$blockname]["_C:$coderow"] = substr( current( $sstr ), ($pos + 1), ($strlength - ($pos + 1)) ); $this->defBlock[$blockname]["_C:$coderow"] = substr(current($sstr), ($pos + 1),
$coderow ++; ($strlength - ($pos + 1)));
$coderow++;
} }
} }
} else { } else {
//no end curly bracket '}' found //no end curly bracket '}' found
//so, the curly bracket is part of the text. Save as code, with the '{' //so, the curly bracket is part of the text. Save as code, with the '{'
$this->defBlock[$blockname]["_C:$coderow"] = '{' . current( $sstr ); $this->defBlock[$blockname]["_C:$coderow"] = '{' . current($sstr);
$coderow ++; $coderow++;
} }
} }
} }
} else { } else {
$this->defBlock[$blockname]["_C:$coderow"] = $this->{$tplvar}["content"][$index]; $this->defBlock[$blockname]["_C:$coderow"] = $this->{$tplvar}["content"][$index];
$coderow ++; $coderow++;
} }
} }
$index ++; $index++;
} }
$initdev["varrow"] = $varrow; $initdev["varrow"] = $varrow;
$initdev["coderow"] = $coderow; $initdev["coderow"] = $coderow;
@@ -354,10 +356,10 @@ class TemplatePowerParser
/** /**
* TemplatePowerParser::version() * TemplatePowerParser::version()
* *
* @return void * @return string
* @access public * @access public
*/ */
public function version () public function version()
{ {
return $this->version; return $this->version;
} }
@@ -371,9 +373,9 @@ class TemplatePowerParser
* @return void * @return void
* @access public * @access public
*/ */
public function assignInclude ($iblockname, $value, $type = T_BYFILE) public function assignInclude($iblockname, $value, $type = T_BYFILE)
{ {
$this->tpl_include["$iblockname"] = Array ($value,$type); $this->tpl_include["$iblockname"] = [$value, $type];
} }
} }
@@ -384,67 +386,67 @@ class TemplatePowerParser
*/ */
class TemplatePower extends TemplatePowerParser class TemplatePower extends TemplatePowerParser
{ {
public $index = Array (); public $index = [];
// $index[{blockname}] = {indexnumber} // $index[{blockname}] = {indexnumber}
public $content = Array (); public $content = [];
public $currentBlock; public $currentBlock;
public $showUnAssigned; public $showUnAssigned;
public $serialized; public $serialized;
public $globalvars = Array (); public $globalvars = [];
public $prepared; public $prepared;
/** /**
* TemplatePower::TemplatePower() * TemplatePower::__construct()
* *
* @param string $tpl_file * @param string $tpl_file
* @param string $type * @param string $type
* @return void * @return void
* @access public * @access public
*/ */
public function TemplatePower ($tpl_file = '', $type = T_BYFILE) public function __construct($tpl_file = '', $type = T_BYFILE)
{ {
TemplatePowerParser::TemplatePowerParser( $tpl_file, $type ); TemplatePowerParser::__construct($tpl_file, $type);
$this->prepared = false; $this->prepared = false;
$this->showUnAssigned = false; $this->showUnAssigned = false;
$this->serialized = false; $this->serialized = false;
//added: 26 April 2002 //added: 26 April 2002
} }
/** /**
* TemplatePower::__deSerializeTPL() * TemplatePower::deSerializeTPL()
* *
* @param string $stpl_file * @param string $stpl_file
* @param string $tplvar * @param string $tplvar
* @return void * @return void
* @access private * @access private
*/ */
public function __deSerializeTPL ($stpl_file, $type) public function deSerializeTPL($stpl_file, $type)
{ {
if ($type == T_BYFILE) { if ($type == T_BYFILE) {
$serializedTPL = @file( $stpl_file ) or die( $this->__errorAlert( 'TemplatePower Error: Can\'t open [ ' . $stpl_file . ' ]!' ) ); $serializedTPL = @file($stpl_file) or die($this->errorAlert('TemplatePower Error: Can\'t open [ ' . $stpl_file . ' ]!'));
} else { } else {
$serializedTPL = $stpl_file; $serializedTPL = $stpl_file;
} }
$serializedStuff = unserialize( join( '', $serializedTPL ) ); $serializedStuff = unserialize(join('', $serializedTPL));
$this->defBlock = $serializedStuff["defBlock"]; $this->defBlock = $serializedStuff["defBlock"];
$this->index = $serializedStuff["index"]; $this->index = $serializedStuff["index"];
$this->parent = $serializedStuff["parent"]; $this->parent = $serializedStuff["parent"];
} }
/** /**
* TemplatePower::__makeContentRoot() * TemplatePower::makeContentRoot()
* *
* @return void * @return void
* @access private * @access private
*/ */
public function __makeContentRoot () public function makeContentRoot()
{ {
$this->content[TP_ROOTBLOCK . "_0"][0] = Array (TP_ROOTBLOCK); $this->content[TP_ROOTBLOCK . "_0"][0] = [TP_ROOTBLOCK];
$this->currentBlock = &$this->content[TP_ROOTBLOCK . "_0"][0]; $this->currentBlock = &$this->content[TP_ROOTBLOCK . "_0"][0];
} }
/** /**
* TemplatePower::__assign() * TemplatePower::assignPrivate()
* *
* @param string $varname * @param string $varname
* @param string $value * @param string $value
@@ -452,13 +454,13 @@ class TemplatePower extends TemplatePowerParser
* *
* @access private * @access private
*/ */
public function __assign ($varname, $value) public function assignPrivate($varname, $value)
{ {
if (sizeof( $regs = explode( '.', $varname ) ) == 2) { if (sizeof($regs = explode('.', $varname)) == 2) {
//this is faster then preg_match //this is faster then preg_match
$ind_blockname = $regs[0] . '_' . $this->index[$regs[0]]; $ind_blockname = $regs[0] . '_' . $this->index[$regs[0]];
$lastitem = sizeof( $this->content[$ind_blockname] ); $lastitem = sizeof($this->content[$ind_blockname]);
$lastitem > 1 ? $lastitem -- : $lastitem = 0; $lastitem > 1 ? $lastitem-- : $lastitem = 0;
$block = &$this->content[$ind_blockname][$lastitem]; $block = &$this->content[$ind_blockname][$lastitem];
$varname = $regs[1]; $varname = $regs[1];
} else { } else {
@@ -468,48 +470,49 @@ class TemplatePower extends TemplatePowerParser
} }
/** /**
* TemplatePower::__assignGlobal() * TemplatePower::assignGlobalPrivate()
* *
* @param string $varname * @param string $varname
* @param string $value * @param string $value
* @return void * @return void
* @access private * @access private
*/ */
public function __assignGlobal ($varname, $value) public function assignGlobalPrivate($varname, $value)
{ {
$this->globalvars[$varname] = $value; $this->globalvars[$varname] = $value;
} }
/** /**
* TemplatePower::__outputContent() * TemplatePower::outputContent()
* *
* @param string $blockname * @param string $blockname
* @return void * @return void
* @access private * @access private
*/ */
public function __outputContent ($blockname) public function outputContent($blockname)
{ {
$numrows = sizeof( $this->content[$blockname] ); $numrows = sizeof($this->content[$blockname]);
for ($i = 0; $i < $numrows; $i ++) { for ($i = 0; $i < $numrows; $i++) {
$defblockname = $this->content[$blockname][$i][0]; $defblockname = $this->content[$blockname][$i][0];
for (reset( $this->defBlock[$defblockname] ); $k = key( $this->defBlock[$defblockname] ); next( $this->defBlock[$defblockname] )) { for (reset($this->defBlock[$defblockname]); $k = key($this->defBlock[$defblockname]); next($this->defBlock[$defblockname])) {
if ($k[1] == 'C') { if ($k[1] == 'C') {
print ($this->defBlock[$defblockname][$k]) ; print ($this->defBlock[$defblockname][$k]);
} elseif ($k[1] == 'V') { } elseif ($k[1] == 'V') {
$defValue = $this->defBlock[$defblockname][$k]; $defValue = $this->defBlock[$defblockname][$k];
if (! isset( $this->content[$blockname][$i]["_V:" . $defValue] )) { if (!isset($this->content[$blockname][$i]["_V:" . $defValue])) {
if (isset( $this->globalvars[$defValue] )) { if (isset($this->globalvars[$defValue])) {
$value = $this->globalvars[$defValue]; $value = $this->globalvars[$defValue];
} else { } else {
//Verify if $defValue is like //Verify if $defValue is like
// "xmlfile:ID_LABEL" // "xmlfile:ID_LABEL"
//if it is load an xml label. //if it is load an xml label.
//if not continues with non assigned value. //if not continues with non assigned value.
if (preg_match( "/(.+):(.+)/", $defValue, $xmlreg )) { if (preg_match("/(.+):(.+)/", $defValue, $xmlreg)) {
$value = G::LoadTranslation(/*$xmlreg[1],*/$xmlreg[2] ); $value = G::LoadTranslation(/*$xmlreg[1],*/
$xmlreg[2]);
} else { } else {
if ($this->showUnAssigned) { if ($this->showUnAssigned) {
//$value = '{'. $this->defBlock[ $defblockname ][$k] .'}'; //$value = '{'. $this->defBlock[ $defblockname ][$k] .'}';
$value = '{' . $defValue . '}'; $value = '{' . $defValue . '}';
} else { } else {
$value = ''; $value = '';
@@ -519,12 +522,13 @@ class TemplatePower extends TemplatePowerParser
} else { } else {
$value = $this->content[$blockname][$i]["_V:" . $defValue]; $value = $this->content[$blockname][$i]["_V:" . $defValue];
} }
if ($this->unhtmlentities) if ($this->unhtmlentities) {
$value = G::unhtmlentities( $value ); $value = G::unhtmlentities($value);
print ($value) ; }
print ($value);
} elseif ($k[1] == 'B') { } elseif ($k[1] == 'B') {
if (isset( $this->content[$blockname][$i][$k] )) { if (isset($this->content[$blockname][$i][$k])) {
$this->__outputContent( $this->content[$blockname][$i][$k] ); $this->outputContent($this->content[$blockname][$i][$k]);
} }
} }
} }
@@ -532,16 +536,16 @@ class TemplatePower extends TemplatePowerParser
} }
/** /**
* function __printVars * function printVars
* *
* @return void * @return void
* @access public * @access public
*/ */
public function __printVars () public function printVars()
{ {
var_dump( $this->defBlock ); var_dump($this->defBlock);
print ("<br>--------------------<br>") ; print ("<br>--------------------<br>");
var_dump( $this->content ); var_dump($this->content);
} }
/** /**
@@ -557,10 +561,10 @@ class TemplatePower extends TemplatePowerParser
* *
* @access public * @access public
*/ */
public function serializedBase () public function serializedBase()
{ {
$this->serialized = true; $this->serialized = true;
$this->__deSerializeTPL( $this->tpl_base[0], $this->tpl_base[1] ); $this->deSerializeTPL($this->tpl_base[0], $this->tpl_base[1]);
} }
/** /**
@@ -570,7 +574,7 @@ class TemplatePower extends TemplatePowerParser
* @return void * @return void
* @access public * @access public
*/ */
public function showUnAssigned ($state = true) public function showUnAssigned($state = true)
{ {
$this->showUnAssigned = $state; $this->showUnAssigned = $state;
} }
@@ -581,14 +585,14 @@ class TemplatePower extends TemplatePowerParser
* @return void * @return void
* @access public * @access public
*/ */
public function prepare () public function prepare()
{ {
if (! $this->serialized) { if (!$this->serialized) {
TemplatePowerParser::__prepare(); TemplatePowerParser::prepare();
} }
$this->prepared = true; $this->prepared = true;
$this->index[TP_ROOTBLOCK] = 0; $this->index[TP_ROOTBLOCK] = 0;
$this->__makeContentRoot(); $this->makeContentRoot();
} }
/** /**
@@ -598,28 +602,29 @@ class TemplatePower extends TemplatePowerParser
* @return void * @return void
* @access public * @access public
*/ */
public function newBlock ($blockname) public function newBlock($blockname)
{ {
$parent = &$this->content[$this->parent[$blockname] . '_' . $this->index[$this->parent[$blockname]]]; $parent = &$this->content[$this->parent[$blockname] . '_' . $this->index[$this->parent[$blockname]]];
$lastitem = sizeof( $parent ); $lastitem = sizeof($parent);
$lastitem > 1 ? $lastitem -- : $lastitem = 0; $lastitem > 1 ? $lastitem-- : $lastitem = 0;
$ind_blockname = $blockname . '_' . $this->index[$blockname]; $ind_blockname = $blockname . '_' . $this->index[$blockname];
if (! isset( $parent[$lastitem]["_B:$blockname"] )) { if (!isset($parent[$lastitem]["_B:$blockname"])) {
//ok, there is no block found in the parentblock with the name of {$blockname} //ok, there is no block found in the parentblock with the name of {$blockname}
//so, increase the index counter and create a new {$blockname} block //so, increase the index counter and create a new {$blockname} block
$this->index[$blockname] += 1; $this->index[$blockname] += 1;
$ind_blockname = $blockname . '_' . $this->index[$blockname]; $ind_blockname = $blockname . '_' . $this->index[$blockname];
if (! isset( $this->content[$ind_blockname] )) { if (!isset($this->content[$ind_blockname])) {
$this->content[$ind_blockname] = Array (); $this->content[$ind_blockname] = [];
} }
//tell the parent where his (possible) children are located //tell the parent where his (possible) children are located
$parent[$lastitem]["_B:$blockname"] = $ind_blockname; $parent[$lastitem]["_B:$blockname"] = $ind_blockname;
} }
//now, make a copy of the block defenition //now, make a copy of the block defenition
$blocksize = sizeof( $this->content[$ind_blockname] ); $blocksize = sizeof($this->content[$ind_blockname]);
$this->content[$ind_blockname][$blocksize] = Array ($blockname $this->content[$ind_blockname][$blocksize] = [
); $blockname
//link the current block to the block we just created ];
//link the current block to the block we just created
$this->currentBlock = &$this->content[$ind_blockname][$blocksize]; $this->currentBlock = &$this->content[$ind_blockname][$blocksize];
} }
@@ -632,14 +637,14 @@ class TemplatePower extends TemplatePowerParser
* *
* @access public * @access public
*/ */
public function assignGlobal ($varname, $value = '') public function assignGlobal($varname, $value = '')
{ {
if (is_array( $varname )) { if (is_array($varname)) {
foreach ($varname as $var => $value) { foreach ($varname as $var => $value) {
$this->__assignGlobal( $var, $value ); $this->assignGlobalPrivate($var, $value);
} }
} else { } else {
$this->__assignGlobal( $varname, $value ); $this->assignGlobalPrivate($varname, $value);
} }
} }
@@ -651,14 +656,14 @@ class TemplatePower extends TemplatePowerParser
* @return void * @return void
* @access public * @access public
*/ */
public function assign ($varname, $value = '') public function assign($varname, $value = '')
{ {
if (is_array( $varname )) { if (is_array($varname)) {
foreach ($varname as $var => $value) { foreach ($varname as $var => $value) {
$this->__assign( $var, $value ); $this->assignPrivate($var, $value);
} }
} else { } else {
$this->__assign( $varname, $value ); $this->assignPrivate($varname, $value);
} }
} }
@@ -669,14 +674,14 @@ class TemplatePower extends TemplatePowerParser
* @param string $blockname * @param string $blockname
* @access public * @access public
*/ */
public function gotoBlock ($blockname) public function gotoBlock($blockname)
{ {
if (isset( $this->defBlock[$blockname] )) { if (isset($this->defBlock[$blockname])) {
$ind_blockname = $blockname . '_' . $this->index[$blockname]; $ind_blockname = $blockname . '_' . $this->index[$blockname];
//get lastitem indexnumber //get lastitem indexnumber
$lastitem = sizeof( $this->content[$ind_blockname] ); $lastitem = sizeof($this->content[$ind_blockname]);
$lastitem > 1 ? $lastitem -- : $lastitem = 0; $lastitem > 1 ? $lastitem-- : $lastitem = 0;
//link the current block //link the current block
$this->currentBlock = &$this->content[$ind_blockname][$lastitem]; $this->currentBlock = &$this->content[$ind_blockname][$lastitem];
} }
} }
@@ -688,13 +693,13 @@ class TemplatePower extends TemplatePowerParser
* @param string $varname * @param string $varname
* @access public * @access public
*/ */
public function getVarValue ($varname) public function getVarValue($varname)
{ {
if (sizeof( $regs = explode( '.', $varname ) ) == 2) { if (sizeof($regs = explode('.', $varname)) == 2) {
//this is faster then preg_match{ //this is faster then preg_match{
$ind_blockname = $regs[0] . '_' . $this->index[$regs[0]]; $ind_blockname = $regs[0] . '_' . $this->index[$regs[0]];
$lastitem = sizeof( $this->content[$ind_blockname] ); $lastitem = sizeof($this->content[$ind_blockname]);
$lastitem > 1 ? $lastitem -- : $lastitem = 0; $lastitem > 1 ? $lastitem-- : $lastitem = 0;
$block = &$this->content[$ind_blockname][$lastitem]; $block = &$this->content[$ind_blockname][$lastitem];
$varname = $regs[1]; $varname = $regs[1];
} else { } else {
@@ -709,12 +714,12 @@ class TemplatePower extends TemplatePowerParser
* @return void * @return void
* @access public * @access public
*/ */
public function printToScreen () public function printToScreen()
{ {
if ($this->prepared) { if ($this->prepared) {
$this->__outputContent( TP_ROOTBLOCK . '_0' ); $this->outputContent(TP_ROOTBLOCK . '_0');
} else { } else {
$this->__errorAlert( 'TemplatePower Error: Template isn\'t prepared!' ); $this->errorAlert('TemplatePower Error: Template isn\'t prepared!');
} }
} }
@@ -724,7 +729,7 @@ class TemplatePower extends TemplatePowerParser
* @return void * @return void
* @access public * @access public
*/ */
public function getOutputContent () public function getOutputContent()
{ {
ob_start(); ob_start();
$this->printToScreen(); $this->printToScreen();

View File

@@ -625,6 +625,7 @@ function database_upgrade($args)
foreach ($workspaces as $workspace) { foreach ($workspaces as $workspace) {
try { try {
$workspace->upgradeDatabase(); $workspace->upgradeDatabase();
$workspace->close();
} catch (Exception $e) { } catch (Exception $e) {
G::outRes("> Error: " . CLI::error($e->getMessage()) . "\n"); G::outRes("> Error: " . CLI::error($e->getMessage()) . "\n");
} }

View File

@@ -1354,7 +1354,6 @@ class WorkspaceTools
// Ending the schema update // Ending the schema update
CLI::logging("-> Schema Updated\n"); CLI::logging("-> Schema Updated\n");
$this->closeDatabase();
return true; return true;
} }
@@ -2562,40 +2561,22 @@ class WorkspaceTools
throw new Exception($errorMessage); throw new Exception($errorMessage);
} }
// Clean the queries array // Updating PRO_ID field
$listQueries = []; $this->runUpdateListField(['LIST_CANCELED', 'LIST_INBOX', 'LIST_PARTICIPATED_LAST', 'LIST_UNASSIGNED'], 'updateListProId');
// Canceled List
$listQueries[] = new RunProcessUpgradeQuery($this->name, $this->updateListProId('LIST_CANCELED'));
$listQueries[] = new RunProcessUpgradeQuery($this->name, $this->updateListUsrId('LIST_CANCELED'));
$listQueries[] = new RunProcessUpgradeQuery($this->name, $this->updateListTasId('LIST_CANCELED'));
// Inbox List
$listQueries[] = new RunProcessUpgradeQuery($this->name, $this->updateListProId('LIST_INBOX'));
$listQueries[] = new RunProcessUpgradeQuery($this->name, $this->updateListUsrId('LIST_INBOX'));
$listQueries[] = new RunProcessUpgradeQuery($this->name, $this->updateListTasId('LIST_INBOX'));
$listQueries[] = new RunProcessUpgradeQuery($this->name, $this->updateListAppStatusId('LIST_INBOX'));
// Participated List
$listQueries[] = new RunProcessUpgradeQuery($this->name, $this->updateListProId('LIST_PARTICIPATED_LAST'));
$listQueries[] = new RunProcessUpgradeQuery($this->name, $this->updateListUsrId('LIST_PARTICIPATED_LAST'));
$listQueries[] = new RunProcessUpgradeQuery($this->name, $this->updateListTasId('LIST_PARTICIPATED_LAST'));
$listQueries[] = new RunProcessUpgradeQuery($this->name, $this->updateListAppStatusId('LIST_PARTICIPATED_LAST'));
$listQueries[] = new RunProcessUpgradeQuery($this->name, $this->updateListParticipatedLastCurrentUser());
// Unassigned List
$listQueries[] = new RunProcessUpgradeQuery($this->name, $this->updateListProId('LIST_UNASSIGNED'));
$listQueries[] = new RunProcessUpgradeQuery($this->name, $this->updateListTasId('LIST_UNASSIGNED'));
// Run queries in multiple threads for update the list tables // Updating TAS_ID field
$processesManager = new ProcessesManager($listQueries); $this->runUpdateListField(['LIST_CANCELED', 'LIST_INBOX', 'LIST_PARTICIPATED_LAST', 'LIST_UNASSIGNED'], 'updateListTasId');
$processesManager->run();
// If exists an error throw an exception // Updating USR_ID field
if (!empty($processesManager->getErrors())) { $this->runUpdateListField(['LIST_CANCELED', 'LIST_INBOX', 'LIST_PARTICIPATED_LAST'], 'updateListUsrId');
$errorMessage = '';
foreach ($processesManager->getErrors() as $error) {
$errorMessage .= $error['rawAnswer'] . PHP_EOL;
}
throw new Exception($errorMessage);
}
// Updating APP_STATUS_ID field
$this->runUpdateListField(['LIST_INBOX', 'LIST_PARTICIPATED_LAST'], 'updateListAppStatusId');
// Updating Last Current User Information
$this->runUpdateListField(['LIST_PARTICIPATED_LAST'], 'updateListParticipatedLastCurrentUser');
// Updating flags for the list population
$this->listFirstExecution('insert'); $this->listFirstExecution('insert');
$this->listFirstExecution('insert', 'unassigned'); $this->listFirstExecution('insert', 'unassigned');
} }
@@ -2986,6 +2967,37 @@ class WorkspaceTools
$stmt->executeQuery($this->updateListTasId('LIST_UNASSIGNED')); $stmt->executeQuery($this->updateListTasId('LIST_UNASSIGNED'));
} }
/**
* Run the update queries for the specified tables
*
* @param array $listTables
* @param string $methodName
*
* @throws Exception
*/
public function runUpdateListField(array $listTables, $methodName) {
// Clean the queries array
$listQueries = [];
// Get the queries
foreach ($listTables as $listTable) {
$listQueries[] = new RunProcessUpgradeQuery($this->name, $this->$methodName($listTable));
}
// Run queries in multiple threads for update the list tables
$processesManager = new ProcessesManager($listQueries);
$processesManager->run();
// If exists an error throw an exception
if (!empty($processesManager->getErrors())) {
$errorMessage = '';
foreach ($processesManager->getErrors() as $error) {
$errorMessage .= $error['rawAnswer'] . PHP_EOL;
}
throw new Exception($errorMessage);
}
}
/** /**
* Return query to update PRO_ID in list table * Return query to update PRO_ID in list table
* *