2011-07-08 19:06:32 -04:00
|
|
|
<?php
|
2012-07-03 15:35:57 -04:00
|
|
|
|
2011-07-11 18:06:32 -04:00
|
|
|
/**
|
|
|
|
|
* pmTablesProxy
|
|
|
|
|
* @author Erik Amaru Ortiz <erik@colosa.com, aortiz.erik@gmail.com>
|
|
|
|
|
* @inherits HttpProxyController
|
|
|
|
|
* @access public
|
|
|
|
|
*/
|
|
|
|
|
require_once 'classes/model/AdditionalTables.php';
|
2011-07-08 19:06:32 -04:00
|
|
|
|
|
|
|
|
class pmTablesProxy extends HttpProxyController
|
|
|
|
|
{
|
2011-07-11 18:06:32 -04:00
|
|
|
|
2012-07-03 15:35:57 -04:00
|
|
|
protected $className;
|
|
|
|
|
protected $classPeerName;
|
|
|
|
|
protected $dynUid;
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* get pmtables list
|
|
|
|
|
* @param string $httpData->start
|
|
|
|
|
* @param string $httpData->limit
|
|
|
|
|
* @param string $httpData->textFilter
|
|
|
|
|
*/
|
|
|
|
|
public function getList($httpData)
|
|
|
|
|
{
|
|
|
|
|
G::LoadClass('configuration');
|
|
|
|
|
G::LoadClass('processMap');
|
|
|
|
|
G::LoadClass('pmTable');
|
|
|
|
|
$configurations = new Configurations();
|
|
|
|
|
$processMap = new processMap();
|
|
|
|
|
|
|
|
|
|
// setting parameters
|
|
|
|
|
$config = $configurations->getConfiguration('additionalTablesList', 'pageSize', '', $_SESSION['USER_LOGGED']);
|
|
|
|
|
$env = $configurations->getConfiguration('ENVIRONMENT_SETTINGS', '');
|
|
|
|
|
$limit_size = isset($config->pageSize) ? $config['pageSize'] : 20;
|
|
|
|
|
$start = isset($httpData->start) ? $httpData->start : 0;
|
|
|
|
|
$limit = isset($httpData->limit) ? $httpData->limit : $limit_size;
|
|
|
|
|
$filter = isset($httpData->textFilter) ? $httpData->textFilter : '';
|
|
|
|
|
$pro_uid = isset($httpData->pro_uid) ? $httpData->pro_uid : null;
|
|
|
|
|
|
|
|
|
|
if ($pro_uid !== null) {
|
|
|
|
|
$process = $pro_uid == '' ? array('not_equal' => $pro_uid) : array('equal' => $pro_uid);
|
|
|
|
|
$addTables = AdditionalTables::getAll($start, $limit, $filter, $process);
|
|
|
|
|
|
|
|
|
|
$c = $processMap->getReportTablesCriteria($pro_uid);
|
|
|
|
|
$oDataset = RoutePeer::doSelectRS($c);
|
|
|
|
|
$oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC);
|
|
|
|
|
$reportTablesOldList = array();
|
|
|
|
|
while ($oDataset->next()) {
|
|
|
|
|
$reportTablesOldList[] = $oDataset->getRow();
|
|
|
|
|
}
|
|
|
|
|
$addTables['count'] += count($reportTablesOldList);
|
|
|
|
|
|
|
|
|
|
foreach ($reportTablesOldList as $i => $oldRepTab) {
|
|
|
|
|
$addTables['rows'][] = array(
|
|
|
|
|
'ADD_TAB_UID' => $oldRepTab['REP_TAB_UID'],
|
|
|
|
|
'PRO_UID' => $oldRepTab['PRO_UID'],
|
|
|
|
|
'DBS_UID' => ($oldRepTab['REP_TAB_CONNECTION'] == 'wf' ? 'workflow' : 'rp'),
|
|
|
|
|
'ADD_TAB_DESCRIPTION' => $oldRepTab['REP_TAB_TITLE'],
|
|
|
|
|
'ADD_TAB_NAME' => $oldRepTab['REP_TAB_NAME'],
|
|
|
|
|
'ADD_TAB_TYPE' => $oldRepTab['REP_TAB_TYPE'],
|
|
|
|
|
'TYPE' => 'CLASSIC'
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
} else {
|
|
|
|
|
$addTables = AdditionalTables::getAll($start, $limit, $filter);
|
2011-11-17 12:40:23 -04:00
|
|
|
}
|
2011-11-21 18:38:39 -04:00
|
|
|
|
2012-07-03 15:35:57 -04:00
|
|
|
foreach ($addTables['rows'] as $i => $table) {
|
|
|
|
|
try {
|
|
|
|
|
$con = Propel::getConnection(pmTable::resolveDbSource($table['DBS_UID']));
|
|
|
|
|
$stmt = $con->createStatement();
|
|
|
|
|
$rs = $stmt->executeQuery('SELECT COUNT(*) AS NUM_ROWS from ' . $table['ADD_TAB_NAME']);
|
|
|
|
|
if ($rs->next()) {
|
|
|
|
|
$r = $rs->getRow();
|
|
|
|
|
$addTables['rows'][$i]['NUM_ROWS'] = $r['NUM_ROWS'];
|
|
|
|
|
} else {
|
|
|
|
|
$addTables['rows'][$i]['NUM_ROWS'] = 0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//removing the prefix "PMT" to allow alphabetical order (just in view)
|
|
|
|
|
if (substr($addTables['rows'][$i]['ADD_TAB_NAME'], 0, 4) == 'PMT_') {
|
|
|
|
|
$addTables['rows'][$i]['ADD_TAB_NAME'] = substr($addTables['rows'][$i]['ADD_TAB_NAME'], 4);
|
|
|
|
|
}
|
|
|
|
|
} catch (Exception $e) {
|
|
|
|
|
$addTables['rows'][$i]['NUM_ROWS'] = G::LoadTranslation('ID_TABLE_NOT_FOUND');
|
|
|
|
|
}
|
2011-11-21 18:38:39 -04:00
|
|
|
}
|
2012-07-03 15:35:57 -04:00
|
|
|
|
|
|
|
|
return $addTables;
|
2011-10-11 17:13:13 -04:00
|
|
|
}
|
2011-07-08 19:06:32 -04:00
|
|
|
|
2012-07-03 15:35:57 -04:00
|
|
|
/**
|
|
|
|
|
* get processesList
|
|
|
|
|
*/
|
|
|
|
|
public function getProcessList()
|
|
|
|
|
{
|
|
|
|
|
require_once 'classes/model/Process.php';
|
|
|
|
|
|
|
|
|
|
$process = new Process();
|
|
|
|
|
return $process->getAll();
|
2012-06-25 15:26:44 -04:00
|
|
|
}
|
2011-07-08 19:06:32 -04:00
|
|
|
|
2012-07-03 15:35:57 -04:00
|
|
|
/**
|
|
|
|
|
* get database connection list
|
|
|
|
|
*/
|
|
|
|
|
public function getDbConnectionsList()
|
|
|
|
|
{
|
|
|
|
|
if (!isset($_SESSION['PROCESS'])) {
|
|
|
|
|
$_SESSION['PROCESS'] = $_POST['PRO_UID'];
|
2011-07-08 19:06:32 -04:00
|
|
|
}
|
2012-07-03 15:35:57 -04:00
|
|
|
G::LoadClass('dbConnections');
|
|
|
|
|
$proUid = $_POST['PRO_UID'];
|
|
|
|
|
$dbConn = new DbConnections();
|
|
|
|
|
$dbConnections = $dbConn->getConnectionsProUid($proUid);
|
|
|
|
|
$defaultConnections = array(
|
|
|
|
|
array('DBS_UID' => 'workflow', 'DBS_NAME' => 'Workflow'),
|
|
|
|
|
array('DBS_UID' => 'rp', 'DBS_NAME' => 'REPORT')
|
|
|
|
|
);
|
2011-07-08 19:06:32 -04:00
|
|
|
|
2012-07-03 15:35:57 -04:00
|
|
|
$dbConnections = array_merge($defaultConnections, $dbConnections);
|
|
|
|
|
|
|
|
|
|
return $dbConnections;
|
2011-07-13 19:39:30 -04:00
|
|
|
}
|
2012-07-03 15:35:57 -04:00
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* get dynaform fields
|
|
|
|
|
* @param string $httpData->PRO_UID
|
|
|
|
|
* @param string $httpData->TYPE
|
|
|
|
|
* @param string $httpData->GRID_UID
|
|
|
|
|
*/
|
|
|
|
|
public function getDynafields($httpData)
|
|
|
|
|
{
|
|
|
|
|
G::LoadClass('reportTables');
|
|
|
|
|
|
|
|
|
|
$aFields['FIELDS'] = array();
|
|
|
|
|
$aFields['PRO_UID'] = $httpData->PRO_UID;
|
|
|
|
|
$dynFields = array();
|
|
|
|
|
|
|
|
|
|
if (isset($httpData->TYPE) && $httpData->TYPE == 'GRID') {
|
|
|
|
|
$aProcessGridFields = Array();
|
|
|
|
|
if (isset($httpData->GRID_UID)) {
|
|
|
|
|
list($gridName, $gridId) = explode('-', $httpData->GRID_UID);
|
|
|
|
|
$this->dynUid = $gridId;
|
|
|
|
|
|
|
|
|
|
$httpData->textFilter = isset($httpData->textFilter) ? $httpData->textFilter : null;
|
|
|
|
|
$dynFields = $this->_getDynafields($aFields['PRO_UID'], 'grid', $httpData->start,
|
|
|
|
|
$httpData->limit, $httpData->textFilter);
|
|
|
|
|
} else {
|
|
|
|
|
if (isset($_SESSION['_cache_pmtables'])) {
|
|
|
|
|
unset($_SESSION['_cache_pmtables']);
|
|
|
|
|
}
|
|
|
|
|
$gridFields = $this->_getGridFields($aFields['PRO_UID']);
|
|
|
|
|
|
|
|
|
|
foreach ($gridFields as $gfield) {
|
|
|
|
|
$dynFields[] = array(
|
|
|
|
|
'FIELD_UID' => $gfield['name'] . '-' . $gfield['xmlform'],
|
|
|
|
|
'FIELD_NAME' => $gfield['name']
|
|
|
|
|
);
|
|
|
|
|
}
|
2011-07-13 19:39:30 -04:00
|
|
|
}
|
2012-07-03 15:35:57 -04:00
|
|
|
} else {
|
|
|
|
|
// normal dynaform
|
|
|
|
|
$httpData->textFilter = isset($httpData->textFilter) ? $httpData->textFilter : null;
|
|
|
|
|
$dynFields = $this->_getDynafields($aFields['PRO_UID'], 'xmlform', $httpData->start,
|
|
|
|
|
$httpData->limit, $httpData->textFilter);
|
|
|
|
|
}
|
2011-07-13 19:39:30 -04:00
|
|
|
|
2012-07-03 15:35:57 -04:00
|
|
|
return $dynFields;
|
2011-07-08 19:06:32 -04:00
|
|
|
}
|
|
|
|
|
|
2012-07-03 15:35:57 -04:00
|
|
|
public function updateAvDynafields($httpData)
|
|
|
|
|
{
|
|
|
|
|
$indexes = explode(',', $httpData->indexes);
|
|
|
|
|
$fields = array();
|
|
|
|
|
$httpData->isset = $httpData->isset == 'true' ? true : false;
|
|
|
|
|
|
|
|
|
|
if (isset($_SESSION['_cache_pmtables']) && $_SESSION['_cache_pmtables']['pro_uid'] == $httpData->PRO_UID) {
|
|
|
|
|
foreach ($indexes as $i) {
|
|
|
|
|
if (is_numeric($i)) {
|
|
|
|
|
if (isset($_SESSION['_cache_pmtables']['rows'][$i])) {
|
|
|
|
|
$_SESSION['_cache_pmtables']['rows'][$i]['_isset'] = $httpData->isset;
|
|
|
|
|
if ($httpData->isset) {
|
|
|
|
|
$_SESSION['_cache_pmtables']['count']++;
|
|
|
|
|
} else {
|
|
|
|
|
$_SESSION['_cache_pmtables']['count']--;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
$fields[] = $_SESSION['_cache_pmtables']['rows'][$i]['FIELD_NAME'];
|
|
|
|
|
}
|
|
|
|
|
} else {
|
2011-07-08 19:06:32 -04:00
|
|
|
|
2012-07-03 15:35:57 -04:00
|
|
|
$index = $_SESSION['_cache_pmtables']['indexes'][$i];
|
|
|
|
|
$_SESSION['_cache_pmtables']['rows'][$index]['_isset'] = $httpData->isset;
|
|
|
|
|
}
|
|
|
|
|
}
|
2011-08-29 11:39:22 -04:00
|
|
|
}
|
2011-10-11 17:13:13 -04:00
|
|
|
|
2012-07-03 15:35:57 -04:00
|
|
|
return $fields;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* save pm table
|
|
|
|
|
*/
|
|
|
|
|
public function save($httpData, $alterTable=true)
|
|
|
|
|
{
|
|
|
|
|
require_once 'classes/model/AdditionalTables.php';
|
|
|
|
|
require_once 'classes/model/Fields.php';
|
|
|
|
|
|
2012-03-08 16:08:37 -04:00
|
|
|
try {
|
2012-07-03 15:35:57 -04:00
|
|
|
ob_start();
|
|
|
|
|
$data = (array) $httpData;
|
|
|
|
|
$data['PRO_UID'] = trim($data['PRO_UID']);
|
|
|
|
|
$data['columns'] = G::json_decode(stripslashes($httpData->columns)); //decofing data columns
|
|
|
|
|
|
|
|
|
|
$isReportTable = $data['PRO_UID'] != '' ? true : false;
|
|
|
|
|
$oAdditionalTables = new AdditionalTables();
|
|
|
|
|
$oFields = new Fields();
|
|
|
|
|
$repTabClassName = $oAdditionalTables->getPHPName($data['REP_TAB_NAME']);
|
|
|
|
|
$columns = $data['columns'];
|
|
|
|
|
|
2012-07-26 10:49:57 -04:00
|
|
|
// Reserved Words Table
|
2012-07-03 15:35:57 -04:00
|
|
|
$reservedWords = array(
|
|
|
|
|
'ALTER', 'CLOSE', 'COMMIT', 'CREATE', 'DECLARE', 'DELETE', 'DROP', 'FETCH', 'FUNCTION', 'GRANT',
|
|
|
|
|
'INDEX', 'INSERT', 'OPEN', 'REVOKE', 'ROLLBACK', 'SELECT', 'SYNONYM', 'TABLE', 'UPDATE', 'VIEW',
|
|
|
|
|
'APP_UID', 'ROW', 'PMTABLE'
|
|
|
|
|
);
|
|
|
|
|
|
2012-07-26 10:49:57 -04:00
|
|
|
// Reserved Words Field
|
|
|
|
|
$reservedWordsPhp = array(
|
|
|
|
|
'case', 'catch', 'cfunction', 'class', 'clone', 'const', 'continue', 'declare', 'default',
|
|
|
|
|
'do', 'else', 'elseif', 'enddeclare', 'endfor', 'endforeach', 'endif', 'endswitch', 'endwhile',
|
|
|
|
|
'extends', 'final', 'for', 'foreach', 'function', 'global', 'goto', 'if', 'implements',
|
|
|
|
|
'interface', 'instanceof', 'private', 'namespace', 'new', 'old_function', 'or', 'throw',
|
|
|
|
|
'protected', 'public', 'static', 'switch', 'xor', 'try', 'use', 'var', 'while'
|
|
|
|
|
);
|
|
|
|
|
|
2012-09-04 12:40:47 -04:00
|
|
|
$reservedWordsSql = G::reservedWordsSql();
|
|
|
|
|
|
2012-07-03 15:35:57 -04:00
|
|
|
// verify if exists.
|
|
|
|
|
if ($data['REP_TAB_UID'] == '' || (isset($httpData->forceUid) && $httpData->forceUid)) {
|
|
|
|
|
//new report table
|
|
|
|
|
if ($isReportTable && $alterTable) {
|
|
|
|
|
//setting default columns
|
|
|
|
|
$defaultColumns = $this->_getReportTableDefaultColumns($data['REP_TAB_TYPE']);
|
|
|
|
|
$columns = array_merge($defaultColumns, $columns);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/** validations * */
|
|
|
|
|
if (is_array($oAdditionalTables->loadByName($data['REP_TAB_NAME']))) {
|
|
|
|
|
throw new Exception(G::loadTranslation('ID_PMTABLE_ALREADY_EXISTS', array($data['REP_TAB_NAME'])));
|
|
|
|
|
}
|
|
|
|
|
|
2012-09-04 12:40:47 -04:00
|
|
|
if (in_array(strtoupper($data["REP_TAB_NAME"]), $reservedWords) ||
|
|
|
|
|
in_array(strtoupper($data["REP_TAB_NAME"]), $reservedWordsSql)
|
|
|
|
|
) {
|
|
|
|
|
throw (new Exception(G::LoadTranslation("ID_PMTABLE_INVALID_NAME", array($data["REP_TAB_NAME"]))));
|
2012-07-03 15:35:57 -04:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//backward compatility
|
|
|
|
|
foreach ($columns as $i => $column) {
|
2012-09-04 12:40:47 -04:00
|
|
|
if (in_array(strtoupper($columns[$i]->field_name), $reservedWordsSql) ||
|
|
|
|
|
in_array(strtolower($columns[$i]->field_name), $reservedWordsPhp)
|
|
|
|
|
) {
|
|
|
|
|
throw (new Exception(
|
|
|
|
|
G::LoadTranslation("ID_PMTABLE_INVALID_FIELD_NAME", array($columns[$i]->field_name))
|
|
|
|
|
));
|
2012-07-26 10:49:57 -04:00
|
|
|
}
|
2012-09-04 12:40:47 -04:00
|
|
|
|
2012-07-03 15:35:57 -04:00
|
|
|
switch ($column->field_type) {
|
|
|
|
|
case 'INT': $columns[$i]->field_type = 'INTEGER';
|
|
|
|
|
break;
|
|
|
|
|
case 'TEXT': $columns[$i]->field_type = 'LONGVARCHAR';
|
|
|
|
|
break;
|
|
|
|
|
// propel DATETIME equivalent is TIMESTAMP
|
|
|
|
|
case 'DATETIME': $columns[$i]->field_type = 'TIMESTAMP';
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// VALIDATIONS
|
|
|
|
|
if ($columns[$i]->field_autoincrement) {
|
2012-07-19 09:53:18 -04:00
|
|
|
$typeCol = $columns[$i]->field_type;
|
|
|
|
|
if (! ($typeCol === 'INTEGER' ||
|
|
|
|
|
$typeCol === 'TINYINT' ||
|
|
|
|
|
$typeCol === 'SMALLINT' ||
|
|
|
|
|
$typeCol === 'BIGINT')
|
|
|
|
|
) {
|
2012-07-03 15:35:57 -04:00
|
|
|
$columns[$i]->field_autoincrement = false;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
G::loadClass('pmTable');
|
|
|
|
|
|
|
|
|
|
$pmTable = new pmTable($data['REP_TAB_NAME']);
|
|
|
|
|
$pmTable->setDataSource($data['REP_TAB_CONNECTION']);
|
|
|
|
|
$pmTable->setColumns($columns);
|
|
|
|
|
$pmTable->setAlterTable($alterTable);
|
|
|
|
|
$pmTable->build();
|
|
|
|
|
|
|
|
|
|
$buildResult = ob_get_contents();
|
|
|
|
|
ob_end_clean();
|
|
|
|
|
|
|
|
|
|
// Updating additional table struture information
|
|
|
|
|
$addTabData = array(
|
|
|
|
|
'ADD_TAB_UID' => $data['REP_TAB_UID'],
|
|
|
|
|
'ADD_TAB_NAME' => $data['REP_TAB_NAME'],
|
|
|
|
|
'ADD_TAB_CLASS_NAME' => $repTabClassName,
|
|
|
|
|
'ADD_TAB_DESCRIPTION' => $data['REP_TAB_DSC'],
|
|
|
|
|
'ADD_TAB_PLG_UID' => '',
|
|
|
|
|
'DBS_UID' => ($data['REP_TAB_CONNECTION'] ? $data['REP_TAB_CONNECTION'] : 'workflow'),
|
|
|
|
|
'PRO_UID' => $data['PRO_UID'],
|
|
|
|
|
'ADD_TAB_TYPE' => $data['REP_TAB_TYPE'],
|
|
|
|
|
'ADD_TAB_GRID' => $data['REP_TAB_GRID']
|
|
|
|
|
);
|
|
|
|
|
if ($data['REP_TAB_UID'] == '' || (isset($httpData->forceUid) && $httpData->forceUid)) {
|
|
|
|
|
//new report table
|
|
|
|
|
//create record
|
|
|
|
|
$addTabUid = $oAdditionalTables->create($addTabData);
|
|
|
|
|
} else {
|
|
|
|
|
//editing report table
|
|
|
|
|
//updating record
|
|
|
|
|
$addTabUid = $data['REP_TAB_UID'];
|
|
|
|
|
$oAdditionalTables->update($addTabData);
|
|
|
|
|
|
|
|
|
|
//removing old data fields references
|
|
|
|
|
$oCriteria = new Criteria('workflow');
|
|
|
|
|
$oCriteria->add(FieldsPeer::ADD_TAB_UID, $data['REP_TAB_UID']);
|
|
|
|
|
FieldsPeer::doDelete($oCriteria);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Updating pmtable fields
|
|
|
|
|
foreach ($columns as $i => $column) {
|
|
|
|
|
$field = array(
|
|
|
|
|
'FLD_UID' => $column->uid,
|
|
|
|
|
'FLD_INDEX' => $i,
|
|
|
|
|
'ADD_TAB_UID' => $addTabUid,
|
|
|
|
|
'FLD_NAME' => $column->field_name,
|
|
|
|
|
'FLD_DESCRIPTION' => $column->field_label,
|
|
|
|
|
'FLD_TYPE' => $column->field_type,
|
|
|
|
|
'FLD_SIZE' => $column->field_size == '' ? null : $column->field_size,
|
|
|
|
|
'FLD_NULL' => $column->field_null ? 1 : 0,
|
|
|
|
|
'FLD_AUTO_INCREMENT' => $column->field_autoincrement ? 1 : 0,
|
|
|
|
|
'FLD_KEY' => $column->field_key ? 1 : 0,
|
|
|
|
|
'FLD_FOREIGN_KEY' => 0,
|
|
|
|
|
'FLD_FOREIGN_KEY_TABLE' => '',
|
|
|
|
|
'FLD_DYN_NAME' => $column->field_dyn,
|
|
|
|
|
'FLD_DYN_UID' => $column->field_uid,
|
|
|
|
|
'FLD_FILTER' => (isset($column->field_filter) && $column->field_filter) ? 1 : 0
|
|
|
|
|
);
|
|
|
|
|
$oFields->create($field);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if ($isReportTable && $alterTable) {
|
|
|
|
|
// the table was create successfully but we're catching problems while populating table
|
|
|
|
|
try {
|
|
|
|
|
$oAdditionalTables->populateReportTable($data['REP_TAB_NAME'],
|
|
|
|
|
$pmTable->getDataSource(),
|
|
|
|
|
$data['REP_TAB_TYPE'],
|
|
|
|
|
$data['PRO_UID'],
|
|
|
|
|
$data['REP_TAB_GRID']);
|
|
|
|
|
} catch (Exception $e) {
|
|
|
|
|
$result->message = $result->msg = $e->getMessage();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
$result->success = true;
|
|
|
|
|
$result->message = $result->msg = $buildResult;
|
|
|
|
|
} catch (Exception $e) {
|
|
|
|
|
$buildResult = ob_get_contents();
|
|
|
|
|
ob_end_clean();
|
|
|
|
|
$result->success = false;
|
|
|
|
|
|
|
|
|
|
// if it is a propel exception message
|
|
|
|
|
if (preg_match('/(.*)\s\[(.*):\s(.*)\]\s\[(.*):\s(.*)\]/', $e->getMessage(), $match)) {
|
|
|
|
|
$result->message = $result->msg = $match[3];
|
|
|
|
|
$result->type = ucfirst($pmTable->getDbConfig()->adapter);
|
|
|
|
|
} else {
|
|
|
|
|
$result->message = $result->msg = $e->getMessage();
|
|
|
|
|
$result->type = G::loadTranslation('ID_EXCEPTION');
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
$result->trace = $e->getTraceAsString();
|
2012-03-08 16:08:37 -04:00
|
|
|
}
|
2012-07-03 15:35:57 -04:00
|
|
|
|
|
|
|
|
return $result;
|
2011-07-08 19:06:32 -04:00
|
|
|
}
|
|
|
|
|
|
2012-07-03 15:35:57 -04:00
|
|
|
/**
|
|
|
|
|
* delete pm table
|
|
|
|
|
* @param string $httpData->rows
|
|
|
|
|
*/
|
|
|
|
|
public function delete($httpData)
|
|
|
|
|
{
|
|
|
|
|
$rows = G::json_decode(stripslashes($httpData->rows));
|
|
|
|
|
$errors = '';
|
|
|
|
|
$count = 0;
|
|
|
|
|
|
|
|
|
|
foreach ($rows as $row) {
|
|
|
|
|
try {
|
|
|
|
|
$at = new AdditionalTables();
|
|
|
|
|
$table = $at->load($row->id);
|
|
|
|
|
|
|
|
|
|
if (!isset($table)) {
|
|
|
|
|
throw new Exception("Table does not exist... skipped!\n");
|
|
|
|
|
}
|
2011-10-11 17:13:13 -04:00
|
|
|
|
2012-07-03 15:35:57 -04:00
|
|
|
if ($row->type == 'CLASSIC') {
|
|
|
|
|
G::LoadClass('reportTables');
|
|
|
|
|
$rp = new reportTables();
|
|
|
|
|
$rp->deleteReportTable($row->id);
|
|
|
|
|
$count++;
|
|
|
|
|
} else {
|
|
|
|
|
$at->deleteAll($row->id);
|
|
|
|
|
$count++;
|
|
|
|
|
}
|
|
|
|
|
} catch (Exception $e) {
|
|
|
|
|
$tableName = isset($table['ADD_TAB_NAME']) ? $table['ADD_TAB_NAME'] : $row->id;
|
|
|
|
|
$errors .= $e->getMessage() . "\n";
|
|
|
|
|
continue;
|
|
|
|
|
}
|
2011-10-11 17:13:13 -04:00
|
|
|
}
|
|
|
|
|
|
2012-07-03 15:35:57 -04:00
|
|
|
if ($errors == '') {
|
|
|
|
|
$result->success = true;
|
|
|
|
|
$result->message = "$count tables removed Successfully.";
|
|
|
|
|
} else {
|
|
|
|
|
$result->success = false;
|
|
|
|
|
$result->message = "$count tables removed but with errors.\n$errors";
|
2011-07-08 19:06:32 -04:00
|
|
|
}
|
2011-10-11 17:13:13 -04:00
|
|
|
|
2012-07-03 15:35:57 -04:00
|
|
|
$result->errors = $errors;
|
2011-09-08 15:00:41 -04:00
|
|
|
|
2012-07-03 15:35:57 -04:00
|
|
|
return $result;
|
2011-09-15 12:43:05 -04:00
|
|
|
}
|
2012-07-03 15:35:57 -04:00
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* get pm tables data
|
|
|
|
|
* @param string $httpData->id
|
|
|
|
|
* @param string $httpData->start
|
|
|
|
|
* @param string $httpData->limit
|
|
|
|
|
*/
|
|
|
|
|
public function dataView($httpData)
|
|
|
|
|
{
|
|
|
|
|
require_once 'classes/model/AdditionalTables.php';
|
|
|
|
|
|
|
|
|
|
G::LoadClass('configuration');
|
|
|
|
|
$co = new Configurations();
|
|
|
|
|
$config = $co->getConfiguration('additionalTablesData', 'pageSize', '', $_SESSION['USER_LOGGED']);
|
|
|
|
|
$limit_size = isset($config['pageSize']) ? $config['pageSize'] : 20;
|
|
|
|
|
$start = isset($httpData->start) ? $httpData->start : 0;
|
|
|
|
|
$limit = isset($httpData->limit) ? $httpData->limit : $limit_size;
|
|
|
|
|
|
|
|
|
|
$additionalTables = new AdditionalTables();
|
|
|
|
|
$table = $additionalTables->load($httpData->id, true);
|
|
|
|
|
$result = $additionalTables->getAllData($httpData->id, $start, $limit);
|
|
|
|
|
|
|
|
|
|
$primaryKeys = $additionalTables->getPrimaryKeys();
|
|
|
|
|
|
|
|
|
|
foreach ($result['rows'] as $i => $row) {
|
|
|
|
|
$primaryKeysValues = array();
|
|
|
|
|
foreach ($primaryKeys as $key) {
|
|
|
|
|
$primaryKeysValues[] = isset($row[$key['FLD_NAME']]) ? $row[$key['FLD_NAME']] : '';
|
|
|
|
|
}
|
|
|
|
|
|
2012-08-13 15:33:25 -04:00
|
|
|
$result['rows'][$i]['__index__'] = G::encrypt(implode(',', $primaryKeysValues), 'pmtable');
|
2012-07-03 15:35:57 -04:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return $result;
|
2011-09-15 12:43:05 -04:00
|
|
|
}
|
|
|
|
|
|
2012-07-03 15:35:57 -04:00
|
|
|
/**
|
|
|
|
|
* create pm tables record
|
|
|
|
|
* @param string $httpData->rows
|
|
|
|
|
*/
|
|
|
|
|
public function dataCreate($httpData, $codification='json')
|
|
|
|
|
{
|
|
|
|
|
if ($codification == 'base64') {
|
|
|
|
|
$rows = unserialize(base64_decode($httpData->rows));
|
|
|
|
|
} else {
|
2012-08-01 10:47:18 -04:00
|
|
|
$rows = G::json_decode($httpData->rows);
|
2011-07-21 18:35:37 -04:00
|
|
|
}
|
2012-07-03 15:35:57 -04:00
|
|
|
|
|
|
|
|
try {
|
|
|
|
|
require_once 'classes/model/AdditionalTables.php';
|
|
|
|
|
$additionalTables = new AdditionalTables();
|
|
|
|
|
$table = $additionalTables->load($httpData->id, true);
|
|
|
|
|
$primaryKeys = $additionalTables->getPrimaryKeys();
|
|
|
|
|
|
|
|
|
|
$this->className = $table['ADD_TAB_CLASS_NAME'];
|
|
|
|
|
$this->classPeerName = $this->className . 'Peer';
|
|
|
|
|
$row = (array) $rows;
|
|
|
|
|
|
|
|
|
|
$row = array_merge(array_change_key_case($row, CASE_LOWER), array_change_key_case($row, CASE_UPPER));
|
|
|
|
|
$toSave = false;
|
|
|
|
|
|
|
|
|
|
if (!file_exists(PATH_WORKSPACE . 'classes/' . $this->className . '.php')) {
|
|
|
|
|
throw new Exception('Create::' . G::loadTranslation('ID_PMTABLE_CLASS_DOESNT_EXIST', $this->className));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
require_once PATH_WORKSPACE . 'classes/' . $this->className . '.php';
|
|
|
|
|
eval('$obj = new ' . $this->className . '();');
|
|
|
|
|
|
|
|
|
|
if (count($row) > 0) {
|
|
|
|
|
eval('$con = Propel::getConnection(' . $this->classPeerName . '::DATABASE_NAME);');
|
|
|
|
|
$obj->fromArray($row, BasePeer::TYPE_FIELDNAME);
|
|
|
|
|
|
|
|
|
|
if ($obj->validate()) {
|
|
|
|
|
$obj->save();
|
|
|
|
|
$toSave = true;
|
|
|
|
|
|
|
|
|
|
$primaryKeysValues = array();
|
|
|
|
|
foreach ($primaryKeys as $primaryKey) {
|
|
|
|
|
$method = 'get' . AdditionalTables::getPHPName($primaryKey['FLD_NAME']);
|
|
|
|
|
$primaryKeysValues[] = $obj->$method();
|
|
|
|
|
}
|
|
|
|
|
} else {
|
|
|
|
|
$msg = '';
|
|
|
|
|
foreach ($obj->getValidationFailures() as $objValidationFailure) {
|
|
|
|
|
$msg .= $objValidationFailure->getMessage() . "\n";
|
|
|
|
|
}
|
|
|
|
|
throw new Exception('Error trying insert into "' . $table['ADD_TAB_NAME'] . "\"\n" . $msg);
|
|
|
|
|
}
|
|
|
|
|
|
2012-08-13 15:33:25 -04:00
|
|
|
$index = G::encrypt(implode(',', $primaryKeysValues), 'pmtable');
|
2012-07-03 15:35:57 -04:00
|
|
|
} else {
|
|
|
|
|
$toSave = false;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if ($toSave) {
|
|
|
|
|
$result->success = true;
|
|
|
|
|
$result->message = 'Record saved successfully';
|
|
|
|
|
$result->rows = $obj->toArray(BasePeer::TYPE_FIELDNAME);
|
|
|
|
|
$result->rows['__index__'] = $index;
|
|
|
|
|
} else {
|
|
|
|
|
$result->success = false;
|
|
|
|
|
$result->rows = array();
|
|
|
|
|
$result->message = '$$';
|
|
|
|
|
}
|
|
|
|
|
} catch (Exception $e) {
|
|
|
|
|
$result->success = false;
|
|
|
|
|
$result->rows = array();
|
|
|
|
|
$result->message = $e->getMessage();
|
2011-07-11 20:08:59 -04:00
|
|
|
}
|
2012-07-03 15:35:57 -04:00
|
|
|
|
|
|
|
|
return $result;
|
2011-07-11 20:08:59 -04:00
|
|
|
}
|
|
|
|
|
|
2012-07-03 15:35:57 -04:00
|
|
|
/**
|
|
|
|
|
* update pm tables record
|
|
|
|
|
* @param string $httpData->id
|
|
|
|
|
*/
|
|
|
|
|
public function dataUpdate($httpData)
|
|
|
|
|
{
|
|
|
|
|
require_once 'classes/model/AdditionalTables.php';
|
|
|
|
|
$oAdditionalTables = new AdditionalTables();
|
|
|
|
|
$table = $oAdditionalTables->load($httpData->id, true);
|
|
|
|
|
$primaryKeys = $oAdditionalTables->getPrimaryKeys('keys');
|
|
|
|
|
$this->className = $table['ADD_TAB_CLASS_NAME'];
|
|
|
|
|
$this->classPeerName = $this->className . 'Peer';
|
|
|
|
|
$sPath = PATH_DB . SYS_SYS . PATH_SEP . 'classes' . PATH_SEP;
|
|
|
|
|
|
|
|
|
|
if (!file_exists($sPath . $this->className . '.php')) {
|
|
|
|
|
throw new Exception('Update:: ' . G::loadTranslation('ID_PMTABLE_CLASS_DOESNT_EXIST', $this->className));
|
|
|
|
|
}
|
2011-07-11 20:08:59 -04:00
|
|
|
|
2012-07-03 15:35:57 -04:00
|
|
|
require_once $sPath . $this->className . '.php';
|
|
|
|
|
|
|
|
|
|
$rows = G::json_decode(stripslashes($httpData->rows));
|
|
|
|
|
|
|
|
|
|
if (is_array($rows)) {
|
|
|
|
|
foreach ($rows as $row) {
|
|
|
|
|
$row = (array) $row;
|
|
|
|
|
$result = $this->_dataUpdate($row, $primaryKeys);
|
|
|
|
|
}
|
|
|
|
|
} else {
|
|
|
|
|
//then is object
|
|
|
|
|
$row = (array) $rows;
|
|
|
|
|
$result = $this->_dataUpdate($row, $primaryKeys);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
$this->success = $result;
|
|
|
|
|
$this->message = $result
|
|
|
|
|
? G::loadTranslation('ID_UPDATED_SUCCESSFULLY')
|
|
|
|
|
: G::loadTranslation('ID_UPDATE_FAILED');
|
2011-07-11 18:06:32 -04:00
|
|
|
}
|
2011-07-11 20:08:59 -04:00
|
|
|
|
2012-07-03 15:35:57 -04:00
|
|
|
/**
|
|
|
|
|
* remove a pm tables record
|
|
|
|
|
* @param string $httpData->id
|
|
|
|
|
*/
|
|
|
|
|
public function dataDestroy($httpData)
|
|
|
|
|
{
|
2011-07-26 11:48:12 -04:00
|
|
|
require_once 'classes/model/AdditionalTables.php';
|
|
|
|
|
$oAdditionalTables = new AdditionalTables();
|
2012-07-03 15:35:57 -04:00
|
|
|
$table = $oAdditionalTables->load($httpData->id, true);
|
|
|
|
|
$this->className = $table['ADD_TAB_CLASS_NAME'];
|
|
|
|
|
$this->classPeerName = $this->className . 'Peer';
|
|
|
|
|
$sPath = PATH_DB . SYS_SYS . PATH_SEP . 'classes' . PATH_SEP;
|
|
|
|
|
|
|
|
|
|
if (!file_exists($sPath . $this->className . '.php')) {
|
|
|
|
|
throw new Exception('Destroy:: ' . G::loadTranslation('ID_PMTABLE_CLASS_DOESNT_EXIST', $this->className));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
require_once $sPath . $this->className . '.php';
|
|
|
|
|
|
|
|
|
|
$this->success = $this->_dataDestroy($httpData->rows);
|
|
|
|
|
$this->message = $this->success
|
|
|
|
|
? G::loadTranslation('ID_DELETED_SUCCESSFULLY')
|
|
|
|
|
: G::loadTranslation('ID_DELETE_FAILED');
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* import a CSV to pm tables record
|
|
|
|
|
* @param string $httpData->id
|
|
|
|
|
*/
|
|
|
|
|
public function importCSV($httpData)
|
|
|
|
|
{
|
|
|
|
|
if (preg_match('/[\x00-\x08\x0b-\x0c\x0e\x1f]/',
|
|
|
|
|
file_get_contents($_FILES['form']['tmp_name']['CSV_FILE'])) === 0) {
|
|
|
|
|
$filename = $_FILES['form']['name']['CSV_FILE'];
|
|
|
|
|
if ($oFile = fopen($_FILES['form']['tmp_name']['CSV_FILE'], 'r')) {
|
|
|
|
|
require_once 'classes/model/AdditionalTables.php';
|
|
|
|
|
$oAdditionalTables = new AdditionalTables();
|
|
|
|
|
$aAdditionalTables = $oAdditionalTables->load($_POST['form']['ADD_TAB_UID'], true);
|
|
|
|
|
$sErrorMessages = '';
|
|
|
|
|
$i = 1;
|
|
|
|
|
$swHead = false;
|
|
|
|
|
while (($aAux = fgetcsv($oFile, 4096, $_POST['form']['CSV_DELIMITER'])) !== false) {
|
|
|
|
|
if (!is_null($aAux[0])) {
|
|
|
|
|
if (count($aAdditionalTables['FIELDS']) > count($aAux)) {
|
|
|
|
|
$this->success = false;
|
|
|
|
|
$this->message = G::LoadTranslation('INVALID_FILE');
|
|
|
|
|
return 0;
|
|
|
|
|
}
|
|
|
|
|
if ($i == 1) {
|
|
|
|
|
$j = 0;
|
|
|
|
|
foreach ($aAdditionalTables['FIELDS'] as $aField) {
|
|
|
|
|
if ($aField['FLD_NAME'] === $aAux[$j]) {
|
|
|
|
|
$swHead = true;
|
|
|
|
|
}
|
|
|
|
|
$j++;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if ($swHead == false) {
|
|
|
|
|
$aData = array();
|
|
|
|
|
$j = 0;
|
|
|
|
|
foreach ($aAdditionalTables['FIELDS'] as $aField) {
|
|
|
|
|
$aData[$aField['FLD_NAME']] = (isset($aAux[$j]) ? $aAux[$j] : '');
|
2012-09-26 19:58:48 -04:00
|
|
|
if ($aData[$aField['FLD_NAME']] == '') {
|
|
|
|
|
switch ($aField['FLD_TYPE']) {
|
|
|
|
|
case 'DATE':
|
|
|
|
|
case 'TIMESTAMP':
|
|
|
|
|
$aData[$aField['FLD_NAME']] = null;
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
2012-07-03 15:35:57 -04:00
|
|
|
$j++;
|
|
|
|
|
}
|
|
|
|
|
try {
|
|
|
|
|
if (!$oAdditionalTables->saveDataInTable($_POST['form']['ADD_TAB_UID'], $aData)) {
|
|
|
|
|
$sErrorMessages .= G::LoadTranslation('ID_DUPLICATE_ENTRY_PRIMARY_KEY')
|
|
|
|
|
. ', ' . G::LoadTranslation('ID_LINE') . ' ' . $i . '. ';
|
|
|
|
|
}
|
|
|
|
|
} catch (Exception $oError) {
|
|
|
|
|
$sErrorMessages .= G::LoadTranslation('ID_ERROR_INSERT_LINE')
|
|
|
|
|
. ': ' . G::LoadTranslation('ID_LINE') . ' ' . $i . '. ';
|
|
|
|
|
}
|
|
|
|
|
} else {
|
|
|
|
|
$swHead = false;
|
|
|
|
|
}
|
|
|
|
|
$i++;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
fclose($oFile);
|
2011-07-26 11:48:12 -04:00
|
|
|
}
|
2012-07-03 15:35:57 -04:00
|
|
|
if ($sErrorMessages != '') {
|
|
|
|
|
$this->success = false;
|
|
|
|
|
$this->message = $sErrorMessages;
|
|
|
|
|
} else {
|
|
|
|
|
$this->success = true;
|
|
|
|
|
$this->message = G::loadTranslation('ID_FILE_IMPORTED_SUCCESSFULLY', array($filename));
|
2011-07-26 11:48:12 -04:00
|
|
|
}
|
2012-07-03 15:35:57 -04:00
|
|
|
} else {
|
|
|
|
|
$sMessage = G::LoadTranslation('ID_UPLOAD_VALID_CSV_FILE');
|
|
|
|
|
$this->success = false;
|
|
|
|
|
$this->message = $sMessage;
|
|
|
|
|
}
|
|
|
|
|
}
|
2011-09-26 16:30:39 -04:00
|
|
|
|
2012-07-03 15:35:57 -04:00
|
|
|
/**
|
|
|
|
|
* export a pm tables record to CSV
|
|
|
|
|
* @param string $httpData->id
|
|
|
|
|
*/
|
|
|
|
|
public function exportCSV($httpData)
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
try {
|
|
|
|
|
|
|
|
|
|
$link = '';
|
|
|
|
|
$size = '';
|
|
|
|
|
$META = 'Content';
|
|
|
|
|
$bytesSaved = 0;
|
|
|
|
|
|
|
|
|
|
require_once 'classes/model/AdditionalTables.php';
|
|
|
|
|
$oAdditionalTables = new AdditionalTables();
|
|
|
|
|
$aAdditionalTables = $oAdditionalTables->load($_POST['ADD_TAB_UID'], true);
|
|
|
|
|
$sErrorMessages = '';
|
|
|
|
|
$sDelimiter = $_POST['CSV_DELIMITER'];
|
|
|
|
|
|
|
|
|
|
$resultData = $oAdditionalTables->getAllData($_POST['ADD_TAB_UID'], null, null, false);
|
|
|
|
|
$rows = $resultData['rows'];
|
|
|
|
|
$count = $resultData['count'];
|
|
|
|
|
|
|
|
|
|
$PUBLIC_ROOT_PATH = PATH_DATA . 'sites' . PATH_SEP . SYS_SYS . PATH_SEP . 'public' . PATH_SEP;
|
|
|
|
|
$filenameOnly = strtolower($aAdditionalTables['ADD_TAB_NAME'] . "_" . date("Y-m-d")
|
|
|
|
|
. '_' . date("Hi") . ".csv");
|
|
|
|
|
$filename = $PUBLIC_ROOT_PATH . $filenameOnly;
|
|
|
|
|
$fp = fopen($filename, "wb");
|
|
|
|
|
|
|
|
|
|
foreach ($rows as $keyCol => $cols) {
|
|
|
|
|
$SDATA = "";
|
|
|
|
|
$cnt = count($cols);
|
|
|
|
|
foreach ($cols as $key => $val) {
|
|
|
|
|
$SDATA .= $val;
|
|
|
|
|
if (--$cnt > 0) {
|
|
|
|
|
$SDATA .= $sDelimiter;
|
|
|
|
|
}
|
2011-09-26 16:30:39 -04:00
|
|
|
}
|
2012-07-03 15:35:57 -04:00
|
|
|
$SDATA .= "\n";
|
|
|
|
|
$bytesSaved += fwrite($fp, $SDATA);
|
2011-07-26 11:48:12 -04:00
|
|
|
}
|
2012-07-03 15:35:57 -04:00
|
|
|
|
|
|
|
|
|
|
|
|
|
fclose($fp);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// $filenameLink = "pmTables/streamExported?f=$filenameOnly";
|
|
|
|
|
$filenameLink = "streamExported?f=$filenameOnly";
|
|
|
|
|
$size = round(($bytesSaved / 1024), 2) . " Kb";
|
|
|
|
|
$filename = $filenameOnly;
|
|
|
|
|
$link = $filenameLink;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
$result->success = true;
|
|
|
|
|
$result->filename = $filenameOnly;
|
|
|
|
|
$result->link = $link;
|
|
|
|
|
$result->message = "Generated file: $filenameOnly, size: $size";
|
|
|
|
|
} catch (Exception $e) {
|
|
|
|
|
$result->success = false;
|
|
|
|
|
$result->message = $e->getMessage();
|
2011-09-26 16:30:39 -04:00
|
|
|
}
|
2011-07-11 18:06:32 -04:00
|
|
|
|
2012-07-03 15:35:57 -04:00
|
|
|
return $result;
|
2011-07-26 17:54:25 -04:00
|
|
|
}
|
2011-08-31 17:58:22 -04:00
|
|
|
|
2012-07-03 15:35:57 -04:00
|
|
|
/**
|
|
|
|
|
* import a pm table
|
|
|
|
|
* @param string $httpData->id
|
|
|
|
|
*/
|
|
|
|
|
public function import($httpData)
|
|
|
|
|
{
|
|
|
|
|
require_once 'classes/model/AdditionalTables.php';
|
|
|
|
|
try {
|
|
|
|
|
$errors = '';
|
2011-08-31 17:58:22 -04:00
|
|
|
|
2012-07-03 15:35:57 -04:00
|
|
|
$overWrite = isset($_POST['form']['OVERWRITE']) ? true : false;
|
2011-08-31 17:58:22 -04:00
|
|
|
|
2012-07-03 15:35:57 -04:00
|
|
|
//save the file
|
|
|
|
|
if ($_FILES['form']['error']['FILENAME'] !== 0) {
|
|
|
|
|
throw new Exception(G::loadTranslation('ID_PMTABLE_UPLOADING_FILE_PROBLEM'));
|
|
|
|
|
}
|
2011-08-31 17:58:22 -04:00
|
|
|
|
2012-07-03 15:35:57 -04:00
|
|
|
$oAdditionalTables = new AdditionalTables();
|
|
|
|
|
$tableNameMap = array();
|
|
|
|
|
$processQueue = array();
|
|
|
|
|
$processQueueTables = array();
|
2011-08-31 17:58:22 -04:00
|
|
|
|
2012-07-03 15:35:57 -04:00
|
|
|
$PUBLIC_ROOT_PATH = PATH_DATA . 'sites' . PATH_SEP . SYS_SYS . PATH_SEP . 'public' . PATH_SEP;
|
|
|
|
|
$filename = $_FILES['form']['name']['FILENAME'];
|
|
|
|
|
$tempName = $_FILES['form']['tmp_name']['FILENAME'];
|
|
|
|
|
G::uploadFile($tempName, $PUBLIC_ROOT_PATH, $filename);
|
2011-08-31 17:58:22 -04:00
|
|
|
|
2012-07-03 15:35:57 -04:00
|
|
|
$fileContent = file_get_contents($PUBLIC_ROOT_PATH . $filename);
|
2011-08-31 17:58:22 -04:00
|
|
|
|
2012-07-03 15:35:57 -04:00
|
|
|
if (strpos($fileContent, '-----== ProcessMaker Open Source Private Tables ==-----') === false) {
|
|
|
|
|
throw new Exception(G::loadTranslation('ID_PMTABLE_INVALID_FILE'));
|
2011-09-15 11:30:27 -04:00
|
|
|
}
|
2012-07-03 15:35:57 -04:00
|
|
|
|
|
|
|
|
$fp = fopen($PUBLIC_ROOT_PATH . $filename, "rb");
|
|
|
|
|
$fsData = intval(fread($fp, 9)); //reading the metadata
|
|
|
|
|
$sType = fread($fp, $fsData);
|
|
|
|
|
|
|
|
|
|
// first create the tables structures
|
|
|
|
|
while (!feof($fp)) {
|
|
|
|
|
switch ($sType) {
|
|
|
|
|
case '@META':
|
|
|
|
|
$fsData = intval(fread($fp, 9));
|
|
|
|
|
$METADATA = fread($fp, $fsData);
|
|
|
|
|
break;
|
|
|
|
|
case '@SCHEMA':
|
|
|
|
|
$fsUid = intval(fread($fp, 9));
|
|
|
|
|
$uid = fread($fp, $fsUid);
|
|
|
|
|
$fsData = intval(fread($fp, 9));
|
|
|
|
|
$schema = fread($fp, $fsData);
|
|
|
|
|
$contentSchema = unserialize($schema);
|
|
|
|
|
$additionalTable = new additionalTables();
|
|
|
|
|
$tableExists = $additionalTable->loadByName($contentSchema['ADD_TAB_NAME']);
|
|
|
|
|
$tableNameMap[$contentSchema['ADD_TAB_NAME']] = $contentSchema['ADD_TAB_NAME'];
|
|
|
|
|
|
|
|
|
|
if ($overWrite) {
|
|
|
|
|
if ($tableExists !== false) {
|
|
|
|
|
$additionalTable->deleteAll($tableExists['ADD_TAB_UID']);
|
|
|
|
|
}
|
|
|
|
|
} else {
|
|
|
|
|
if ($tableExists !== false) {
|
|
|
|
|
// some table exists with the same name
|
|
|
|
|
// renaming...
|
|
|
|
|
$tNameOld = $contentSchema['ADD_TAB_NAME'];
|
|
|
|
|
$newTableName = $contentSchema['ADD_TAB_NAME'] . '_' . date('YmdHis');
|
|
|
|
|
$contentSchema['ADD_TAB_UID'] = G::generateUniqueID();
|
|
|
|
|
$contentSchema['ADD_TAB_NAME'] = $newTableName;
|
|
|
|
|
$contentSchema['ADD_TAB_CLASS_NAME'] = additionalTables::getPHPName($newTableName);
|
|
|
|
|
//mapping the table name for posterior uses
|
|
|
|
|
$tableNameMap[$tNameOld] = $contentSchema['ADD_TAB_NAME'];
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// validating invalid bds_uid in old tables definition -> mapped to workflow
|
|
|
|
|
if (!$contentSchema['DBS_UID']
|
|
|
|
|
|| $contentSchema['DBS_UID'] == '0' || !$contentSchema['DBS_UID']) {
|
|
|
|
|
$contentSchema['DBS_UID'] = 'workflow';
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
$columns = array();
|
|
|
|
|
foreach ($contentSchema['FIELDS'] as $field) {
|
|
|
|
|
$column = array(
|
|
|
|
|
'uid' => '',
|
|
|
|
|
'field_uid' => '',
|
|
|
|
|
'field_name' => $field['FLD_NAME'],
|
|
|
|
|
'field_dyn' => isset($field['FLD_DYN_NAME']) ? $field['FLD_DYN_NAME'] : '',
|
|
|
|
|
'field_label' => isset($field['FLD_DESCRIPTION']) ? $field['FLD_DESCRIPTION'] : '',
|
|
|
|
|
'field_type' => $field['FLD_TYPE'],
|
|
|
|
|
'field_size' => $field['FLD_SIZE'],
|
|
|
|
|
'field_key' => isset($field['FLD_KEY']) ? $field['FLD_KEY'] : 0,
|
|
|
|
|
'field_null' => isset($field['FLD_NULL']) ? $field['FLD_NULL'] : 1,
|
|
|
|
|
'field_autoincrement' => isset($field['FLD_AUTO_INCREMENT'])
|
|
|
|
|
? $field['FLD_AUTO_INCREMENT'] : 0
|
|
|
|
|
);
|
|
|
|
|
$columns[] = $column;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
$tableData = new stdClass();
|
|
|
|
|
$tableData->REP_TAB_UID = $contentSchema['ADD_TAB_UID'];
|
|
|
|
|
$tableData->REP_TAB_NAME = $contentSchema['ADD_TAB_NAME'];
|
|
|
|
|
$tableData->REP_TAB_DSC = $contentSchema['ADD_TAB_DESCRIPTION'];
|
|
|
|
|
$tableData->REP_TAB_CONNECTION = $contentSchema['DBS_UID'];
|
2012-09-03 16:23:37 -04:00
|
|
|
|
|
|
|
|
if (isset($_POST["form"]["PRO_UID"]) && !empty($_POST["form"]["PRO_UID"])) {
|
|
|
|
|
$tableData->PRO_UID = $_POST["form"]["PRO_UID"];
|
|
|
|
|
} else {
|
|
|
|
|
$tableData->PRO_UID = isset($contentSchema["PRO_UID"])? $contentSchema["PRO_UID"] : "";
|
|
|
|
|
}
|
|
|
|
|
|
2012-07-03 15:35:57 -04:00
|
|
|
$tableData->REP_TAB_TYPE = isset($contentSchema['ADD_TAB_TYPE'])
|
|
|
|
|
? $contentSchema['ADD_TAB_TYPE'] : '';
|
|
|
|
|
$tableData->REP_TAB_GRID = isset($contentSchema['ADD_TAB_GRID'])
|
|
|
|
|
? $contentSchema['ADD_TAB_GRID'] : '';
|
|
|
|
|
$tableData->columns = G::json_encode($columns);
|
|
|
|
|
$tableData->forceUid = true;
|
|
|
|
|
|
|
|
|
|
//save the table
|
|
|
|
|
$alterTable = false;
|
|
|
|
|
$result = $this->save($tableData, $alterTable);
|
|
|
|
|
|
|
|
|
|
if ($result->success) {
|
|
|
|
|
$processQueueTables[$contentSchema['DBS_UID']][] = $contentSchema['ADD_TAB_NAME'];
|
|
|
|
|
} else {
|
|
|
|
|
$errors .= 'Error creating table: ' . $tableData->REP_TAB_NAME
|
|
|
|
|
. '-> ' . $result->message . "\n\n";
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
break;
|
|
|
|
|
case '@DATA':
|
|
|
|
|
$fstName = intval(fread($fp, 9));
|
|
|
|
|
$tableName = fread($fp, $fstName);
|
|
|
|
|
$fsData = intval(fread($fp, 9));
|
|
|
|
|
if ($fsData > 0) {
|
|
|
|
|
$data = fread($fp, $fsData);
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
$fsData = intval(fread($fp, 9)); //reading the metadata
|
|
|
|
|
if ($fsData > 0) {
|
|
|
|
|
// reading next block type
|
|
|
|
|
$sType = fread($fp, $fsData);
|
|
|
|
|
} else {
|
|
|
|
|
break;
|
|
|
|
|
}
|
2011-09-15 11:30:27 -04:00
|
|
|
}
|
2012-07-03 15:35:57 -04:00
|
|
|
|
|
|
|
|
fclose($fp);
|
|
|
|
|
G::loadClass('pmTable');
|
|
|
|
|
|
|
|
|
|
foreach ($processQueueTables as $dbsUid => $tables) {
|
|
|
|
|
$pmTable = new pmTable();
|
|
|
|
|
ob_start();
|
|
|
|
|
$pmTable->buildModelFor($dbsUid, $tables);
|
|
|
|
|
$buildResult = ob_get_contents();
|
|
|
|
|
ob_end_clean();
|
|
|
|
|
$errors .= $pmTable->upgradeDatabaseFor($pmTable->getDataSource(), $tables);
|
2011-09-15 11:30:27 -04:00
|
|
|
}
|
2012-07-03 15:35:57 -04:00
|
|
|
|
|
|
|
|
$fp = fopen($PUBLIC_ROOT_PATH . $filename, "rb");
|
|
|
|
|
$fsData = intval(fread($fp, 9));
|
|
|
|
|
$sType = fread($fp, $fsData);
|
|
|
|
|
// data processing
|
|
|
|
|
|
|
|
|
|
while (!feof($fp)) {
|
|
|
|
|
|
|
|
|
|
switch ($sType) {
|
|
|
|
|
case '@META':
|
|
|
|
|
$fsData = intval(fread($fp, 9));
|
|
|
|
|
$METADATA = fread($fp, $fsData);
|
|
|
|
|
break;
|
|
|
|
|
case '@SCHEMA':
|
|
|
|
|
$fsUid = intval(fread($fp, 9));
|
|
|
|
|
$uid = fread($fp, $fsUid);
|
|
|
|
|
$fsData = intval(fread($fp, 9));
|
|
|
|
|
$schema = fread($fp, $fsData);
|
|
|
|
|
$contentSchema = unserialize($schema);
|
|
|
|
|
$additionalTable = new additionalTables();
|
|
|
|
|
$table = $additionalTable->loadByName($tableNameMap[$contentSchema['ADD_TAB_NAME']]);
|
|
|
|
|
if ($table['PRO_UID'] != '') {
|
|
|
|
|
// is a report table, try populate it
|
|
|
|
|
$additionalTable->populateReportTable($table['ADD_TAB_NAME'],
|
|
|
|
|
pmTable::resolveDbSource($table['DBS_UID']),
|
|
|
|
|
$table['ADD_TAB_TYPE'],
|
|
|
|
|
$table['PRO_UID'],
|
|
|
|
|
$table['ADD_TAB_GRID']);
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
case '@DATA':
|
|
|
|
|
$fstName = intval(fread($fp, 9));
|
|
|
|
|
$tableName = fread($fp, $fstName);
|
|
|
|
|
$fsData = intval(fread($fp, 9));
|
|
|
|
|
|
|
|
|
|
if ($fsData > 0) {
|
|
|
|
|
$data = fread($fp, $fsData);
|
|
|
|
|
$contentData = unserialize($data);
|
|
|
|
|
$tableName = $tableNameMap[$tableName];
|
|
|
|
|
|
|
|
|
|
$oAdditionalTables = new AdditionalTables();
|
|
|
|
|
$table = $oAdditionalTables->loadByName($tableName);
|
|
|
|
|
$isReport = $table['PRO_UID'] !== '' ? true : false;
|
|
|
|
|
|
|
|
|
|
if ($table !== false) {
|
|
|
|
|
if (!$isReport) {
|
|
|
|
|
if (count($contentData) > 0) {
|
|
|
|
|
foreach ($contentData as $row) {
|
|
|
|
|
$data = new StdClass();
|
|
|
|
|
$data->id = $table['ADD_TAB_UID'];
|
|
|
|
|
$data->rows = base64_encode(serialize($row));
|
|
|
|
|
$res = $this->dataCreate($data, 'base64');
|
|
|
|
|
if (!$res->success) {
|
|
|
|
|
$errors .= $res->message;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
$fsData = intval(fread($fp, 9));
|
|
|
|
|
if ($fsData > 0) {
|
|
|
|
|
$sType = fread($fp, $fsData);
|
|
|
|
|
} else {
|
|
|
|
|
break;
|
|
|
|
|
}
|
2011-10-11 17:13:13 -04:00
|
|
|
}
|
2012-07-03 15:35:57 -04:00
|
|
|
|
|
|
|
|
////////////
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if ($errors == '') {
|
|
|
|
|
$result->success = true;
|
|
|
|
|
$msg = G::loadTranslation('ID_PMTABLE_IMPORT_SUCCESS', array($filename));
|
|
|
|
|
} else {
|
|
|
|
|
$result->success = false;
|
|
|
|
|
$result->errorType = 'warning';
|
|
|
|
|
$msg = G::loadTranslation('ID_PMTABLE_IMPORT_WITH_ERRORS', array($filename)) . "\n\n" . $errors;
|
2011-09-15 11:30:27 -04:00
|
|
|
}
|
2011-10-11 17:13:13 -04:00
|
|
|
|
2012-07-03 15:35:57 -04:00
|
|
|
$result->message = $msg;
|
|
|
|
|
} catch (Exception $e) {
|
|
|
|
|
$result->errorType = 'error';
|
|
|
|
|
$result->buildResult = ob_get_contents();
|
|
|
|
|
ob_end_clean();
|
|
|
|
|
$result->success = false;
|
|
|
|
|
|
|
|
|
|
// if it is a propel exception message
|
|
|
|
|
if (preg_match('/(.*)\s\[(.*):\s(.*)\]\s\[(.*):\s(.*)\]/', $e->getMessage(), $match)) {
|
|
|
|
|
$result->message = $match[3];
|
|
|
|
|
$result->type = G::loadTranslation('ID_ERROR');
|
|
|
|
|
} else {
|
|
|
|
|
$result->message = $e->getMessage();
|
|
|
|
|
$result->type = G::loadTranslation('ID_EXCEPTION');
|
|
|
|
|
}
|
|
|
|
|
//$result->trace = $e->getTraceAsString();
|
2011-10-11 17:13:13 -04:00
|
|
|
}
|
|
|
|
|
|
2012-07-03 15:35:57 -04:00
|
|
|
return $result;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Export PM tables
|
|
|
|
|
* @author: Erik Amaru Ortiz <aortiz.erik@gmail.com>
|
|
|
|
|
*/
|
|
|
|
|
public function export($httpData)
|
|
|
|
|
{
|
|
|
|
|
require_once 'classes/model/AdditionalTables.php';
|
|
|
|
|
$at = new AdditionalTables();
|
|
|
|
|
$tablesToExport = G::json_decode(stripslashes($httpData->rows));
|
|
|
|
|
|
|
|
|
|
try {
|
|
|
|
|
G::LoadCLass('net');
|
|
|
|
|
$net = new NET(G::getIpAddress());
|
|
|
|
|
|
|
|
|
|
G::LoadClass("system");
|
|
|
|
|
|
|
|
|
|
$META = " \n-----== ProcessMaker Open Source Private Tables ==-----\n" .
|
|
|
|
|
" @Ver: 1.0 Oct-2009\n" .
|
|
|
|
|
" @Processmaker version: " . System::getVersion() . "\n" .
|
|
|
|
|
" -------------------------------------------------------\n" .
|
|
|
|
|
" @Export Date: " . date("l jS \of F Y h:i:s A") . "\n" .
|
|
|
|
|
" @Server address: " . getenv('SERVER_NAME') . " (" . getenv('SERVER_ADDR') . ")\n" .
|
|
|
|
|
" @Client address: " . $net->hostname . "\n" .
|
|
|
|
|
" @Workspace: " . SYS_SYS . "\n" .
|
|
|
|
|
" @Export trace back:\n\n";
|
|
|
|
|
|
|
|
|
|
$EXPORT_TRACEBACK = Array();
|
|
|
|
|
$c = 0;
|
|
|
|
|
foreach ($tablesToExport as $table) {
|
|
|
|
|
$tableRecord = $at->load($table->ADD_TAB_UID);
|
|
|
|
|
$tableData = $at->getAllData($table->ADD_TAB_UID, null, null, false);
|
|
|
|
|
$table->ADD_TAB_NAME = $tableRecord['ADD_TAB_NAME'];
|
|
|
|
|
$rows = $tableData['rows'];
|
|
|
|
|
$count = $tableData['count'];
|
|
|
|
|
|
|
|
|
|
array_push($EXPORT_TRACEBACK, Array(
|
|
|
|
|
'uid' => $table->ADD_TAB_UID,
|
|
|
|
|
'name' => $table->ADD_TAB_NAME,
|
|
|
|
|
'num_regs' => $tableData['count'],
|
|
|
|
|
'schema' => $table->_SCHEMA ? 'yes' : 'no',
|
|
|
|
|
'data' => $table->_DATA ? 'yes' : 'no'
|
|
|
|
|
));
|
2011-10-12 19:05:14 -04:00
|
|
|
}
|
2012-07-03 15:35:57 -04:00
|
|
|
|
|
|
|
|
$sTrace = "TABLE UID TABLE NAME\tREGS\tSCHEMA\tDATA\n";
|
|
|
|
|
|
|
|
|
|
foreach ($EXPORT_TRACEBACK as $row) {
|
|
|
|
|
$sTrace .= "{$row['uid']}\t{$row['name']}\t\t{$row['num_regs']}\t{$row['schema']}\t{$row['data']}\n";
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
$META .= $sTrace;
|
|
|
|
|
|
|
|
|
|
///////////////EXPORT PROCESS
|
|
|
|
|
$PUBLIC_ROOT_PATH = PATH_DATA . 'sites' . PATH_SEP . SYS_SYS . PATH_SEP . 'public' . PATH_SEP;
|
|
|
|
|
|
|
|
|
|
$filenameOnly = strtolower('SYS-' . SYS_SYS . "_" . date("Y-m-d") . '_' . date("Hi") . ".pmt");
|
|
|
|
|
|
|
|
|
|
$filename = $PUBLIC_ROOT_PATH . $filenameOnly;
|
|
|
|
|
$fp = fopen($filename, "wb");
|
|
|
|
|
|
|
|
|
|
$bytesSaved = 0;
|
|
|
|
|
$bufferType = '@META';
|
|
|
|
|
$fsData = sprintf("%09d", strlen($META));
|
|
|
|
|
$fsbufferType = sprintf("%09d", strlen($bufferType));
|
|
|
|
|
$bytesSaved += fwrite($fp, $fsbufferType); //writing the size of $oData
|
|
|
|
|
$bytesSaved += fwrite($fp, $bufferType); //writing the $oData
|
|
|
|
|
$bytesSaved += fwrite($fp, $fsData); //writing the size of $oData
|
|
|
|
|
$bytesSaved += fwrite($fp, $META); //writing the $oData
|
|
|
|
|
|
|
|
|
|
foreach ($tablesToExport as $table) {
|
|
|
|
|
|
|
|
|
|
if ($table->_SCHEMA) {
|
|
|
|
|
$oAdditionalTables = new AdditionalTables();
|
|
|
|
|
$aData = $oAdditionalTables->load($table->ADD_TAB_UID, true);
|
|
|
|
|
|
|
|
|
|
$bufferType = '@SCHEMA';
|
|
|
|
|
$SDATA = serialize($aData);
|
|
|
|
|
$fsUid = sprintf("%09d", strlen($table->ADD_TAB_UID));
|
|
|
|
|
$fsData = sprintf("%09d", strlen($SDATA));
|
|
|
|
|
$fsbufferType = sprintf("%09d", strlen($bufferType));
|
|
|
|
|
|
|
|
|
|
$bytesSaved += fwrite($fp, $fsbufferType); //writing the size of $oData
|
|
|
|
|
$bytesSaved += fwrite($fp, $bufferType); //writing the $oData
|
|
|
|
|
$bytesSaved += fwrite($fp, $fsUid); //writing the size of xml file
|
|
|
|
|
$bytesSaved += fwrite($fp, $table->ADD_TAB_UID); //writing the xmlfile
|
|
|
|
|
$bytesSaved += fwrite($fp, $fsData); //writing the size of xml file
|
|
|
|
|
$bytesSaved += fwrite($fp, $SDATA); //writing the xmlfile
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if ($table->_DATA) {
|
|
|
|
|
//export data
|
|
|
|
|
$oAdditionalTables = new additionalTables();
|
|
|
|
|
$tableData = $oAdditionalTables->getAllData($table->ADD_TAB_UID, null, null, false);
|
|
|
|
|
|
|
|
|
|
$SDATA = serialize($tableData['rows']);
|
|
|
|
|
$bufferType = '@DATA';
|
|
|
|
|
|
|
|
|
|
$fsbufferType = sprintf("%09d", strlen($bufferType));
|
|
|
|
|
$fsTableName = sprintf("%09d", strlen($table->ADD_TAB_NAME));
|
|
|
|
|
$fsData = sprintf("%09d", strlen($SDATA));
|
|
|
|
|
|
|
|
|
|
$bytesSaved += fwrite($fp, $fsbufferType); //writing type size
|
|
|
|
|
$bytesSaved += fwrite($fp, $bufferType); //writing type
|
|
|
|
|
$bytesSaved += fwrite($fp, $fsTableName); //writing the size of xml file
|
|
|
|
|
$bytesSaved += fwrite($fp, $table->ADD_TAB_NAME); //writing the xmlfile
|
|
|
|
|
$bytesSaved += fwrite($fp, $fsData); //writing the size of xml file
|
|
|
|
|
$bytesSaved += fwrite($fp, $SDATA); //writing the xmlfile
|
2011-10-11 17:13:13 -04:00
|
|
|
}
|
2011-09-14 08:51:33 -04:00
|
|
|
}
|
2011-09-15 11:30:27 -04:00
|
|
|
|
2012-07-03 15:35:57 -04:00
|
|
|
fclose($fp);
|
|
|
|
|
|
|
|
|
|
$filenameLink = "pmTables/streamExported?f=$filenameOnly";
|
|
|
|
|
$size = round(($bytesSaved / 1024), 2) . " Kb";
|
|
|
|
|
$meta = "<pre>" . $META . "</pre>";
|
|
|
|
|
$filename = $filenameOnly;
|
|
|
|
|
$link = $filenameLink;
|
|
|
|
|
|
|
|
|
|
$result->success = true;
|
|
|
|
|
$result->filename = $filenameOnly;
|
|
|
|
|
$result->link = $link;
|
|
|
|
|
$result->message = "Generated file: $filenameOnly, size: $size";
|
|
|
|
|
} catch (Exception $e) {
|
|
|
|
|
$result->success = false;
|
|
|
|
|
$result->message = $e->getMessage();
|
2011-10-11 17:13:13 -04:00
|
|
|
}
|
2011-09-15 11:30:27 -04:00
|
|
|
|
2012-07-03 15:35:57 -04:00
|
|
|
return $result;
|
2011-07-12 12:02:57 -04:00
|
|
|
}
|
2011-09-15 11:30:27 -04:00
|
|
|
|
2012-07-03 15:35:57 -04:00
|
|
|
public function exportList()
|
|
|
|
|
{
|
|
|
|
|
require_once 'classes/model/AdditionalTables.php';
|
|
|
|
|
|
|
|
|
|
$oCriteria = new Criteria('workflow');
|
|
|
|
|
$oCriteria->addSelectColumn(AdditionalTablesPeer::ADD_TAB_UID);
|
|
|
|
|
$oCriteria->addSelectColumn(AdditionalTablesPeer::ADD_TAB_NAME);
|
|
|
|
|
$oCriteria->addSelectColumn(AdditionalTablesPeer::ADD_TAB_DESCRIPTION);
|
|
|
|
|
$oCriteria->addSelectColumn("'" . G::LoadTranslation('ID_ACTION_EXPORT') . "' as 'CH_SCHEMA'");
|
|
|
|
|
$oCriteria->addSelectColumn("'" . G::LoadTranslation('ID_ACTION_EXPORT') . "' as 'CH_DATA'");
|
|
|
|
|
|
|
|
|
|
$uids = explode(',', $_GET['id']);
|
|
|
|
|
|
|
|
|
|
foreach ($uids as $UID) {
|
|
|
|
|
if (!isset($CC)) {
|
|
|
|
|
$CC = $oCriteria->getNewCriterion(AdditionalTablesPeer::ADD_TAB_UID, $UID, Criteria::EQUAL);
|
|
|
|
|
} else {
|
|
|
|
|
$CC->addOr($oCriteria->getNewCriterion(AdditionalTablesPeer::ADD_TAB_UID, $UID, Criteria::EQUAL));
|
|
|
|
|
}
|
2011-07-21 18:35:37 -04:00
|
|
|
}
|
2012-07-03 15:35:57 -04:00
|
|
|
$oCriteria->add($CC);
|
|
|
|
|
$oCriteria->addAnd($oCriteria->getNewCriterion(AdditionalTablesPeer::ADD_TAB_UID, '', Criteria::NOT_EQUAL));
|
|
|
|
|
|
|
|
|
|
$oDataset = AdditionalTablesPeer::doSelectRS($oCriteria);
|
|
|
|
|
$oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC);
|
|
|
|
|
|
|
|
|
|
$addTables = Array();
|
|
|
|
|
while ($oDataset->next()) {
|
|
|
|
|
$addTables[] = $oDataset->getRow();
|
2011-07-21 18:35:37 -04:00
|
|
|
}
|
|
|
|
|
|
2012-07-03 15:35:57 -04:00
|
|
|
return $addTables;
|
2011-07-12 12:02:57 -04:00
|
|
|
}
|
|
|
|
|
|
2012-07-03 15:35:57 -04:00
|
|
|
public function updateTag($httpData)
|
|
|
|
|
{
|
|
|
|
|
require_once 'classes/model/AdditionalTables.php';
|
|
|
|
|
$oAdditionalTables = new AdditionalTables();
|
|
|
|
|
$uid = $_REQUEST['ADD_TAB_UID'];
|
|
|
|
|
$value = $_REQUEST['value'];
|
2011-07-12 12:02:57 -04:00
|
|
|
|
2012-07-03 15:35:57 -04:00
|
|
|
$repTabData = array(
|
|
|
|
|
'ADD_TAB_UID' => $uid,
|
|
|
|
|
'ADD_TAB_TAG' => $value
|
|
|
|
|
);
|
|
|
|
|
$oAdditionalTables->update($repTabData);
|
2011-07-12 12:02:57 -04:00
|
|
|
}
|
|
|
|
|
|
2012-07-03 15:35:57 -04:00
|
|
|
/**
|
|
|
|
|
* - protected functions (non callable from controller outside) -
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Update data from a addTable record
|
|
|
|
|
* @param $row
|
|
|
|
|
*/
|
|
|
|
|
public function _dataUpdate($row, $primaryKeys)
|
|
|
|
|
{
|
|
|
|
|
$keys = G::decrypt($row['__index__'], 'pmtable');
|
2012-08-13 15:33:25 -04:00
|
|
|
$keys = explode(',', $keys);
|
2012-07-03 15:35:57 -04:00
|
|
|
unset($row['__index__']);
|
2011-07-11 20:08:59 -04:00
|
|
|
|
2012-07-03 15:35:57 -04:00
|
|
|
$params = array();
|
|
|
|
|
|
|
|
|
|
foreach ($keys as $key) {
|
|
|
|
|
$params[] = is_numeric($key) ? $key : "'$key'";
|
2011-09-20 09:34:53 -04:00
|
|
|
}
|
2012-07-03 15:35:57 -04:00
|
|
|
|
|
|
|
|
$obj = null;
|
|
|
|
|
eval('$obj = ' . $this->classPeerName . '::retrieveByPk(' . implode(',', $params) . ');');
|
|
|
|
|
|
|
|
|
|
if (is_object($obj)) {
|
|
|
|
|
foreach ($row as $key => $value) {
|
|
|
|
|
// validation, don't modify primary keys
|
|
|
|
|
if (in_array($key, $primaryKeys)) {
|
|
|
|
|
throw new Exception(G::loadTranslation('ID_DONT_MODIFY_PK_VALUE', array($key)));
|
|
|
|
|
}
|
|
|
|
|
$action = 'set' . AdditionalTables::getPHPName($key);
|
|
|
|
|
$obj->$action($value);
|
|
|
|
|
}
|
|
|
|
|
if ($r = $obj->validate()) {
|
|
|
|
|
$obj->save();
|
|
|
|
|
$result = true;
|
|
|
|
|
} else {
|
|
|
|
|
$msg = '';
|
|
|
|
|
foreach ($obj->getValidationFailures() as $objValidationFailure) {
|
|
|
|
|
$msg .= $objValidationFailure->getMessage() . "\n";
|
|
|
|
|
}
|
|
|
|
|
throw new Exception($msg);
|
|
|
|
|
}
|
|
|
|
|
} else {
|
|
|
|
|
$result = false;
|
2011-09-20 09:34:53 -04:00
|
|
|
}
|
|
|
|
|
|
2012-07-03 15:35:57 -04:00
|
|
|
return $result;
|
2011-07-11 20:08:59 -04:00
|
|
|
}
|
|
|
|
|
|
2012-07-03 15:35:57 -04:00
|
|
|
/**
|
|
|
|
|
* Update data from a addTable record
|
|
|
|
|
* @param $row
|
|
|
|
|
*/
|
|
|
|
|
public function _dataDestroy($row)
|
|
|
|
|
{
|
|
|
|
|
$row = G::decrypt($row, 'pmtable');
|
|
|
|
|
$row = str_replace('"', '', $row);
|
2012-08-13 15:33:25 -04:00
|
|
|
$keys = explode(',', $row);
|
2012-07-03 15:35:57 -04:00
|
|
|
$params = array();
|
|
|
|
|
foreach ($keys as $key) {
|
|
|
|
|
$params[] = is_numeric($key) ? $key : "'$key'";
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
$obj = null;
|
|
|
|
|
eval('$obj = ' . $this->classPeerName . '::retrieveByPk(' . implode(',', $params) . ');');
|
|
|
|
|
|
|
|
|
|
if (is_object($obj)) {
|
|
|
|
|
$obj->delete();
|
|
|
|
|
return true;
|
|
|
|
|
} else {
|
|
|
|
|
return false;
|
|
|
|
|
}
|
2011-07-11 20:08:59 -04:00
|
|
|
}
|
2012-07-03 15:35:57 -04:00
|
|
|
|
|
|
|
|
public function genDataReport($httpData)
|
|
|
|
|
{
|
|
|
|
|
G::loadClass('pmTable');
|
|
|
|
|
require_once 'classes/model/AdditionalTables.php';
|
|
|
|
|
$result->message = '';
|
|
|
|
|
$result->success = true;
|
|
|
|
|
|
|
|
|
|
$additionalTables = new AdditionalTables();
|
|
|
|
|
$table = $additionalTables->load($httpData->id);
|
|
|
|
|
if ($table['PRO_UID'] != '') {
|
|
|
|
|
$additionalTables->populateReportTable(
|
|
|
|
|
$table['ADD_TAB_NAME'],
|
|
|
|
|
pmTable::resolveDbSource($table['DBS_UID']),
|
|
|
|
|
$table['ADD_TAB_TYPE'],
|
|
|
|
|
$table['PRO_UID'],
|
|
|
|
|
$table['ADD_TAB_GRID']
|
|
|
|
|
);
|
|
|
|
|
$result->message = 'generated for table ' . $table['ADD_TAB_NAME'];
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return $result;
|
2011-10-12 19:05:14 -04:00
|
|
|
}
|
|
|
|
|
|
2012-07-03 15:35:57 -04:00
|
|
|
/**
|
|
|
|
|
* Get report table default columns
|
|
|
|
|
* @param $type
|
|
|
|
|
*/
|
|
|
|
|
protected function _getReportTableDefaultColumns($type='NORMAL')
|
|
|
|
|
{
|
|
|
|
|
$defaultColumns = array();
|
|
|
|
|
$application = new stdClass(); //APPLICATION KEY
|
|
|
|
|
$application->uid = '';
|
|
|
|
|
$application->field_dyn = '';
|
|
|
|
|
$application->field_uid = '';
|
|
|
|
|
$application->field_name = 'APP_UID';
|
|
|
|
|
$application->field_label = 'APP_UID';
|
|
|
|
|
$application->field_type = 'VARCHAR';
|
|
|
|
|
$application->field_size = 32;
|
|
|
|
|
$application->field_dyn = '';
|
|
|
|
|
$application->field_key = 1;
|
|
|
|
|
$application->field_null = 0;
|
|
|
|
|
$application->field_filter = false;
|
|
|
|
|
$application->field_autoincrement = false;
|
|
|
|
|
array_push($defaultColumns, $application);
|
|
|
|
|
|
|
|
|
|
$application = new stdClass(); //APP_NUMBER
|
|
|
|
|
$application->uid = '';
|
|
|
|
|
$application->field_dyn = '';
|
|
|
|
|
$application->field_uid = '';
|
|
|
|
|
$application->field_name = 'APP_NUMBER';
|
|
|
|
|
$application->field_label = 'APP_NUMBER';
|
|
|
|
|
$application->field_type = 'INTEGER';
|
|
|
|
|
$application->field_size = 11;
|
|
|
|
|
$application->field_dyn = '';
|
|
|
|
|
$application->field_key = 0;
|
|
|
|
|
$application->field_null = 0;
|
|
|
|
|
$application->field_filter = false;
|
|
|
|
|
$application->field_autoincrement = false;
|
|
|
|
|
array_push($defaultColumns, $application);
|
|
|
|
|
|
|
|
|
|
//if it is a grid report table
|
|
|
|
|
if ($type == 'GRID') {
|
|
|
|
|
//GRID INDEX
|
|
|
|
|
$gridIndex = new stdClass();
|
|
|
|
|
$gridIndex->uid = '';
|
|
|
|
|
$gridIndex->field_dyn = '';
|
|
|
|
|
$gridIndex->field_uid = '';
|
|
|
|
|
$gridIndex->field_name = 'ROW';
|
|
|
|
|
$gridIndex->field_label = 'ROW';
|
|
|
|
|
$gridIndex->field_type = 'INTEGER';
|
|
|
|
|
$gridIndex->field_size = '11';
|
|
|
|
|
$gridIndex->field_dyn = '';
|
|
|
|
|
$gridIndex->field_key = 1;
|
|
|
|
|
$gridIndex->field_null = 0;
|
|
|
|
|
$gridIndex->field_filter = false;
|
|
|
|
|
$gridIndex->field_autoincrement = false;
|
|
|
|
|
array_push($defaultColumns, $gridIndex);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return $defaultColumns;
|
2011-07-08 19:06:32 -04:00
|
|
|
}
|
|
|
|
|
|
2012-07-03 15:35:57 -04:00
|
|
|
/**
|
|
|
|
|
* Get all dynaform fields from a process (without grid fields)
|
|
|
|
|
* @param $proUid
|
|
|
|
|
* @param $type [values:xmlform/grid]
|
|
|
|
|
*/
|
|
|
|
|
public function _getDynafields2($proUid, $type='xmlform')
|
|
|
|
|
{
|
|
|
|
|
require_once 'classes/model/Dynaform.php';
|
|
|
|
|
$fields = array();
|
|
|
|
|
$fieldsNames = array();
|
|
|
|
|
|
|
|
|
|
$oCriteria = new Criteria('workflow');
|
|
|
|
|
$oCriteria->addSelectColumn(DynaformPeer::DYN_FILENAME);
|
|
|
|
|
$oCriteria->add(DynaformPeer::PRO_UID, $proUid);
|
|
|
|
|
$oCriteria->add(DynaformPeer::DYN_TYPE, $type);
|
|
|
|
|
$oDataset = DynaformPeer::doSelectRS($oCriteria);
|
|
|
|
|
$oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC);
|
|
|
|
|
$oDataset->next();
|
|
|
|
|
|
|
|
|
|
$excludeFieldsList = array('title', 'subtitle', 'link', 'file', 'button', 'reset', 'submit',
|
|
|
|
|
'listbox', 'checkgroup', 'grid', 'javascript');
|
|
|
|
|
|
|
|
|
|
$labelFieldsTypeList = array('dropdown', 'checkbox', 'radiogroup', 'yesno');
|
|
|
|
|
|
|
|
|
|
while ($aRow = $oDataset->getRow()) {
|
|
|
|
|
if (file_exists(PATH_DYNAFORM . PATH_SEP . $aRow['DYN_FILENAME'] . '.xml')) {
|
|
|
|
|
$G_FORM = new Form($aRow['DYN_FILENAME'], PATH_DYNAFORM, SYS_LANG);
|
|
|
|
|
|
|
|
|
|
if ($G_FORM->type == 'xmlform' || $G_FORM->type == '') {
|
|
|
|
|
foreach ($G_FORM->fields as $fieldName => $fieldNode) {
|
|
|
|
|
if (!in_array($fieldNode->type, $excludeFieldsList) && !in_array($fieldName, $fieldsNames)) {
|
|
|
|
|
$fields[] = array('name' => $fieldName,
|
|
|
|
|
'type' => $fieldNode->type,
|
|
|
|
|
'label' => $fieldNode->label);
|
|
|
|
|
$fieldsNames[] = $fieldName;
|
|
|
|
|
|
|
|
|
|
if (in_array($fieldNode->type, $labelFieldsTypeList)
|
|
|
|
|
&& !in_array($fieldName . '_label', $fieldsNames)) {
|
|
|
|
|
$fields[] = array('name' => $fieldName . '_label',
|
|
|
|
|
'type' => $fieldNode->type,
|
|
|
|
|
'label' => $fieldNode->label . '_label');
|
|
|
|
|
$fieldsNames[] = $fieldName;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
2011-07-08 19:06:32 -04:00
|
|
|
}
|
2012-07-03 15:35:57 -04:00
|
|
|
$oDataset->next();
|
2011-07-08 19:06:32 -04:00
|
|
|
}
|
2012-07-03 15:35:57 -04:00
|
|
|
|
|
|
|
|
return $fields;
|
2011-07-08 19:06:32 -04:00
|
|
|
}
|
2012-07-03 15:35:57 -04:00
|
|
|
|
|
|
|
|
public function _getDynafields($proUid, $type='xmlform', $start=null, $limit=null, $filter=null)
|
|
|
|
|
{
|
|
|
|
|
$cache = 1;
|
|
|
|
|
if (!isset($_SESSION['_cache_pmtables']) ||
|
|
|
|
|
(isset($_SESSION['_cache_pmtables']) && $_SESSION['_cache_pmtables']['pro_uid'] != $proUid) ||
|
|
|
|
|
(isset($_SESSION['_cache_pmtables']) && $_SESSION['_cache_pmtables']['dyn_uid'] != $this->dynUid)
|
|
|
|
|
) {
|
|
|
|
|
|
|
|
|
|
require_once 'classes/model/Dynaform.php';
|
|
|
|
|
$cache = 0;
|
|
|
|
|
$fields = array();
|
|
|
|
|
$fieldsNames = array();
|
|
|
|
|
|
|
|
|
|
$oCriteria = new Criteria('workflow');
|
|
|
|
|
$oCriteria->addSelectColumn(DynaformPeer::DYN_FILENAME);
|
|
|
|
|
$oCriteria->add(DynaformPeer::PRO_UID, $proUid);
|
|
|
|
|
$oCriteria->add(DynaformPeer::DYN_TYPE, $type);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (isset($this->dynUid)) {
|
|
|
|
|
$oCriteria->add(DynaformPeer::DYN_UID, $this->dynUid);
|
2011-07-13 19:39:30 -04:00
|
|
|
}
|
|
|
|
|
|
2012-07-03 15:35:57 -04:00
|
|
|
$oDataset = DynaformPeer::doSelectRS($oCriteria);
|
|
|
|
|
$oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC);
|
|
|
|
|
$oDataset->next();
|
|
|
|
|
|
|
|
|
|
$excludeFieldsList = array('title', 'subtitle', 'link', 'file', 'button', 'reset', 'submit',
|
|
|
|
|
'listbox', 'checkgroup', 'grid', 'javascript');
|
|
|
|
|
|
|
|
|
|
$labelFieldsTypeList = array('dropdown', 'radiogroup');
|
|
|
|
|
G::loadSystem('dynaformhandler');
|
|
|
|
|
$index = 0;
|
|
|
|
|
|
|
|
|
|
while ($aRow = $oDataset->getRow()) {
|
|
|
|
|
if (file_exists(PATH_DYNAFORM . PATH_SEP . $aRow['DYN_FILENAME'] . '.xml')) {
|
|
|
|
|
$dynaformHandler = new dynaformHandler(PATH_DYNAFORM . $aRow['DYN_FILENAME'] . '.xml');
|
|
|
|
|
$nodeFieldsList = $dynaformHandler->getFields();
|
|
|
|
|
|
|
|
|
|
foreach ($nodeFieldsList as $node) {
|
|
|
|
|
$arrayNode = $dynaformHandler->getArray($node);
|
|
|
|
|
$fieldName = $arrayNode['__nodeName__'];
|
|
|
|
|
$fieldType = $arrayNode['type'];
|
|
|
|
|
|
|
|
|
|
if (!in_array($fieldType, $excludeFieldsList) && !in_array($fieldName, $fieldsNames)) {
|
|
|
|
|
$fields[] = array(
|
|
|
|
|
'FIELD_UID' => $fieldName . '-' . $fieldType,
|
|
|
|
|
'FIELD_NAME' => $fieldName,
|
|
|
|
|
'_index' => $index++,
|
|
|
|
|
'_isset' => true
|
|
|
|
|
);
|
|
|
|
|
$fieldsNames[] = $fieldName;
|
|
|
|
|
|
|
|
|
|
if (in_array($fieldType, $labelFieldsTypeList)
|
|
|
|
|
&& !in_array($fieldName . '_label', $fieldsNames)) {
|
|
|
|
|
$fields[] = array(
|
|
|
|
|
'FIELD_UID' => $fieldName . '_label' . '-' . $fieldType,
|
|
|
|
|
'FIELD_NAME' => $fieldName . '_label',
|
|
|
|
|
'_index' => $index++,
|
|
|
|
|
'_isset' => true
|
|
|
|
|
);
|
|
|
|
|
$fieldsNames[] = $fieldName;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
$oDataset->next();
|
|
|
|
|
}
|
2011-07-13 19:39:30 -04:00
|
|
|
|
2012-07-03 15:35:57 -04:00
|
|
|
sort($fields);
|
2011-07-13 19:39:30 -04:00
|
|
|
|
2012-07-03 15:35:57 -04:00
|
|
|
// if is a editing
|
|
|
|
|
$fieldsEdit = array();
|
|
|
|
|
if (isset($_SESSION['ADD_TAB_UID'])) {
|
|
|
|
|
require_once 'classes/model/AdditionalTables.php';
|
|
|
|
|
|
|
|
|
|
$additionalTables = new AdditionalTables();
|
|
|
|
|
$table = $additionalTables->load($_SESSION['ADD_TAB_UID'], true);
|
|
|
|
|
|
|
|
|
|
foreach ($table['FIELDS'] as $i => $field) {
|
|
|
|
|
array_push($fieldsEdit, $field['FLD_DYN_NAME']);
|
|
|
|
|
}
|
|
|
|
|
}//end editing
|
|
|
|
|
|
|
|
|
|
foreach ($fields as $i => $field) {
|
|
|
|
|
$fields[$i]['_index'] = $i;
|
|
|
|
|
$indexes[$field['FIELD_NAME']] = $i;
|
|
|
|
|
|
|
|
|
|
if (in_array($field['FIELD_NAME'], $fieldsEdit)) {
|
|
|
|
|
$fields[$i]['_isset'] = false;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
$_SESSION['_cache_pmtables']['pro_uid'] = $proUid;
|
|
|
|
|
$_SESSION['_cache_pmtables']['dyn_uid'] = $this->dynUid;
|
|
|
|
|
$_SESSION['_cache_pmtables']['rows'] = $fields;
|
|
|
|
|
$_SESSION['_cache_pmtables']['count'] = count($fields);
|
|
|
|
|
$_SESSION['_cache_pmtables']['indexes'] = $indexes;
|
|
|
|
|
} //end reload
|
|
|
|
|
|
|
|
|
|
$fields = array();
|
|
|
|
|
$tmp = array();
|
|
|
|
|
|
|
|
|
|
foreach ($_SESSION['_cache_pmtables']['rows'] as $i => $row) {
|
|
|
|
|
if (isset($filter) && $filter != '') {
|
|
|
|
|
if ($row['_isset'] && stripos($row['FIELD_NAME'], $filter) !== false) {
|
|
|
|
|
$tmp[] = $row;
|
|
|
|
|
}
|
|
|
|
|
} else {
|
|
|
|
|
if ($row['_isset']) {
|
|
|
|
|
$tmp[] = $row;
|
|
|
|
|
}
|
|
|
|
|
}
|
2011-07-13 19:39:30 -04:00
|
|
|
}
|
2012-07-03 15:35:57 -04:00
|
|
|
|
|
|
|
|
$fields = array_slice($tmp, $start, $limit);
|
|
|
|
|
|
|
|
|
|
return array('cache' => $cache, 'count' => count($tmp), 'rows' => $fields);
|
2011-07-13 19:39:30 -04:00
|
|
|
}
|
|
|
|
|
|
2012-07-03 15:35:57 -04:00
|
|
|
/**
|
|
|
|
|
* Get all dynaform grid fields from a process
|
|
|
|
|
* @param $proUid
|
|
|
|
|
* @param $gridId
|
|
|
|
|
*/
|
|
|
|
|
public function _getGridDynafields($proUid, $gridId)
|
|
|
|
|
{
|
|
|
|
|
$fields = array();
|
|
|
|
|
$fieldsNames = array();
|
|
|
|
|
$excludeFieldsList = array('title', 'subtitle', 'link', 'file', 'button', 'reset', 'submit',
|
|
|
|
|
'listbox', 'checkgroup', 'grid', 'javascript');
|
|
|
|
|
|
|
|
|
|
$labelFieldsTypeList = array('dropdown', 'checkbox', 'radiogroup', 'yesno');
|
|
|
|
|
|
|
|
|
|
$G_FORM = new Form($proUid . '/' . $gridId, PATH_DYNAFORM, SYS_LANG, false);
|
|
|
|
|
|
|
|
|
|
if ($G_FORM->type == 'grid') {
|
|
|
|
|
foreach ($G_FORM->fields as $fieldName => $fieldNode) {
|
|
|
|
|
if (!in_array($fieldNode->type, $excludeFieldsList) && !in_array($fieldName, $fieldsNames)) {
|
|
|
|
|
$fields[] = array('name' => $fieldName, 'type' => $fieldNode->type, 'label' => $fieldNode->label);
|
|
|
|
|
$fieldsNames[] = $fieldName;
|
|
|
|
|
|
|
|
|
|
if (in_array($fieldNode->type, $labelFieldsTypeList)
|
|
|
|
|
&& !in_array($fieldName . '_label', $fieldsNames)) {
|
|
|
|
|
$fields[] = array('name' => $fieldName . '_label',
|
|
|
|
|
'type' => $fieldNode->type,
|
|
|
|
|
'label' => $fieldNode->label . '_label');
|
|
|
|
|
$fieldsNames[] = $fieldName;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
2011-07-08 19:06:32 -04:00
|
|
|
}
|
2012-07-03 15:35:57 -04:00
|
|
|
|
|
|
|
|
return $fields;
|
2011-07-08 19:06:32 -04:00
|
|
|
}
|
2012-07-03 15:35:57 -04:00
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Get all dynaform fields inside all grids from a process
|
|
|
|
|
* @param $proUid
|
|
|
|
|
*/
|
|
|
|
|
public function _getGridFields($proUid)
|
|
|
|
|
{
|
|
|
|
|
require_once 'classes/model/Dynaform.php';
|
|
|
|
|
G::loadSystem('dynaformhandler');
|
|
|
|
|
$aFields = array();
|
|
|
|
|
$aFieldsNames = array();
|
|
|
|
|
|
|
|
|
|
$oCriteria = new Criteria('workflow');
|
|
|
|
|
$oCriteria->addSelectColumn(DynaformPeer::DYN_FILENAME);
|
|
|
|
|
$oCriteria->add(DynaformPeer::PRO_UID, $proUid);
|
|
|
|
|
$oCriteria->add(DynaformPeer::DYN_TYPE, 'xmlform');
|
|
|
|
|
$oDataset = DynaformPeer::doSelectRS($oCriteria);
|
|
|
|
|
$oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC);
|
|
|
|
|
$oDataset->next();
|
|
|
|
|
|
|
|
|
|
while ($aRow = $oDataset->getRow()) {
|
|
|
|
|
//$G_FORM = new Form($aRow['DYN_FILENAME'], PATH_DYNAFORM, SYS_LANG);
|
|
|
|
|
$dynaformHandler = new dynaformHandler(PATH_DYNAFORM . $aRow['DYN_FILENAME'] . '.xml');
|
|
|
|
|
$nodeFieldsList = $dynaformHandler->getFields();
|
|
|
|
|
|
|
|
|
|
foreach ($nodeFieldsList as $node) {
|
|
|
|
|
$arrayNode = $dynaformHandler->getArray($node);
|
|
|
|
|
$fieldName = $arrayNode['__nodeName__'];
|
|
|
|
|
$fieldType = $arrayNode['type'];
|
|
|
|
|
|
|
|
|
|
if ($fieldType == 'grid') {
|
|
|
|
|
|
|
|
|
|
if (!in_array($fieldName, $aFieldsNames)) {
|
|
|
|
|
$aFields[] = array('name' => $fieldName,
|
|
|
|
|
'xmlform' => str_replace($proUid . '/', '', $arrayNode['xmlgrid']));
|
|
|
|
|
$aFieldsNames[] = $fieldName;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
$oDataset->next();
|
2011-07-08 19:06:32 -04:00
|
|
|
}
|
2012-07-03 15:35:57 -04:00
|
|
|
return $aFields;
|
2011-07-08 19:06:32 -04:00
|
|
|
}
|
2011-07-11 18:06:32 -04:00
|
|
|
}
|
2012-09-03 16:23:37 -04:00
|
|
|
|