/** * Main zTag functions selector * * <code> * zdbal_zexecute($tagId, $tagFunction, $arrayTag, $arrayTagId, $arrayOrder); * </code> * * @param integer $tagId array id of current zTag of $arrayTag array * @param string $tagFunction name of zTag function * @param array $arrayTag array with all compiled zTags * @param array $arrayTagId array with all Ids values * @param array $arrayOrder array with zTag executing order * * @since 1.0 */ function zdbal_zexecute($tagId, $tagFunction, &$arrayTag, &$arrayTagId, $arrayOrder) { global $dbHandleDefault; $arrParam = $arrayTag[$tagId][ztagParam]; $strId = $arrParam["id"]; $strUpdate = $arrParam["update"]; $strDriver = $arrParam["driver"]; $strHost = $arrParam["host"]; $strDatabase = $arrParam["database"]; $strUser = $arrParam["user"]; $strPassword = $arrParam["password"]; $strFilename = $arrParam["filename"]; $strMode = $arrParam["mode"]; $strUse = $arrParam["use"]; $strName = $arrParam["name"]; $strVar = $arrParam["var"]; $strTransform = $arrParam["transform"]; $errorMessage = ""; switch (strtolower($tagFunction)) { /*+ * Open a database connection to defined driver and parameters * * <code> * <zdbal:open id="mysqlConn" driver="mysql" host="#mysqlHost" database="#mysqlDatabase" user="******" password="******" charset="utf8"/> * * <zdbal:open id="sqliteConn" driver="sqlite" filename="/ZTag/SQLite.db" /> * </code> * * @param string id="MySQL Handle Id" * @param string driver="mssql|mysql|pgsql|sqlite|firebird" * @param string host="Host" * @param string database="Database name" * @param string user="******" * @param string password="******" * @param string port="8023" * @param string socket="socket" * @param string charset="utf8" */ case 'open': $strCharset = $arrParam['charset']; $strPort = $arrParam['port']; $strSocket = $arrParam['charset']; $dbalDriver = constant("dbal{$strDriver}"); if (strlen($strHost)) { ztagReturnConstant($strHost); } if (strlen($strDatabase)) { ztagReturnConstant($strDatabase); } if (strlen($strUser)) { ztagReturnConstant($strUser); } if (strlen($strPassword)) { ztagReturnConstant($strPassword); } $dbalConfig = new \Doctrine\DBAL\Configuration(); $dbalParams = array('dbname' => $strDatabase, 'user' => $strUser, 'password' => $strPassword, 'host' => $strHost, 'driver' => $dbalDriver); /* Connect to the database */ $dbHandle = \Doctrine\DBAL\DriverManager::getConnection($dbalParams); if ($errorMessage) { $errorMessage .= "<br />{$strDriver}{$errorMessage}"; } $arrayTagId[$strId][ztagIdHandle] = $dbHandle; $arrayTagId[$strId][ztagIdType] = idTypeDBAL; $arrayTagId[$strId][ztagIdState] = idStateOpened; break; /*+ * Close the Database connection openned with Id. * * <code> * <zdbal:close use="mysqlConn" /> * </code> * * @param string use="mysqlConn" */ /*+ * Close the Database connection openned with Id. * * <code> * <zdbal:close use="mysqlConn" /> * </code> * * @param string use="mysqlConn" */ case 'close': $errorMessage .= ztagParamCheck($arrParam, "use"); $arrayTagId[$strUse][ztagIdHandle]->close(); $arrayTagId[$strUse][ztagIdState] = idStateClosed; break; /*+ * Set a SQL query to use with another zdbal Tag. * * <code> * <zdbal:query use="ociConn" id="ociQuery"> * SELECT US.NM_USUARIO userLogin * , P.NM_PESSOA userName * , P.CD_PESSOA userId * , US.CD_SESSAO_LOGIN userLoginLast * , US.CD_SESSAO_LOGIN_ERRO userLoginError * , US.NU_LOGIN_ERROS userLoginErrors * , to_char(US.DT_LOGIN_BLOQUEIO,'yyyy/mm/dd hh24:mi:ss') userLoginBlocked * FROM TB_USUARIO_SISTEMA US * LEFT JOIN TB_PESSOA P ON US.CD_PESSOA_USUARIO = P.CD_PESSOA * AND FL_ATIVO = 'S' * </zdbal:query> * </code> * * @param string use="ociConn" The Id Handle from a Open zdbal tag * @param string id="ociQuery" Id where the Query will be saved * @param string update="ociQuery" Id to be updated */ /*+ * Set a SQL query to use with another zdbal Tag. * * <code> * <zdbal:query use="ociConn" id="ociQuery"> * SELECT US.NM_USUARIO userLogin * , P.NM_PESSOA userName * , P.CD_PESSOA userId * , US.CD_SESSAO_LOGIN userLoginLast * , US.CD_SESSAO_LOGIN_ERRO userLoginError * , US.NU_LOGIN_ERROS userLoginErrors * , to_char(US.DT_LOGIN_BLOQUEIO,'yyyy/mm/dd hh24:mi:ss') userLoginBlocked * FROM TB_USUARIO_SISTEMA US * LEFT JOIN TB_PESSOA P ON US.CD_PESSOA_USUARIO = P.CD_PESSOA * AND FL_ATIVO = 'S' * </zdbal:query> * </code> * * @param string use="ociConn" The Id Handle from a Open zdbal tag * @param string id="ociQuery" Id where the Query will be saved * @param string update="ociQuery" Id to be updated */ case 'query': $errorMessage .= ztagParamCheck($arrParam, "use"); if ($arrayTag[$tagId][ztagContentWidth]) { $strContent = ztagVars($arrayTag[$tagId][ztagContent], $arrayTagId); if (!strlen($strId)) { $errorMessage .= ztagParamCheck($arrParam, "update"); $strId = $strUpdate; } else { $errorMessage .= ztagParamCheck($arrParam, "id"); } // $dbStatement = $arrayTagId[$strUse][ztagIdHandle]->prepare($strContent); if ($strId) { $arrayTagId[$strId][ztagIdValue] = $strContent; $arrayTagId[$strId][ztagIdLength] = strlen($strContent); $arrayTagId[$strId][ztagIdType] = idTypeQuery; $arrayTagId[$strId][ztagIdHandle] = $arrayTagId[$strUse][ztagIdHandle]; } } else { $errorMessage .= "<br />Tag Query cannot be empty!"; } break; /*+ * Return TRUE if the current record is at the first * * <code> * <zdbal:bof use="mysqlConn" /> * </code> * * @param string use="mysqlConn" - The Id Handle from a Open zdbal tag */ /*+ * Return TRUE if the current record is at the first * * <code> * <zdbal:bof use="mysqlConn" /> * </code> * * @param string use="mysqlConn" - The Id Handle from a Open zdbal tag */ case "bof": $errorMessage .= ztagParamCheck($arrParam, "use"); $arrayTag[$tagId][ztagResult] = dbBOF($arrayTagId[$strUse][ztagIdHandle]); break; /*+ * Return TRUE if the current record is at the first * * <code> * <zdbal:eof use="mysqlConn" /> * </code> * * use="mysqlConn" - The Id Handle from a Open zdbal tag */ /*+ * Return TRUE if the current record is at the first * * <code> * <zdbal:eof use="mysqlConn" /> * </code> * * use="mysqlConn" - The Id Handle from a Open zdbal tag */ case "eof": $errorMessage .= ztagParamCheck($arrParam, "use"); $arrayTag[$tagId][ztagResult] = dbEOF($arrayTagId[$strUse][ztagIdHandle]); break; /*+ * Return TRUE if the current record is at the first * * <code> * <zdbal:field use="mysqlConn" name="NM_NOME" /> * * Or * * <zdbal:field name="NM_NOME" /> * </code> * * @param string use="mysqlConn" - The Id Handle from a Open zdbal tag */ /*+ * Return TRUE if the current record is at the first * * <code> * <zdbal:field use="mysqlConn" name="NM_NOME" /> * * Or * * <zdbal:field name="NM_NOME" /> * </code> * * @param string use="mysqlConn" - The Id Handle from a Open zdbal tag */ case "field": if ($intFather = $arrayTag[$tagId][ztagFather]) { $arrParam["use"] = "Field_{$intFather}"; } // echo "<br />intFather=$intFather"; $errorMessage .= ztagParamCheck($arrParam, "use,name"); $dbHandle = $arrayTagId[$strUse][ztagIdHandle]; $dbHandleValue = $dbHandle[dbHandleFetch][$strName]; if ($strTransform) { $dbHandleValue = ztagTransform($dbHandleValue, $strTransform); } if ($strVar) { $arrayTagId['$' . $strVar][ztagIdValue] = $dbHandleValue; $arrayTagId['$' . $strVar][ztagIdType] = idTypeField; } $arrayTag[$tagId][ztagResult] = $dbHandleValue; break; /*+ * FieldVar * * <code> * <zdbal:fieldvar use="mysqlConn" name="NM_NOME" var="$NM_NOME" /> * </code> * * @param string use="mysqlConn" The Id Handle from a Open zdbal tag * @param string name="NM_NOME" * @param string var="$NM_NOME" */ /*+ * FieldVar * * <code> * <zdbal:fieldvar use="mysqlConn" name="NM_NOME" var="$NM_NOME" /> * </code> * * @param string use="mysqlConn" The Id Handle from a Open zdbal tag * @param string name="NM_NOME" * @param string var="$NM_NOME" */ case "fieldvar": $errorMessage .= ztagParamCheck($arrParam, "use,name,var"); $dbHandle = $arrayTagId[$strUse][ztagIdHandle]; $dbHandleValue = $dbHandle[dbHandleFetch][$strName]; if ($strTransform) { $dbHandleValue = ztagTransform($dbHandleValue, $strTransform); } if ($strVar) { $arrayTagId['$' . $strVar][ztagIdValue] = $dbHandleValue; $arrayTagId['$' . $strVar][ztagIdType] = idTypeField; } break; /*+ * Prepare * * <code> * <zdbal:prepare conn="oracleConn" use="oracleQuery" /> * </code> * * @param string conn="oracleConn" * @param string use="oracleQuery" */ /*+ * Prepare * * <code> * <zdbal:prepare conn="oracleConn" use="oracleQuery" /> * </code> * * @param string conn="oracleConn" * @param string use="oracleQuery" */ case "prepare": $errorMessage .= ztagParamCheck($arrParam, "use,conn"); $dbHandle = $arrayTagId[$strConn][ztagIdHandle]; $dbQuery = $arrayTagId[$strUse][ztagIdValue]; dbPrepare($dbHandle, $dbQuery); break; /*+ * Prepare * * <code> * <zdbal:param use="query002" param="P_CD_PESSOA_USUARIO" var="" type="PARAM_INT" /> * </code> * * @param string use="query002" * @param string param="P_CD_PESSOA_USUARIO" * @param string var="" * @param string type="PARAM_INT" */ /*+ * Prepare * * <code> * <zdbal:param use="query002" param="P_CD_PESSOA_USUARIO" var="" type="PARAM_INT" /> * </code> * * @param string use="query002" * @param string param="P_CD_PESSOA_USUARIO" * @param string var="" * @param string type="PARAM_INT" */ case "param": $errorMessage .= ztagParamCheck($arrParam, "id,value"); $arrayTagId[$strId][ztagIdValue] = $strValue; $arrayTagId[$strId][ztagIdLength] = strlen($strValue); $arrayTagId[$strId][ztagIdType] = idTypeFVar; break; /*+ * Create * * <code> * <zdbal:create use="query002" /> * </code> * * @param string use="query002" */ /*+ * Create * * <code> * <zdbal:create use="query002" /> * </code> * * @param string use="query002" */ case "create": $errorMessage .= ztagParamCheck($arrParam, "id"); if ($arrayTag[$tagId][ztagContentWidth]) { $strContent = $arrayTag[$tagId][ztagContent]; $arrayTagId[$strId][ztagIdValue] = $strContent; $arrayTagId[$strId][ztagIdLength] = strlen($strContent); } break; /*+ * Show * * <code> * <zdbal:show use="query002" /> * </code> * * @param string use="query002" */ /*+ * Show * * <code> * <zdbal:show use="query002" /> * </code> * * @param string use="query002" */ case "show": $errorMessage .= ztagParamCheck($arrParam, "use"); $arrayTag[$tagId][ztagResult] = $arrayTagId[$strUse][ztagIdValue]; break; /*+ * List the available databases for this connection * * <code> * <zdbal:listdatabases use="myConn" var="myTables"/> * </code> * * @param string use="myConn" * @param string var="myTables" */ /*+ * List the available databases for this connection * * <code> * <zdbal:listdatabases use="myConn" var="myTables"/> * </code> * * @param string use="myConn" * @param string var="myTables" */ case 'listdatabases': $errorMessage .= ztagParamCheck($arrParam, 'use,var'); $smHandle = $arrayTagId[$strUse][ztagIdHandle]->getSchemaManager(); if (strlen($strVar)) { $arrayTagId['$' . $strVar][ztagIdValue] = $smHandle->listDatabases(); $arrayTagId['$' . $strVar][ztagIdType] = idTypeFVar; } // echo "<br /><pre>".print_r( $arrayTagId['$'.$strVar][ztagIdValue], 1); break; /*+ * List the tables for the connection * * <code> * <zdbal:listtables use="myConn" var="myTables"/> * </code> * * @param string use="myConn" * @param string var="myTables" */ /*+ * List the tables for the connection * * <code> * <zdbal:listtables use="myConn" var="myTables"/> * </code> * * @param string use="myConn" * @param string var="myTables" */ case 'listtables': $errorMessage .= ztagParamCheck($arrParam, 'use,var'); $smHandle = $arrayTagId[$strUse][ztagIdHandle]->getSchemaManager(); if (strlen($strVar)) { $arrayTagId['$' . $strVar][ztagIdValue] = $smHandle->listTableNames(); $arrayTagId['$' . $strVar][ztagIdType] = idTypeFVar; } // echo "<br /><pre>".print_r( $arrayTagId['$'.$strVar][ztagIdValue], 1); break; /*+ * Return a list of all tables in the current database * * <code> * <zdbal:listtablenames use="myConn" var="myTables"/> * </code> * * @param string use="myConn" * @param string var="myTables" */ /*+ * Return a list of all tables in the current database * * <code> * <zdbal:listtablenames use="myConn" var="myTables"/> * </code> * * @param string use="myConn" * @param string var="myTables" */ case 'listtablenames': $errorMessage .= ztagParamCheck($arrParam, "use,var"); $smHandle = $arrayTagId[$strUse][ztagIdHandle]->getSchemaManager(); if (strlen($strVar)) { $arrayTagId['$' . $strVar][ztagIdValue] = $smHandle->listTableNames(); $arrayTagId['$' . $strVar][ztagIdType] = idTypeFVar; } // echo "<br /><pre>".print_r( $arrayTagId['$'.$strVar][ztagIdValue], 1); break; /*+ * List the columns for a given table. * * <code> * <zdbal:listtablecolumns use="myConn" table="tableName" var="myColumns"/> * </code> * * @param string use="myConn" * @param string table="tableName" * @param string var="myColumns" */ /*+ * List the columns for a given table. * * <code> * <zdbal:listtablecolumns use="myConn" table="tableName" var="myColumns"/> * </code> * * @param string use="myConn" * @param string table="tableName" * @param string var="myColumns" */ case 'listtablecolumns': $strTable = $arrParam["table"]; $errorMessage .= ztagParamCheck($arrParam, "use,table,var"); $smHandle = $arrayTagId[$strUse][ztagIdHandle]->getSchemaManager(); if (strlen($strVar) && strlen($strTable)) { $tableHandle = $smHandle->listTableColumns($strTable); foreach ($tableHandle as $key => $value) { $tableValue[$key]['type'] = $value->getType()->getName(); $tableValue[$key]['fixed'] = $value->getFixed(); $tableValue[$key]['lenght'] = $value->getLength(); $tableValue[$key]['precision'] = $value->getPrecision(); $tableValue[$key]['scale'] = $value->getScale(); $tableValue[$key]['unsigned'] = $value->getUnsigned(); $tableValue[$key]['notnull'] = $value->getNotnull(); $tableValue[$key]['autoincrement'] = $value->getAutoincrement(); $tableValue[$key]['default'] = $value->getDefault(); // $tableValue[$key]['comment'] = $value->getComment(); } $arrayTagId['$' . $strVar][ztagIdValue] = $tableValue; $arrayTagId['$' . $strVar][ztagIdType] = idTypeFVar; } // echo "<br /><pre>".print_r( $arrayTagId['$'.$strVar][ztagIdValue], 1); break; default: $errorMessage .= "<br />Undefined function \"{$tagFunction}\""; } ztagError($errorMessage, $arrayTag, $tagId); }
/** * Main zTag functions selector * * <code> * znosql_execute($tagId, $tagFunction, $arrayTag, $arrayTagId, $arrayOrder); * </code> * * @param integer $tagId array id of current zTag of $arrayTag array * @param string $tagFunction name of zTag function * @param array $arrayTag array with all compiled zTags * @param array $arrayTagId array with all Ids values * @param array $arrayOrder array with zTag executing order * * @since 1.0 */ function znosql_zexecute($tagId, $tagFunction, &$arrayTag, &$arrayTagId, $arrayOrder) { $arrParam = $arrayTag[$tagId][ztagParam]; $strId = $arrParam["id"]; $strUse = $arrParam["use"]; $strDatabase = $arrParam["database"]; $strCollection = $arrParam["collection"]; $strName = $arrParam["name"]; $strValue = $arrParam["value"]; $strVar = $arrParam["var"]; $strTransform = $arrParam["transform"]; if ($arrayTag[$tagId][ztagContentWidth]) { $strContent = $arrayTag[$tagId][ztagContent]; } $errorMessage = ""; switch (strtolower($tagFunction)) { /*+ * Open connection to a NoSQL Server * * <code> * <znosql:open id="mongoDB" driver="Mongo" host="username:password@mongodb.zyc.com.br:27017" database="Direito2" collection="pubPaginas" /> * <znosql:open id="mongoDB" driver="Mongo" host="mongodb.zyc.com.br" username="******" password="******" port="27017" database="Direito2" collection="pubPaginas" /> * </code> * * @param string id="mongoDB" * @param string driver="Mongo" * @param string host="username:password@mongodb.zyc.com.br:27017" <-- mongodb://[username:password@]host1[:port1][,host2[:port2:],...] * @param string username="******" * @param string password="******" * @param int port="27017" * @param string options="option=value;option2=value2" * @param string database="Direito2" * @param string collection="pubPaginas" * @param boolean persist="0|1|true|false|x" */ case "open": $strDriver = $arrParam["driver"]; $strHost = $arrParam["host"]; $strUsername = $arrParam["username"]; $strPassword = $arrParam["password"]; $strPort = $arrParam["port"]; $strPersist = $arrParam["persist"]; $strOptions = $arrParam["options"]; ztagReturnConstant($strHost); ztagReturnConstant($strDatabase); ztagReturnConstant($strUsername); ztagReturnConstant($strPassword); ztagReturnConstant($strPort); $errorMessage .= ztagParamCheck($arrParam, "id,driver,host"); $strDriver = constant("nosql{$strDriver}"); if (strlen($strUsername) && strlen($strPassword)) { $strHost = "{$strUsername}:{$strPassword}@{$strHost}"; } if (strlen($strPort)) { $strHost = "{$strHost}:{$strPort}"; } if (strlen($strOptions)) { $strHost = "{$strHost}?{$strOptions}"; } if (extension_loaded('mongo')) { try { $nosqlHandle = array(); if ($strPersist === "true" || $strPersist === "1" || ($strPersist = "x")) { $dbHandle = new Mongo($strHost, array("persist" => "x")); } else { $dbHandle = new Mongo($strHost); } if ($strDatabase) { $nosqlDB = $nosqlHandle->selectDB($strDatabase); } } catch (MongoConnectionException $e) { $errorMessage .= "<br />Cannot connect to {$strDriver} (" . $e->getMessage() . ")"; } if (strlen($strCollection)) { $nosqlColection = $nosqlDB->selectCollection($strCollection); } } else { $errorMessage .= "<br />{$strDriver} extention is not installed!"; } // Set all NoSQL handler structure $nosqlHandle[nosqlHandleDriver] = $strDriver; $nosqlHandle[nosqlHandleHost] = $strHost; $nosqlHandle[nosqlHandleDatabaseName] = $dbDatabase; $nosqlHandle[nosqlHandleUser] = $strUsername; $nosqlHandle[nosqlHandlePassword] = $strPassword; $nosqlHandle[nosqlHandlePort] = $strPort; $nosqlHandle[nosqlHandleId] = $dbHandle; $nosqlHandle[nosqlHandleState] = dbHandleStateOpen; $arrayTagId[$strId][ztagIdHandle] = $nosqlHandle; $arrayTagId[$strId][ztagIdType] = idTypeNoSQL; $arrayTagId[$strId][ztagIdState] = idStateOpened; break; /*+ * Close a Opened NoSQL Handle connection * * <code> * <znosql:close use="mongoDB"> * </code> * * @param string use="mongoDB" * */ /*+ * Close a Opened NoSQL Handle connection * * <code> * <znosql:close use="mongoDB"> * </code> * * @param string use="mongoDB" * */ case "close": if ($arrayTagId[$strUse][ztagIdType] === idTypeNoSQL) { if ($arrayTagId[$strUse][ztagIdState] === idStateOpened) { $nosqlHandle = $arrayTagId[$strUse][ztagIdHandle]; $dbHandle = $nosqlHandle[nosqlHandleId]; $dbHandle->close(); $arrayTagId[$strUse][ztagIdHandle] = $dbHandle; $arrayTagId[$strUse][ztagIdState] = idStateClosed; } else { $errorMessage .= "<br />The {$strUse} NoSQL handler is not Open!"; } } else { $errorMessage .= "<br />The {$strUse} type is not a NoSQL!"; } break; /*+ * Do an Insert in currente Collection * * </code> * <znosql:insert use="mongoDB"> * pagCodigo="1" * , pagNome="Page \"title\"" * , pagResumo='Page \'resume\'' * , pagDescricao:"Page body" * , pagPalavrasChave:{"example","NoSQL"} * , pagInclusao='2010/10/10' * , pagAtivo=1 * </znosql:insert> * * <znosql:insert use="mongoDB" value="$varInsert" /> * </code> * * @param string use="mongoDB" * @param boolean safe="true|false|1|0" * @param boolean fsync="true|false|1|0" */ /*+ * Do an Insert in currente Collection * * </code> * <znosql:insert use="mongoDB"> * pagCodigo="1" * , pagNome="Page \"title\"" * , pagResumo='Page \'resume\'' * , pagDescricao:"Page body" * , pagPalavrasChave:{"example","NoSQL"} * , pagInclusao='2010/10/10' * , pagAtivo=1 * </znosql:insert> * * <znosql:insert use="mongoDB" value="$varInsert" /> * </code> * * @param string use="mongoDB" * @param boolean safe="true|false|1|0" * @param boolean fsync="true|false|1|0" */ case "insert": $errorMessage .= ztagParamCheck($arrParam, "use"); if ($arrayTagId[$strUse][ztagIdType] === idTypeNoSQL) { if ($arrayTagId[$strUse][ztagIdState] === idStateOpened) { $nosqlHandle = $arrayTagId[$strUse][ztagIdHandle]; if ($nosqlHandle[nosqlHandleCollection]) { $dbHandle = $nosqlHandle[nosqlHandleId]; $strDatabase = $nosqlHandle[nosqlHandleDatabaseName]; $strCollection = $nosqlHandle[nosqlHandleCollectionName]; $dbHandleCollection = $nosqlHandle[nosqlHandleCollection]; // Prepare the tag content if (strlen($strContent)) { $contentArray = $strContent; } if (strlen($strValue)) { $contentArray = $strValue; } if (strlen($contentArray)) { $contentArray = ztagVars($contentArray, $arrayTagId); } if (strlen($contentArray)) { $contentArray = ztagRun($contentArray, 0, $arrayTagId); } if (!strlen($strContent) && !strlen($strValue)) { $errorMessage .= ztagParamCheck($arrParam, "value"); } if (strlen($strTransform) && strlen($contentArray)) { $contentArray = ztagTransform($contentArray, $strTransform); } $contentArray = znosql_lib_Content2Array($contentArray); // @TODO Think how to manage the safe option and it's MongoCursorException try { $dbResult = $dbHandleCollection->insert($contentArray); // echo "<br /><pre>".print_r($contentArray, 1)."</pre>"; if (!strlen($dbResult)) { $errorMessage .= "<br />Cannot insert into collection {$strCollection} at database {$strDatabase} <pre>" . print_r($dbResult, 1) . "</pre>"; } } catch (MongoException $e) { $errorMessage .= "<br />Cannot insert into collection {$strCollection} at database {$strDatabase} (" . $e->getMessage() . ")"; } $arrayTagId[$strUse][ztagIdHandle] = $nosqlHandle; } else { $errorMessage .= "<br />The {$strUse} NoSQL handler do not have a database defined!"; } } else { $errorMessage .= "<br />The {$strUse} NoSQL handler is not Open!"; } } else { $errorMessage .= "<br />The {$strUse} type is not a NoSQL!"; } break; /*+ * Execute a NoSQL commands * * <code> * <znosql:get use="mongoDB"> * Commands * </znosql:get> * </code> * * @param string use="mongoDB" * */ /*+ * Execute a NoSQL commands * * <code> * <znosql:get use="mongoDB"> * Commands * </znosql:get> * </code> * * @param string use="mongoDB" * */ case "getone": $errorMessage .= ztagParamCheck($arrParam, "use"); if ($arrayTagId[$strUse][ztagIdType] === idTypeNoSQL) { if ($arrayTagId[$strUse][ztagIdState] === idStateOpened) { $nosqlHandle = $arrayTagId[$strUse][ztagIdHandle]; if ($nosqlHandle[nosqlHandleCollection]) { $strDatabase = $nosqlHandle[nosqlHandleDatabaseName]; $strCollection = $nosqlHandle[nosqlHandleCollectionName]; $dbHandleCollection = $nosqlHandle[nosqlHandleCollection]; // Prepare the tag content if (strlen($strContent)) { $contentArray = $strContent; } if (strlen($strValue)) { $contentArray = $strValue; } if (strlen($contentArray)) { $contentArray = ztagVars($contentArray, $arrayTagId); } if (!strlen($strContent) && !strlen($strValue)) { $errorMessage .= ztagParamCheck($arrParam, "value"); } if (strlen($strTransform) && strlen($contentArray)) { $contentArray = ztagTransform($contentArray, $strTransform); } $contentArray = ltrim($contentArray, "\r\n"); $contentArray = rtrim($contentArray, "\r\n"); preg_match_all("%criteria\\s*{(?P<criteria>(?:\\}|[^}])*?)}(\\s*,\\s*fields\\s*{(?P<fields>(?:\\}|[^}])*?)})?%", $contentArray, $Matches, PREG_OFFSET_CAPTURE); $arrayCriteria = znosql_lib_Content2Array($Matches["criteria"][0][0]); if ($Matches["fields"][0][0]) { $arrayFields = znosql_lib_Content2Array($Matches["fields"][0][0], 1); } // @TODO Think how to manage the safe option and it's MongoCursorException try { if (count($arrayFields)) { $dbResult = $dbHandleCollection->findOne($arrayCriteria, $arrayFields); } else { $dbResult = $dbHandleCollection->findOne($arrayCriteria); } if (strlen($strVar) && count($dbResult)) { $arrayTagId["\$" . $strVar][ztagIdValue] = $value; $arrayTagId["\$" . $strVar][ztagIdType] = idTypeFVar; } } catch (MongoConnectionException $e) { $errorMessage .= "<br />Cannot find the criteria into collection {$strCollection} at database {$strDatabase} (" . $e->getMessage() . ")"; } $arrayTagId[$strUse][ztagIdHandle] = $nosqlHandle; } else { $errorMessage .= "<br />The {$strUse} NoSQL handler do not have a database defined!"; } } else { $errorMessage .= "<br />The {$strUse} NoSQL handler is not Open!"; } } else { $errorMessage .= "<br />The {$strUse} type is not a NoSQL!"; } break; /*+ * Execute a NoSQL commands * * <code> * <znosql:get use="mongoDB"> * Commands * </znosql:execute> * </code> * * $query - the evaluation or "where" expression * $orderby - sort order desired * $hint - hint to query optimizer * $explain - if true, return explain plan results instead of query results * $snapshot - if true, "snapshot mode" */ /*+ * Execute a NoSQL commands * * <code> * <znosql:get use="mongoDB"> * Commands * </znosql:execute> * </code> * * $query - the evaluation or "where" expression * $orderby - sort order desired * $hint - hint to query optimizer * $explain - if true, return explain plan results instead of query results * $snapshot - if true, "snapshot mode" */ case "getall": /*$errorMessage .= ztagParamCheck($arrParam, "use"); // $cursor = $this->collection->find($f); $k = array(); $i = 0; while( $cursor->hasNext()) { $k[$i] = $cursor->getNext(); $i++; } // return $k; * */ break; /*+ * Do an Update in currente Collection * * <code> * <znosql:update use="mongoDB"> * criteria{pagCodigo="1"} * , set{pagNome="Page \"title\" Updated" * , pagResumo='Page \'resume\'' * , pagDescricao:"Page body" * , pagPalavrasChave:{"example","NoSQL"} * , pagInclusao='2010/10/10' * , pagAtivo=1 * } * </znosql:update> * * <znosql:update use="mongoDB" criteria="$varCriteria" value="$varInsert" /> * </code> * * @param string use="mongoDB" * @param boolean upsert="true|false|1|0" * @param boolean multiple="true|false|1|0" * @param boolean safe="true|false|1|0" * @param boolean fsync="true|false|1|0" */ /*+ * Do an Update in currente Collection * * <code> * <znosql:update use="mongoDB"> * criteria{pagCodigo="1"} * , set{pagNome="Page \"title\" Updated" * , pagResumo='Page \'resume\'' * , pagDescricao:"Page body" * , pagPalavrasChave:{"example","NoSQL"} * , pagInclusao='2010/10/10' * , pagAtivo=1 * } * </znosql:update> * * <znosql:update use="mongoDB" criteria="$varCriteria" value="$varInsert" /> * </code> * * @param string use="mongoDB" * @param boolean upsert="true|false|1|0" * @param boolean multiple="true|false|1|0" * @param boolean safe="true|false|1|0" * @param boolean fsync="true|false|1|0" */ case "update": $errorMessage .= ztagParamCheck($arrParam, "use"); if ($arrayTagId[$strUse][ztagIdType] === idTypeNoSQL) { if ($arrayTagId[$strUse][ztagIdState] === idStateOpened) { $nosqlHandle = $arrayTagId[$strUse][ztagIdHandle]; if ($nosqlHandle[nosqlHandleCollection]) { $strDatabase = $nosqlHandle[nosqlHandleDatabaseName]; $strCollection = $nosqlHandle[nosqlHandleCollectionName]; $dbHandleCollection = $nosqlHandle[nosqlHandleCollection]; // Prepare the tag content if (strlen($strContent)) { $contentArray = $strContent; } if (strlen($strValue)) { $contentArray = $strValue; } if (strlen($contentArray)) { $contentArray = ztagVars($contentArray, $arrayTagId); } if (!strlen($strContent) && !strlen($strValue)) { $errorMessage .= ztagParamCheck($arrParam, "value"); } if (strlen($strTransform) && strlen($contentArray)) { $contentArray = ztagTransform($contentArray, $strTransform); } $contentArray = ltrim($contentArray, "\r\n"); $contentArray = rtrim($contentArray, "\r\n"); preg_match_all("%criteria\\s*{(?P<criteria>(?:\\}|[^}])*?)}\\s*,\\s*set\\s*{(?P<set>(?:\\}|[^}])*?)}%", $contentArray, $Matches, PREG_OFFSET_CAPTURE); // echo "<br /><pre>".print_r($Matches, 1)."</pre>"; $arrayCriteria = znosql_lib_Content2Array($Matches["criteria"][0][0]); $arraySet = array('$set' => znosql_lib_Content2Array($Matches["set"][0][0])); // @TODO Think how to manage the safe option and it's MongoCursorException try { $dbResult = $dbHandleCollection->update($arrayCriteria, $arraySet); // echo "<br /><pre>".print_r($contentArray, 1)."</pre>"; if (!$dbResult) { $errorMessage .= "<br />Cannot update the criteria into collection {$strCollection} at database {$strDatabase} <pre>" . print_r($dbResult, 1) . "</pre>"; } } catch (InvalidArgumentException $e) { $errorMessage .= "<br />Cannot update the criteria into collection {$strCollection} at database {$strDatabase} (" . $e->getMessage() . ")"; } $arrayTagId[$strUse][ztagIdHandle] = $nosqlHandle; } else { $errorMessage .= "<br />The {$strUse} NoSQL handler do not have a database defined!"; } } else { $errorMessage .= "<br />The {$strUse} NoSQL handler is not Open!"; } } else { $errorMessage .= "<br />The {$strUse} type is not a NoSQL!"; } break; /*+ * Delete a criteria at current collection * * <code> * <znosql:delete use="mongoDB"> * pagCodigo="1" * </znosql:delete> * * <znosql:delete use="mongoDB" criteria="$varCriteria" /> * </code> * * @param string use="mongoDB" * @param boolean justone="true|false|1|0" * @param boolean safe="true|false|1|0" * @param boolean fsync="true|false|1|0" */ /*+ * Delete a criteria at current collection * * <code> * <znosql:delete use="mongoDB"> * pagCodigo="1" * </znosql:delete> * * <znosql:delete use="mongoDB" criteria="$varCriteria" /> * </code> * * @param string use="mongoDB" * @param boolean justone="true|false|1|0" * @param boolean safe="true|false|1|0" * @param boolean fsync="true|false|1|0" */ case "delete": $errorMessage .= ztagParamCheck($arrParam, "use"); if ($arrayTagId[$strUse][ztagIdType] === idTypeNoSQL) { if ($arrayTagId[$strUse][ztagIdState] === idStateOpened) { $nosqlHandle = $arrayTagId[$strUse][ztagIdHandle]; if ($nosqlHandle[nosqlHandleCollection]) { $strDatabase = $nosqlHandle[nosqlHandleDatabaseName]; $strCollection = $nosqlHandle[nosqlHandleCollectionName]; $dbHandleCollection = $nosqlHandle[nosqlHandleCollection]; // Prepare the tag content if (strlen($strContent)) { $contentArray = $strContent; } if (strlen($strValue)) { $contentArray = $strValue; } if (strlen($contentArray)) { $contentArray = ztagVars($contentArray, $arrayTagId); } if (!strlen($strContent) && !strlen($strValue)) { $errorMessage .= ztagParamCheck($arrParam, "value"); } if (strlen($strTransform) && strlen($contentArray)) { $contentArray = ztagTransform($contentArray, $strTransform); } $contentArray = znosql_lib_Content2Array($contentArray); // echo "<br /><pre>contentArray=".print_r($contentArray, 1)."</pre>"; // @TODO Think how to manage the safe option and it's MongoCursorException try { $dbResult = $dbHandleCollection->remove($contentArray); // echo "<br /><pre>dbResult=".print_r($dbResult, 1)."</pre>"; if (!$dbResult) { $errorMessage .= "<br />Cannot delete the criteria into collection {$strCollection} at database {$strDatabase} <pre>" . print_r($dbResult, 1) . "</pre>"; } } catch (InvalidArgumentException $e) { $errorMessage .= "<br />Cannot delete the criteria into collection {$strCollection} at database {$strDatabase} (" . $e->getMessage() . ")"; } $arrayTagId[$strUse][ztagIdHandle] = $nosqlHandle; } else { $errorMessage .= "<br />The {$strUse} NoSQL handler do not have a database defined!"; } } else { $errorMessage .= "<br />The {$strUse} NoSQL handler is not Open!"; } } else { $errorMessage .= "<br />The {$strUse} type is not a NoSQL!"; } break; /*+ * Execute a NoSQL commands * * <code> * <znosql:execute use="mongoDB"> * Commands * </znosql:execute> * </code> * * @param string use="mongoDB" * */ /*+ * Execute a NoSQL commands * * <code> * <znosql:execute use="mongoDB"> * Commands * </znosql:execute> * </code> * * @param string use="mongoDB" * */ case "execute": $errorMessage .= ztagParamCheck($arrParam, "use"); // Execute Close, but I don't know yet! $arrayTagId[$strUse][ztagIdState] = idStateClosed; // mongo->execute($cmd); break; /*+ * Set a database for current Opened NoSQL connection * * <code> * <znosql:setdatabase use="mongoDB" name="Direito2" /> * </code> * * @param string use="mongoDB" * @param string name="Direito2" The database name. */ /*+ * Set a database for current Opened NoSQL connection * * <code> * <znosql:setdatabase use="mongoDB" name="Direito2" /> * </code> * * @param string use="mongoDB" * @param string name="Direito2" The database name. */ case "setdatabase": $errorMessage .= ztagParamCheck($arrParam, "use,name"); if ($arrayTagId[$strUse][ztagIdType] === idTypeNoSQL) { if ($arrayTagId[$strUse][ztagIdState] === idStateOpened) { $nosqlHandle = $arrayTagId[$strUse][ztagIdHandle]; $dbHandle = $nosqlHandle[nosqlHandleId]; try { $dbHandleDatabase = $dbHandle->selectDB($strName); $nosqlHandle[nosqlHandleDatabaseName] = $strName; $nosqlHandle[nosqlHandleDatabase] = $dbHandleDatabase; } catch (InvalidArgumentException $e) { $errorMessage .= "<br />Invalid database name {$strName} (" . $e->getMessage() . ")"; } $arrayTagId[$strUse][ztagIdHandle] = $nosqlHandle; } else { $errorMessage .= "<br />The {$strUse} NoSQL handler is not Open!"; } } else { $errorMessage .= "<br />The {$strUse} type is not a NoSQL!"; } break; /*+ * List all databases * * <code> * <znosql:listdatabases use="mongoDB" id="mongoDBlist" var="databasesList" total="databasesTotalSize"> * <br /><znosql:field use="mongoDBlist" name="name" /> - <znosql:field use="mongoDBlist" name="sizeOnDisk" /> - <znosql:field use="mongoDBlist" name="empty" /> * </znosql:listdatabases> * </code> * * @param string use="mongoDB" A NoSQL handle * @param string id="mongoDBlist" Id with array of each line * @param string var="databasesList" Variable with array of each line * @param string total="databasesTotalSize" Variable with total size */ /*+ * List all databases * * <code> * <znosql:listdatabases use="mongoDB" id="mongoDBlist" var="databasesList" total="databasesTotalSize"> * <br /><znosql:field use="mongoDBlist" name="name" /> - <znosql:field use="mongoDBlist" name="sizeOnDisk" /> - <znosql:field use="mongoDBlist" name="empty" /> * </znosql:listdatabases> * </code> * * @param string use="mongoDB" A NoSQL handle * @param string id="mongoDBlist" Id with array of each line * @param string var="databasesList" Variable with array of each line * @param string total="databasesTotalSize" Variable with total size */ case "listdatabases": $strTotal = $arrParam["total"]; $errorMessage .= ztagParamCheck($arrParam, "use,id"); if ($arrayTagId[$strUse][ztagIdType] === idTypeNoSQL) { if ($arrayTagId[$strUse][ztagIdState] === idStateOpened) { $nosqlHandle = $arrayTagId[$strUse][ztagIdHandle]; $dbHandle = $nosqlHandle[nosqlHandleId]; $arrayDatabases = $dbHandle->listDBs(); $totalDbSize = $arrayDatabases['totalSize']; foreach ($arrayDatabases["databases"] as $key => $value) { if (strlen($strId)) { $arrayTagId[$strId][ztagIdValue] = $arrayDatabases["databases"][$key]; $arrayTagId[$strId][ztagIdType] = idTypeValue; } if (strlen($strVar)) { $arrayTagId["\$" . $strVar][ztagIdValue] = $arrayDatabases["databases"][$key]; $arrayTagId["\$" . $strVar][ztagIdType] = idTypeFVar; } $strResult = ztagRun($strContent, 0, $arrayTagId); $arrayTag[$tagId][ztagResult] .= $strResult; } if (strlen($strTotal)) { $arrayTagId["\$" . $strTotal][ztagIdValue] = $arrayDatabases[totalSize]; $arrayTagId["\$" . $strTotal][ztagIdType] = idTypeFVar; } } else { $errorMessage .= "<br />The {$strUse} NoSQL handler is not Open!"; } } else { $errorMessage .= "<br />The {$strUse} type is not a NoSQL!"; } break; /*+ * Return the server Stats * * <code> * <znosql:getstats use="mongoDB" var="mongoStats" /> * </code> * * @param string use="mongoDB" * @param string var="mongoStats" */ /*+ * Return the server Stats * * <code> * <znosql:getstats use="mongoDB" var="mongoStats" /> * </code> * * @param string use="mongoDB" * @param string var="mongoStats" */ case "getstats": if ($arrayTagId[$strUse][ztagIdType] === idTypeNoSQL) { if ($arrayTagId[$strUse][ztagIdState] === idStateOpened) { $nosqlHandle = $arrayTagId[$strUse][ztagIdHandle]; $dbHandle = $nosqlHandle[nosqlHandleId]; $arrayDatabases = $dbHandle->listDBs(); $dbHandleAdmin = $dbHandle->selectDB('admin'); $arrayReturn = array_merge($dbHandleAdmin->command(array('buildinfo' => 1)), $dbHandleAdmin->command(array('serverStatus' => 1))); $profile = $dbHandleAdmin->command(array('profile' => -1)); $arrayReturn['profilingLevel'] = $profile['was']; $arrayReturn['mongoDbTotalSize'] = round($totalDbSize / 1000000) . 'mb'; $prevError = $dbHandleAdmin->command(array('getpreverror' => 1)); if (!$prevError['n']) { $arrayReturn['previousDbErrors'] = 'None'; } else { $arrayReturn['previousDbErrors']['error'] = $prevError['err']; $arrayReturn['previousDbErrors']['numberOfOperationsAgo'] = $prevError['nPrev']; } $arrayReturn['globalLock']['totalTime'] .= ' µSec'; $arrayReturn['uptime'] = round($arrayReturn['uptime'] / 60) . ':' . str_pad($arrayReturn['uptime'] % 60, 2, '0', STR_PAD_LEFT) . ' minutes'; $arrayUnshift['mongo'] = $arrayReturn['version'] . ' (' . $arrayReturn['bits'] . '-bit)'; $arrayUnshift['mongoPhpDriver'] = Mongo::VERSION; $arrayUnshift['phpMoAdmin'] = '1.0.8'; $arrayUnshift['php'] = PHP_VERSION . ' (' . (PHP_INT_MAX > 2200000000.0 ? 64 : 32) . '-bit)'; $arrayUnshift['gitVersion'] = $arrayReturn['gitVersion']; unset($arrayReturn['ok'], $arrayReturn['version'], $arrayReturn['gitVersion'], $arrayReturn['bits']); $arrayReturn = array_merge(array('version' => $arrayUnshift), $arrayReturn); $iniIndex = array(-1 => 'Unlimited', 'Off', 'On'); $phpIni = array('allow_persistent', 'auto_reconnect', 'chunk_size', 'cmd', 'default_host', 'default_port', 'max_connections', 'max_persistent'); foreach ($phpIni as $ini) { $key = 'php_' . $ini; $arrayReturn[$key] = ini_get('mongo.' . $ini); if (isset($iniIndex[$arrayReturn[$key]])) { $arrayReturn[$key] = $iniIndex[$arrayReturn[$key]]; } } if (strlen($strVar)) { $arrayTagId["\$" . $strVar][ztagIdValue] = $arrayReturn; $arrayTagId["\$" . $strVar][ztagIdType] = idTypeFVar; } } else { $errorMessage .= "<br />The {$strUse} NoSQL handler is not Open!"; } } else { $errorMessage .= "<br />The {$strUse} type is not a NoSQL!"; } break; /*+ * Repair the current Database * * <code> * <znosql:repairdatabase use="mongoDB" preserveclonedfiles="true" backuporiginalfiles="true" /> * </code> * * @param boolean preserveclonedfiles="true|false|1|0" * @param boolean backuporiginalfiles="true|false|1|0" */ /*+ * Repair the current Database * * <code> * <znosql:repairdatabase use="mongoDB" preserveclonedfiles="true" backuporiginalfiles="true" /> * </code> * * @param boolean preserveclonedfiles="true|false|1|0" * @param boolean backuporiginalfiles="true|false|1|0" */ case "repairdatabase": $strPreserveClonedFiles = $arrParam["preserveclonedfiles"]; $strBackupOriginalFiles = $arrParam["backuporiginalfiles"]; $errorMessage .= ztagParamCheck($arrParam, "use"); if ($arrayTagId[$strUse][ztagIdType] === idTypeNoSQL) { if ($arrayTagId[$strUse][ztagIdState] === idStateOpened) { $nosqlHandle = $arrayTagId[$strUse][ztagIdHandle]; if ($nosqlHandle[nosqlHandleDatabase]) { $strDatabase = $nosqlHandle[nosqlHandleDatabaseName]; $dbHandleDatabase = $nosqlHandle[nosqlHandleDatabase]; try { if ($strPreserveClonedFiles === "true" || $strPreserveClonedFiles === "1") { $strPreserveClonedFiles = true; } if ($strBackupOriginalFiles === "true" || $strBackupOriginalFiles === "1") { $strBackupOriginalFiles = true; } if (strlen($strPreserveClonedFiles) && !strlen($strBackupOriginalFiles)) { $dbResult = $dbHandleDatabase->repair($strPreserveClonedFiles); } elseif (strlen($strBackupOriginalFiles)) { $dbResult = $dbHandleDatabase->repair($strPreserveClonedFiles, $strBackupOriginalFiles); } else { $dbResult = $dbHandleDatabase->repair(); } if ($dbResult["ok"] != 1) { $errorMessage .= "<br />Cannot repair the {$strDatabase} <pre>" . print_r($dbResult, 1) . "</pre>"; } } catch (InvalidArgumentException $e) { $errorMessage .= "<br />Invalid database name {$strDatabase} (" . $e->getMessage() . ")"; } $arrayTagId[$strUse][ztagIdHandle] = $nosqlHandle; } else { $errorMessage .= "<br />The {$strUse} NoSQL handler do not have a database defined!"; } } else { $errorMessage .= "<br />The {$strUse} NoSQL handler is not Open!"; } } else { $errorMessage .= "<br />The {$strUse} type is not a NoSQL!"; } break; /*+ * Drop current database * * <code> * <znosql:dropdatabase use="mongoDB" /> * </code> * * @param string use="mongoDB" */ /*+ * Drop current database * * <code> * <znosql:dropdatabase use="mongoDB" /> * </code> * * @param string use="mongoDB" */ case "dropdatabase": $errorMessage .= ztagParamCheck($arrParam, "use"); if ($arrayTagId[$strUse][ztagIdType] === idTypeNoSQL) { if ($arrayTagId[$strUse][ztagIdState] === idStateOpened) { $nosqlHandle = $arrayTagId[$strUse][ztagIdHandle]; if ($nosqlHandle[nosqlHandleDatabase]) { $strDatabase = $nosqlHandle[nosqlHandleDatabaseName]; $dbHandleDatabase = $nosqlHandle[nosqlHandleDatabase]; try { $dbResult = $dbHandleDatabase->drop(); if ($dbResult["ok"] == 1) { $nosqlHandle[nosqlHandleDatabaseName] = null; $nosqlHandle[nosqlHandleDatabase] = null; } else { $errorMessage .= "<br />Cannot drop the database {$strDatabase} <pre>" . print_r($dbResult, 1) . "</pre>"; } } catch (InvalidArgumentException $e) { $errorMessage .= "<br />Cannot drop the database {$strDatabase} (" . $e->getMessage() . ")"; } $arrayTagId[$strUse][ztagIdHandle] = $nosqlHandle; } else { $errorMessage .= "<br />The {$strUse} NoSQL handler do not have a database defined!"; } } else { $errorMessage .= "<br />The {$strUse} NoSQL handler is not Open!"; } } else { $errorMessage .= "<br />The {$strUse} type is not a NoSQL!"; } break; /*+ * Set a collection for current database * * <code> * <znosql:setcollection use="mongoDB" name="pubPaginas" /> * </code> * * @param string use="mongoDB" * @param string name="pubPaginas" */ /*+ * Set a collection for current database * * <code> * <znosql:setcollection use="mongoDB" name="pubPaginas" /> * </code> * * @param string use="mongoDB" * @param string name="pubPaginas" */ case "setcollection": $errorMessage .= ztagParamCheck($arrParam, "use"); if ($arrayTagId[$strUse][ztagIdType] === idTypeNoSQL) { if ($arrayTagId[$strUse][ztagIdState] === idStateOpened) { $nosqlHandle = $arrayTagId[$strUse][ztagIdHandle]; if ($nosqlHandle[nosqlHandleDatabase]) { $strDatabase = $nosqlHandle[nosqlHandleDatabaseName]; $dbHandleDatabase = $nosqlHandle[nosqlHandleDatabase]; try { $dbHandleCollection = $dbHandleDatabase->selectCollection($strName); $nosqlHandle[nosqlHandleCollectionName] = $strName; $nosqlHandle[nosqlHandleCollection] = $dbHandleCollection; } catch (InvalidArgumentException $e) { $errorMessage .= "<br />Invalid collection name {$strName} at database {$strDatabase} (" . $e->getMessage() . ")"; } $arrayTagId[$strUse][ztagIdHandle] = $nosqlHandle; } else { $errorMessage .= "<br />The {$strUse} NoSQL handler do not have a database defined!"; } } else { $errorMessage .= "<br />The {$strUse} NoSQL handler is not Open!"; } } else { $errorMessage .= "<br />The {$strUse} type is not a NoSQL!"; } break; /*+ * List all databases * * <code> * <znosql:listcollections use="mongoDB" id="mongoDBlist" var="databasesList" total="databasesTotalSize"> * <br /><znosql:field use="mongoDBlist" name="name" /> - <znosql:field use="mongoDBlist" name="sizeOnDisk" /> - <znosql:field use="mongoDBlist" name="empty" /> * </znosql:listcollections> * </code> * * @param string use="mongoDB" A NoSQL handle * @param string id="mongoDBlist" Id with array of each line * @param string var="databasesList" Variable with array of each line * @param string total="databasesTotalSize" Variable with total size */ /*+ * List all databases * * <code> * <znosql:listcollections use="mongoDB" id="mongoDBlist" var="databasesList" total="databasesTotalSize"> * <br /><znosql:field use="mongoDBlist" name="name" /> - <znosql:field use="mongoDBlist" name="sizeOnDisk" /> - <znosql:field use="mongoDBlist" name="empty" /> * </znosql:listcollections> * </code> * * @param string use="mongoDB" A NoSQL handle * @param string id="mongoDBlist" Id with array of each line * @param string var="databasesList" Variable with array of each line * @param string total="databasesTotalSize" Variable with total size */ case "listcollections": $strTotal = $arrParam["total"]; $errorMessage .= ztagParamCheck($arrParam, "use,id"); if ($arrayTagId[$strUse][ztagIdType] === idTypeNoSQL) { if ($arrayTagId[$strUse][ztagIdState] === idStateOpened) { $nosqlHandle = $arrayTagId[$strUse][ztagIdHandle]; $nosqlHandle = $arrayTagId[$strUse][ztagIdHandle]; if ($nosqlHandle[nosqlHandleDatabase]) { $strDatabase = $nosqlHandle[nosqlHandleDatabaseName]; $dbHandleDatabase = $nosqlHandle[nosqlHandleDatabase]; $arrayCollections = $dbHandleDatabase->listCollections(); foreach ($arrayCollections as $dbHandleCollecion) { if ($strId) { $arrayTagId[$strId][ztagIdValue] = array("name" => $dbHandleCollecion->getName()); $arrayTagId[$strId][ztagIdType] = idTypeValue; } if ($strVar) { $arrayTagId["\$" . $strVar][ztagIdValue] = array("name" => $dbHandleCollecion->getName()); $arrayTagId["\$" . $strVar][ztagIdType] = idTypeFVar; } $strResult = ztagRun($strContent, 0, $arrayTagId); $arrayTag[$tagId][ztagResult] .= $strResult; } } else { $errorMessage .= "<br />The {$strUse} NoSQL handler do not have a database defined!"; } } else { $errorMessage .= "<br />The {$strUse} NoSQL handler is not Open!"; } } else { $errorMessage .= "<br />The {$strUse} type is not a NoSQL!"; } break; /*+ * Drop a collection for current database * * <code> * <znosql:dropcollection use="mongoDB" /> * </code> * * @param string use="mongoDB" */ /*+ * Drop a collection for current database * * <code> * <znosql:dropcollection use="mongoDB" /> * </code> * * @param string use="mongoDB" */ case "dropcollection": $errorMessage .= ztagParamCheck($arrParam, "use"); if ($arrayTagId[$strUse][ztagIdType] === idTypeNoSQL) { if ($arrayTagId[$strUse][ztagIdState] === idStateOpened) { $nosqlHandle = $arrayTagId[$strUse][ztagIdHandle]; if ($nosqlHandle[nosqlHandleCollection]) { $strDatabase = $nosqlHandle[nosqlHandleDatabaseName]; $strCollection = $nosqlHandle[nosqlHandleCollectionName]; $dbHandleCollection = $nosqlHandle[nosqlHandleCollection]; try { $dbResult = $dbHandleCollection->drop(); if ($dbResult["ok"] == 1) { $nosqlHandle[nosqlHandleCollectionName] = null; $nosqlHandle[nosqlHandleCollection] = null; } else { $errorMessage .= "<br />Cannot drop the collection {$strCollection} at database {$strDatabase} <pre>" . print_r($dbResult, 1) . "</pre>"; } } catch (InvalidArgumentException $e) { $errorMessage .= "<br />Cannot drop the collection {$strCollection} at database {$strDatabase} (" . $e->getMessage() . ")"; } $arrayTagId[$strUse][ztagIdHandle] = $nosqlHandle; } else { $errorMessage .= "<br />The {$strUse} NoSQL handler do not have a database defined!"; } } else { $errorMessage .= "<br />The {$strUse} NoSQL handler is not Open!"; } } else { $errorMessage .= "<br />The {$strUse} type is not a NoSQL!"; } break; /*+ * Create a collection for current database * * </code> * <znosql:createcollection use="mongoDB" name="pubPaginas" /> * </code> * * @param string use="mongoDB" * @param string name="pubPaginas" The name of the collection. * @param boolean capped="true|false|1|0" If the collection should be a fixed size. * @param int size="10000000" If the collection is fixed size, its size in bytes. * @param int max="1000" If the collection is fixed size, the maximum number of elements to store in the collection. */ /*+ * Create a collection for current database * * </code> * <znosql:createcollection use="mongoDB" name="pubPaginas" /> * </code> * * @param string use="mongoDB" * @param string name="pubPaginas" The name of the collection. * @param boolean capped="true|false|1|0" If the collection should be a fixed size. * @param int size="10000000" If the collection is fixed size, its size in bytes. * @param int max="1000" If the collection is fixed size, the maximum number of elements to store in the collection. */ case "createcollection": $errorMessage .= ztagParamCheck($arrParam, "use,name"); if ($arrayTagId[$strUse][ztagIdType] === idTypeNoSQL) { if ($arrayTagId[$strUse][ztagIdState] === idStateOpened) { $nosqlHandle = $arrayTagId[$strUse][ztagIdHandle]; if ($nosqlHandle[nosqlHandleDatabase]) { $strDatabase = $nosqlHandle[nosqlHandleDatabaseName]; $dbHandleDatabase = $nosqlHandle[nosqlHandleDatabase]; try { $dbHandleCollection = $dbHandleDatabase->createCollection($strName); $nosqlHandle[nosqlHandleCollectionName] = $strName; $nosqlHandle[nosqlHandleCollection] = $dbHandleCollection; } catch (InvalidArgumentException $e) { $errorMessage .= "<br />Cannot create the collection {$strName} at database {$strDatabase} (" . $e->getMessage() . ")"; } $arrayTagId[$strUse][ztagIdHandle] = $nosqlHandle; } else { $errorMessage .= "<br />The {$strUse} NoSQL handler do not have a database defined!"; } } else { $errorMessage .= "<br />The {$strUse} NoSQL handler is not Open!"; } } else { $errorMessage .= "<br />The {$strUse} type is not a NoSQL!"; } break; /*+ * Create a collection for current database * * <code> * <znosql:createcollection use="mongoDB" from="pubPaginas" to="pubPaginasOld"/> * </code> * * @param string use="mongoDB" * @param string from="pubPaginas" * @param string to="pubPaginasOld" */ /*+ * Create a collection for current database * * <code> * <znosql:createcollection use="mongoDB" from="pubPaginas" to="pubPaginasOld"/> * </code> * * @param string use="mongoDB" * @param string from="pubPaginas" * @param string to="pubPaginasOld" */ case "renamecollection": $strFrom = $arrParam["from"]; $strTo = $arrParam["to"]; $errorMessage .= ztagParamCheck($arrParam, "use,name"); if ($arrayTagId[$strUse][ztagIdType] === idTypeNoSQL) { if ($arrayTagId[$strUse][ztagIdState] === idStateOpened) { $nosqlHandle = $arrayTagId[$strUse][ztagIdHandle]; $dbHandle = $nosqlHandle[nosqlHandleId]; if ($nosqlHandle[nosqlHandleDatabase]) { $strDatabase = $nosqlHandle[nosqlHandleDatabaseName]; $dbResult = $dbHandle->selectDB('admin')->command(array('renameCollection' => "{$strDatabase}.{$strFrom}", 'to' => "{$strDatabase}.{$strTo}")); echo "<pre>" . print_r($dbResult, 1) . "</pre>"; } else { $errorMessage .= "<br />The {$strUse} NoSQL handler do not have a database defined!"; } } else { $errorMessage .= "<br />The {$strUse} NoSQL handler is not Open!"; } } else { $errorMessage .= "<br />The {$strUse} type is not a NoSQL!"; } break; /*+ * List all indexes for a Collection * * <code> * <znosql:listindexes use="mongoDB" collection="pubPaginas" /> * </code> * * @param string use="mongoDB" * @param string collection="pubPaginas" */ /*+ * List all indexes for a Collection * * <code> * <znosql:listindexes use="mongoDB" collection="pubPaginas" /> * </code> * * @param string use="mongoDB" * @param string collection="pubPaginas" */ case "listindexes": return $this->mongo->selectCollection($collection)->getIndexInfo(); break; /*+ * Ensure a index of current collection * * <code> * <znosql:ensureindex use="mongoDB" /> * </code> * * @param string use="mongoDB" */ /*+ * Ensure a index of current collection * * <code> * <znosql:ensureindex use="mongoDB" /> * </code> * * @param string use="mongoDB" */ case "ensureindex": $errorMessage .= ztagParamCheck($arrParam, "use"); if ($arrayTagId[$strUse][ztagIdType] === idTypeNoSQL) { if ($arrayTagId[$strUse][ztagIdState] === idStateOpened) { $nosqlHandle = $arrayTagId[$strUse][ztagIdHandle]; if ($nosqlHandle[nosqlHandleCollection]) { $strDatabase = $nosqlHandle[nosqlHandleDatabaseName]; $strCollection = $nosqlHandle[nosqlHandleCollectionName]; $dbHandleCollection = $nosqlHandle[nosqlHandleCollection]; try { $dbResult = $dbHandleCollection->ensureIndex(); $unique = $unique ? true : false; //signature requires a bool in both Mongo v. 1.0.1 and 1.2.0 // mongo->selectCollection($collection)->ensureIndex($indexes, $unique); if ($dbResult["ok"] == 1) { $nosqlHandle[nosqlHandleCollectionName] = null; $nosqlHandle[nosqlHandleCollection] = null; } else { $errorMessage .= "<br />Cannot drop the collection {$strCollection} at database {$strDatabase} <pre>" . print_r($dbResult, 1) . "</pre>"; } } catch (InvalidArgumentException $e) { $errorMessage .= "<br />Cannot drop the collection {$strCollection} at database {$strDatabase} (" . $e->getMessage() . ")"; } $arrayTagId[$strUse][ztagIdHandle] = $nosqlHandle; } else { $errorMessage .= "<br />The {$strUse} NoSQL handler do not have a database defined!"; } } else { $errorMessage .= "<br />The {$strUse} NoSQL handler is not Open!"; } } else { $errorMessage .= "<br />The {$strUse} type is not a NoSQL!"; } break; /*+ * Delete a index for a Collection * * <code> * <znosql:deleteindex use="mongoDB" collection="pubPaginas" index="pagNome"/> * </code> * * @param string use="mongoDB" * @param string collection="pubPaginas" * @param string index="pagNome" * */ /*+ * Delete a index for a Collection * * <code> * <znosql:deleteindex use="mongoDB" collection="pubPaginas" index="pagNome"/> * </code> * * @param string use="mongoDB" * @param string collection="pubPaginas" * @param string index="pagNome" * */ case "deleteindex": // mongo->selectCollection($collection)->deleteIndex($index); break; /*+ * Return the content of name field of current record * * </code> * <zdb:field use="mongoDBlist" name="name" /> * </code> * * @param string use="mongoDBlist" - The Id Handle from current array * @param string name="name" */ /*+ * Return the content of name field of current record * * </code> * <zdb:field use="mongoDBlist" name="name" /> * </code> * * @param string use="mongoDBlist" - The Id Handle from current array * @param string name="name" */ case "field": $strVar = $arrParam["var"]; $errorMessage .= ztagParamCheck($arrParam, "use,name"); $fieldArray = $arrayTagId[$strUse][ztagIdValue]; $fieldValue = $fieldArray[$strName]; if (strlen($strTransform)) { $fieldValue = ztagTransform($fieldValue, $strTransform); } if (strlen($strVar)) { $arrayTagId["\$" . $strVar][ztagIdValue] = $fieldValue; $arrayTagId["\$" . $strVar][ztagIdType] = idTypeField; } $arrayTag[$tagId][ztagResult] = $fieldValue; break; default: $errorMessage .= "<br />Undefined function \"{$tagFunction}\""; } ztagError($errorMessage, $arrayTag, $tagId); }
/** * Main zTag functions selector * * <code> * zdb_zexecute($tagId, $tagFunction, $arrayTag, $arrayTagId, $arrayOrder); * </code> * * @param integer $tagId array id of current zTag of $arrayTag array * @param string $tagFunction name of zTag function * @param array $arrayTag array with all compiled zTags * @param array $arrayTagId array with all Ids values * @param array $arrayOrder array with zTag executing order * * @since 1.0 */ function zdb_zexecute($tagId, $tagFunction, &$arrayTag, &$arrayTagId, $arrayOrder) { global $dbHandleDefault; $arrParam = $arrayTag[$tagId][ztagParam]; $strId = $arrParam["id"]; $strUpdate = $arrParam["update"]; $strDriver = $arrParam["driver"]; $strHost = $arrParam["host"]; $strDatabase = $arrParam["database"]; $strUser = $arrParam["user"]; $strPassword = $arrParam["password"]; $strFilename = $arrParam["filename"]; $strMode = $arrParam["mode"]; $strUse = $arrParam["use"]; $strName = $arrParam["name"]; $strTransform = $arrParam["transform"]; $errorMessage = ""; switch (strtolower($tagFunction)) { /*+ * Open a database connection to defined driver and parameters * * <code> * <zdb:open id="mysqlConn" driver="mysql" host="#mysqlHost" database="#mysqlDatabase" user="******" password="******" charset="utf8"/> * * <zdb:open id="sqliteConn" driver="sqlite" filename="/ZTag/SQLite.db" /> * </code> * * @param string id="MySQL Handle Id" * @param string driver="mssql|mysql|pgsql|sqlite|firebird" * @param string host="Host" * @param string database="Database name" * @param string user="******" * @param string password="******" * @param string charset="utf8" */ case "open": $strCharset = $arrParam["charset"]; $strDriver = constant("db{$strDriver}"); switch ($strDriver) { case dbOCI: $blnDatabase = 0; break; default: $blnDatabase = 1; } if (strlen($strHost)) { ztagReturnConstant($strHost); } if (strlen($strDatabase)) { ztagReturnConstant($strDatabase); } if (strlen($strUser)) { ztagReturnConstant($strUser); } if (strlen($strPassword)) { ztagReturnConstant($strPassword); } switch ($strDriver) { case dbSQLite: if (strlen($strFilename)) { ztagReturnConstant($strFilename); } if (strlen($strMode)) { ztagReturnConstant($strMode); } if (!$strMode) { $strMode = 0666; } $errorMessage .= ztagParamCheck($arrParam, "id,driver,filename"); $dbHandle = dbOpenFile($strDriver, $strFilename, $strMode); if ($arrParam["name"]) { $dbHandleDefault = $dbHandle; } break; case dbFirebird: // @TODO melhorar o esquema de retornar as variáveis, podemos usar o @@ para todas as variáveis, inclusive as constantes $errorMessage .= ztagParamCheck($arrParam, "id,driver,user,password,database"); $dbHandle = dbOpen($strDriver, $strHost, $strDatabase, $strUser, $strPassword); break; case dbMySQL: // @TODO melhorar o esquema de retornar as variáveis, podemos usar o @@ para todas as variáveis, inclusive as constantes if (!$strDatabase && $blnDatabase) { $checkParam .= ",database"; } $errorMessage .= ztagParamCheck($arrParam, "id,driver,host,user,password{$checkParam}"); $dbHandle = dbOpen($strDriver, $strHost, $strDatabase, $strUser, $strPassword, $strCharset); default: // @TODO melhorar o esquema de retornar as variáveis, podemos usar o @@ para todas as variáveis, inclusive as constantes if (!$strDatabase && $blnDatabase) { $checkParam .= ",database"; } $errorMessage .= ztagParamCheck($arrParam, "id,driver,host,user,password{$checkParam}"); $dbHandle = dbOpen($strDriver, $strHost, $strDatabase, $strUser, $strPassword); } if ($errorMessage) { $errorMessage .= "<br />{$strDriver}{$errorMessage}"; } $arrayTagId[$strId][ztagIdHandle] = $dbHandle; $arrayTagId[$strId][ztagIdType] = idTypeDB; $arrayTagId[$strId][ztagIdState] = idStateOpened; break; /*+ * Close the Database connection openned with Id. * * <code> * <zdb:close use="mysqlConn" /> * </code> * * @param string use="mysqlConn" */ /*+ * Close the Database connection openned with Id. * * <code> * <zdb:close use="mysqlConn" /> * </code> * * @param string use="mysqlConn" */ case "close": $errorMessage .= ztagParamCheck($arrParam, "use"); dbClose($arrayTagId[$strUse][ztagIdHandle]); $arrayTagId[$strUse][ztagIdState] = idStateClosed; break; /*+ * Set a SQL query to use with another zDB Tag. * * <code> * <zdb:query use="ociConn" id="ociQuery"> * SELECT US.NM_USUARIO userLogin * , P.NM_PESSOA userName * , P.CD_PESSOA userId * , US.CD_SESSAO_LOGIN userLoginLast * , US.CD_SESSAO_LOGIN_ERRO userLoginError * , US.NU_LOGIN_ERROS userLoginErrors * , to_char(US.DT_LOGIN_BLOQUEIO,'yyyy/mm/dd hh24:mi:ss') userLoginBlocked * FROM TB_USUARIO_SISTEMA US * LEFT JOIN TB_PESSOA P ON US.CD_PESSOA_USUARIO = P.CD_PESSOA * AND FL_ATIVO = 'S' * </zdb:query> * </code> * * @param string use="ociConn" The Id Handle from a Open zDB tag * @param string id="ociQuery" Id where the Query will be saved * @param string update="ociQuery" Id to be updated */ /*+ * Set a SQL query to use with another zDB Tag. * * <code> * <zdb:query use="ociConn" id="ociQuery"> * SELECT US.NM_USUARIO userLogin * , P.NM_PESSOA userName * , P.CD_PESSOA userId * , US.CD_SESSAO_LOGIN userLoginLast * , US.CD_SESSAO_LOGIN_ERRO userLoginError * , US.NU_LOGIN_ERROS userLoginErrors * , to_char(US.DT_LOGIN_BLOQUEIO,'yyyy/mm/dd hh24:mi:ss') userLoginBlocked * FROM TB_USUARIO_SISTEMA US * LEFT JOIN TB_PESSOA P ON US.CD_PESSOA_USUARIO = P.CD_PESSOA * AND FL_ATIVO = 'S' * </zdb:query> * </code> * * @param string use="ociConn" The Id Handle from a Open zDB tag * @param string id="ociQuery" Id where the Query will be saved * @param string update="ociQuery" Id to be updated */ case "query": $errorMessage .= ztagParamCheck($arrParam, "use"); if ($arrayTag[$tagId][ztagContentWidth]) { $strContent = ztagVars($arrayTag[$tagId][ztagContent], $arrayTagId); if (!strlen($strId)) { $errorMessage .= ztagParamCheck($arrParam, "update"); $strId = $strUpdate; } else { $errorMessage .= ztagParamCheck($arrParam, "id"); } if ($strId) { $arrayTagId[$strId][ztagIdValue] = $strContent; $arrayTagId[$strId][ztagIdLength] = strlen($strContent); $arrayTagId[$strId][ztagIdType] = idTypeQuery; $arrayTagId[$strId][ztagIdHandle] = $arrayTagId[$strUse][ztagIdHandle]; } dbQuery($arrayTagId[$strId][ztagIdHandle], $strContent); } else { $errorMessage .= "<br />Tag Query cannot be empty!"; } break; /*+ * Return TRUE if the current record is at the first * * <code> * <zdb:bof use="mysqlConn" /> * </code> * * @param string use="mysqlConn" - The Id Handle from a Open zDB tag */ /*+ * Return TRUE if the current record is at the first * * <code> * <zdb:bof use="mysqlConn" /> * </code> * * @param string use="mysqlConn" - The Id Handle from a Open zDB tag */ case "bof": $errorMessage .= ztagParamCheck($arrParam, "use"); $arrayTag[$tagId][ztagResult] = dbBOF($arrayTagId[$strUse][ztagIdHandle]); break; /*+ * Return TRUE if the current record is at the first * * <code> * <zdb:eof use="mysqlConn" /> * </code> * * use="mysqlConn" - The Id Handle from a Open zDB tag */ /*+ * Return TRUE if the current record is at the first * * <code> * <zdb:eof use="mysqlConn" /> * </code> * * use="mysqlConn" - The Id Handle from a Open zDB tag */ case "eof": $errorMessage .= ztagParamCheck($arrParam, "use"); $arrayTag[$tagId][ztagResult] = dbEOF($arrayTagId[$strUse][ztagIdHandle]); break; /*+ * Return TRUE if the current record is at the first * * <code> * <zdb:field use="mysqlConn" name="NM_NOME" /> * * Or * * <zdb:field name="NM_NOME" /> * </code> * * @param string use="mysqlConn" - The Id Handle from a Open zDB tag */ /*+ * Return TRUE if the current record is at the first * * <code> * <zdb:field use="mysqlConn" name="NM_NOME" /> * * Or * * <zdb:field name="NM_NOME" /> * </code> * * @param string use="mysqlConn" - The Id Handle from a Open zDB tag */ case "field": if ($intFather = $arrayTag[$tagId][ztagFather]) { $arrParam["use"] = "Field_{$intFather}"; } // echo "<br />intFather=$intFather"; $strVar = $arrParam["var"]; $errorMessage .= ztagParamCheck($arrParam, "use,name"); $dbHandle = $arrayTagId[$strUse][ztagIdHandle]; $dbHandleValue = $dbHandle[dbHandleFetch][$strName]; if ($strTransform) { $dbHandleValue = ztagTransform($dbHandleValue, $strTransform); } if ($strVar) { $arrayTagId["\$" . $strVar][ztagIdValue] = $dbHandleValue; $arrayTagId["\$" . $strVar][ztagIdType] = idTypeField; } $arrayTag[$tagId][ztagResult] = $dbHandleValue; break; /*+ * FieldVar * * <code> * <zdb:fieldvar use="mysqlConn" name="NM_NOME" var="$NM_NOME" /> * </code> * * @param string use="mysqlConn" The Id Handle from a Open zDB tag * @param string name="NM_NOME" * @param string var="$NM_NOME" */ /*+ * FieldVar * * <code> * <zdb:fieldvar use="mysqlConn" name="NM_NOME" var="$NM_NOME" /> * </code> * * @param string use="mysqlConn" The Id Handle from a Open zDB tag * @param string name="NM_NOME" * @param string var="$NM_NOME" */ case "fieldvar": $strVar = $arrParam["var"]; $errorMessage .= ztagParamCheck($arrParam, "use,name,var"); $dbHandle = $arrayTagId[$strUse][ztagIdHandle]; $dbHandleValue = $dbHandle[dbHandleFetch][$strName]; if ($strTransform) { $dbHandleValue = ztagTransform($dbHandleValue, $strTransform); } if ($strVar) { $arrayTagId["\$" . $strVar][ztagIdValue] = $dbHandleValue; $arrayTagId["\$" . $strVar][ztagIdType] = idTypeField; } break; /*+ * Prepare * * <code> * <zdb:prepare conn="oracleConn" use="oracleQuery" /> * </code> * * @param string conn="oracleConn" * @param string use="oracleQuery" */ /*+ * Prepare * * <code> * <zdb:prepare conn="oracleConn" use="oracleQuery" /> * </code> * * @param string conn="oracleConn" * @param string use="oracleQuery" */ case "prepare": $errorMessage .= ztagParamCheck($arrParam, "use,conn"); $dbHandle = $arrayTagId[$strConn][ztagIdHandle]; $dbQuery = $arrayTagId[$strUse][ztagIdValue]; dbPrepare($dbHandle, $dbQuery); break; /*+ * Prepare * * <code> * <zdb:param use="query002" param="P_CD_PESSOA_USUARIO" var="" type="PARAM_INT" /> * </code> * * @param string use="query002" * @param string param="P_CD_PESSOA_USUARIO" * @param string var="" * @param string type="PARAM_INT" */ /*+ * Prepare * * <code> * <zdb:param use="query002" param="P_CD_PESSOA_USUARIO" var="" type="PARAM_INT" /> * </code> * * @param string use="query002" * @param string param="P_CD_PESSOA_USUARIO" * @param string var="" * @param string type="PARAM_INT" */ case "param": $errorMessage .= ztagParamCheck($arrParam, "id,value"); $arrayTagId[$strId][ztagIdValue] = $strValue; $arrayTagId[$strId][ztagIdLength] = strlen($strValue); $arrayTagId[$strId][ztagIdType] = idTypeFVar; break; /*+ * Create * * <code> * <zdb:create use="query002" /> * </code> * * @param string use="query002" */ /*+ * Create * * <code> * <zdb:create use="query002" /> * </code> * * @param string use="query002" */ case "create": $errorMessage .= ztagParamCheck($arrParam, "id"); if ($arrayTag[$tagId][ztagContentWidth]) { $strContent = $arrayTag[$tagId][ztagContent]; $arrayTagId[$strId][ztagIdValue] = $strContent; $arrayTagId[$strId][ztagIdLength] = strlen($strContent); } break; /*+ * Show * * <code> * <zdb:show use="query002" /> * </code> * * @param string use="query002" */ /*+ * Show * * <code> * <zdb:show use="query002" /> * </code> * * @param string use="query002" */ case "show": $errorMessage .= ztagParamCheck($arrParam, "use"); $arrayTag[$tagId][ztagResult] = $arrayTagId[$strUse][ztagIdValue]; break; default: $errorMessage .= "<br />Undefined function \"{$tagFunction}\""; } ztagError($errorMessage, $arrayTag, $tagId); }
/** * Processa as variáveis de todos os parâmetros da matriz * * <code> * ztagVarsParam($arrParam, $arrayTagId); * </code> * * @param array $arrParam array com os parâmetros * @param array $arrayTagId matriz com todas as variáveis * * @return array matriz $arrParam atualizada * * @since 1.0 */ function ztagVarsParam($arrParam, $arrayTagId) { /* @TODO incluir o transform nas varíaveis no momento da leitura incluindo o -> mais os comandos, como: * $pagNome->upper()spacify() * $pagNome->lower->spacify->truncate() * $pagNome->lower->truncate(30)->spacify() * $pagNome->lower->spacify->truncate(30:, ". . .") * * Novas: * capitalize - mesmo que o sentence * count(blnSpaces=1) - Conta caracteres blnSpaces = false, não inclui espaços * cat("Concaternar") - Concatena o texto na variável * countP() ou countParagraphs - Conta parágrafos * countS() ou countSentences - Conta sentenças * countW() ou countWords - Conta palavras * dateFormat("formato") - Formata data como no PHP * default(valor default) - Valor default para uma variável * escape() - retorna os caracteres deixando a apresentação do HTML contido * indent()(quantidade, "caracter) - indenta a "quantidade" de caracteres, sendo 4 o padrão e " " o padrão do caracter * lower() ou toLower - converte todas as letras para minúculas * upper() ou toUpper - converte todas as letras para minúsculas * nl2br() - converte todos os \r\n para <br /> * nl2p() - converte todos os \r\n para <p>conteúdo da linha</p> * nl2Tag("tag") - converte todos os \r\n para a <tag>conteúdo da linha</tag> ou somente <tag> * regexReplate(expressão, resultado) - executa o replace usando regEx * replace(find, replace) - executa o replace * spacify(int, caracter) - inclui espaços entre cada caracter da variável * stringFormtat("string no formato do printf") - formata a string com o formato do printf * strip("caracter") troca \s+ \n+ \t+ pelo caracter definido * stripTags() - some com todas as tags <...> * truncate(limit, "texto adicional", blnWord=0) - trunca os caracteres no limite e poderá incluir o texto adicional e/ou truncar na palavra. * wordWrap(limit, "\n") - inclui no limite \n sempre no limite definido ou com a string definida * * <zconfig:Load file="Arquivo" section="Sessão" /> * * <zc:foreach from="array" item="" key="chave" var="variável do for each"> * <foreach:first /> - se estiver na 1a * <foreach:last /> - se for a última * </zc:foreach> * * <foreach:total /> - número de iterações do foreach * * <zc:if expression="Expressão"> * Conteúdo que será executado/apresentado no then * <zc:elseif expression="Expressão" /> * Conteúdo que será apresentado no else * <zc:else /> * Conteúdo que será apresentado no else * </zc:if> * * <zc:switch expression="expressão"> * <zc:case expression="expressão" /> * Valor que será executado no case * * <zc:case expression="expressão" /> * Valor que será executado no case * * <zc:defaiçt /> * Valor que será executado no caso de nenhum case ter dado * </zc:switch> * * <zliteral:create id="id"> * Bloco que será apresentado sem processamento * </zliteral:create> * * <zcounter:set id="Nome do contador" /> * * Ou talvez usando o {$varInt++} * Ou talvez usando o {$varInt--} * * Define uma variável cíclica... todas as vezes que você usar o valor, ele trocará o valor circularmente * <zvar:cicle id="bgColor" cicles="gray,lightgray,yellow" /> * <tr bgcolor="$bgColor"> <-- Mostra o gray * <tr bgcolor="$bgColor"> <-- Mostra o lightgray * <tr bgcolor="$bgColor"> <-- Mostra o yellow * * <zeval /> * * <ztextformat:set wrap="valor" indent="4"> * </ztextformat:set> * * * @TODO Estudar uma forma de colocar no código variáveis e fórmulas * * Talvez usando o * Mostrar {$nomeVariavel} * Operações {$nomeVariavel * $nomeVariavel} * Atribuição {$variavelString = "Conteúdo"} * Atribuição {$variavelInt1 = 1} * Atribuição {$variavelInt2 = 2} * Comparação {$variavelInt1 === $variavelInt2} * Transformação {$variavelString->sentence()->substr(1, 2)} */ if (is_array($arrParam)) { foreach ($arrParam as $keyParam => $valueParam) { // Seleciona somente os parâmetros que tiveram variáveis preg_match_all("%(?P<var>(?P<type>[\$@#!])[\\w_-]+)(?P<param>(\\[([\"]?.*?[\"]?|['].*?['])?\\])*)?%si", $valueParam, $Matches, PREG_OFFSET_CAPTURE); if (preg_last_error()) { debugError("<b>preg_last_error</b>:" . preg_last_error()); } $patterns = array(); $replacements = array(); $i = 0; foreach ($Matches[0] as $key => $value) { $strVar = $Matches["var"][$key][0]; $strType = $Matches["type"][$key][0]; $patterns[$i] = "/\\{$strVar}/"; if ($strType === "#") { $replacements[$i++] = ztagReturnConstant($strVar); } else { if ($strType === "!") { $replacements[$i++] = $_SESSION[substr($strVar, 1, strlen($strVar))]; } else { $strParam = $Matches["param"][$key][0]; // Processa as matrizes if ($strParam) { // Recupera a array que será utilizada $varVar = $arrayTagId[$strVar][ztagIdValue]; if (is_array($varVar)) { // Localiza cada um dos parâmetros para o processamento preg_match_all("%\\[(?P<inner>[\"']?(?P<param>.+?)[\"']?)\\]%si", $strParam, $MatchesParam, PREG_OFFSET_CAPTURE); // debugError($MatchesParam, 1); $strEval = "return \$varVar"; $strPaternParam = ""; foreach ($MatchesParam[0] as $keyInner => $valueInner) { $strParamContent = ztagVars($MatchesParam["param"][$keyInner][0], $arrayTagId); if (preg_match("/\\d+/", $strParamContent)) { $strEval .= "[{$strParamContent}]"; } else { $strEval .= "[\"{$strParamContent}\"]"; } $strPaternParam .= "\\[" . $MatchesParam["inner"][$keyInner][0] . "\\]"; } $strEval .= ";"; $patterns[$i] = "/\\{$strVar}{$strPaternParam}/"; $replacements[$i++] = eval($strEval); } else { return "The {$strVar} is not a array!"; } } else { $replacements[$i++] = $arrayTagId[$strVar][ztagIdValue]; } } } } $arrParam[$keyParam] = preg_replace($patterns, $replacements, $valueParam); } } return $arrParam; }