294 lines
13 KiB
PHP
294 lines
13 KiB
PHP
<?php
|
|
|
|
/**
|
|
* Created on 21/12/2007
|
|
* Dynaform - Dynaform
|
|
/**
|
|
*
|
|
* @package workflow.engine.classes
|
|
*/class DynaformEditor extends WebResource
|
|
{
|
|
|
|
private $isOldCopy = false;
|
|
public $file = '';
|
|
public $title = 'New Dynaform';
|
|
public $dyn_uid = '';
|
|
public $dyn_type = '';
|
|
public $home = '';
|
|
|
|
/**
|
|
* Other Options for Editor:
|
|
* left: 'getAbsoluteLeft(document.getElementById("dynaformEditor[0]"))',
|
|
* top: 'getAbsoluteTop(document.getElementById("dynaformEditor[0]"))',
|
|
* height: '3/4*(document.body.clientWidth-getAbsoluteLeft(document.getElementById("dynaformEditor[0]"))*2)',
|
|
* left: 'getAbsoluteLeft(document.getElementById("dynaformEditor[0]"))'
|
|
* left: 'getAbsoluteLeft(document.getElementById("dynaformEditor[0]"))'
|
|
*
|
|
* Other Options for Toolbar:
|
|
* left: 'getAbsoluteLeft(document.getElementById("dynaformEditor[0]"))',
|
|
* top: 'getAbsoluteTop(document.getElementById("dynaformEditor[0]"))',
|
|
*/
|
|
public $defaultConfig = array('Editor' => array('left' => '0', 'top' => '0', 'width' => 'document.body.clientWidth-4', 'height' => 'document.body.clientHeight-4'),
|
|
'Toolbar' => array('left' => 'document.body.clientWidth-2-toolbar.clientWidth-24-3+7', 'top' => '52'),
|
|
'FieldsList' => array('left' => '4+toolbar.clientWidth+24', 'top' => 'getAbsoluteTop(document.getElementById("dynaformEditor[0]"))', 'width' => 244, 'height' => 400)
|
|
);
|
|
public $panelConf = array('style' => array('title' => array('textAlign' => 'center')),
|
|
'width' => 700, 'height' => 600, 'tabWidth' => 120, 'modal' => true, 'drag' => false, 'resize' => false, 'blinkToFront' => false
|
|
);
|
|
|
|
/**
|
|
* Constructor of the class dynaformEditor
|
|
*
|
|
* @param string $get
|
|
* @return void
|
|
*/
|
|
public function __construct($get)
|
|
{
|
|
$this->panelConf = array_merge($this->panelConf, $this->defaultConfig['Editor']);
|
|
//'title' => G::LoadTranslation('ID_DYNAFORM_EDITOR').' - ['.$this->title.']',
|
|
}
|
|
|
|
/**
|
|
* Create the xml form default
|
|
*
|
|
* @param string $filename
|
|
* @return void
|
|
*/
|
|
public function _createDefaultXmlForm($fileName)
|
|
{
|
|
//Create the default Dynaform
|
|
$sampleForm = '<?xml version="1.0" encoding="UTF-8"?>' . "\n";
|
|
$sampleForm .= '<dynaForm type="' . $this->dyn_type . '" name="" width="500" enabletemplate="0" mode="edit">' . "\n";
|
|
switch ($this->dyn_type) {
|
|
case "xmlform":
|
|
/* $sampleForm.='<title type="title" enablehtml="0">' . "\n" .
|
|
' <en>Sample form</en>' . "\n" .
|
|
'</title>'."\n";
|
|
$sampleForm.='<submit type="submit" enablehtml="0" onclick="">' . "\n" .
|
|
' <en>Submit</en>' . "\n" .
|
|
'</submit>'."\n"; */
|
|
break;
|
|
case "grid":
|
|
/* $sampleForm.='<fieldA type="text" >' . "\n" .
|
|
'<en>A</en>' . "\n" .
|
|
'</fieldA>'."\n";
|
|
$sampleForm.='<fieldB type="text" >' . "\n" .
|
|
'<en>B</en>' . "\n" .
|
|
'</fieldB>'."\n"; */
|
|
break;
|
|
}
|
|
$sampleForm .= '</dynaForm>';
|
|
G::verifyPath(dirname($fileName), true);
|
|
$fp = fopen($fileName, 'w');
|
|
$sampleForm = str_replace('name=""', 'name="' . $this->_getFilename($this->file) . '"', $sampleForm);
|
|
fwrite($fp, $sampleForm);
|
|
fclose($fp);
|
|
}
|
|
|
|
/**
|
|
* Prints the DynaformEditor
|
|
*
|
|
* @return void
|
|
*/
|
|
public function _render()
|
|
{
|
|
global $G_PUBLISH;
|
|
$script = '';
|
|
|
|
/* Start Block: Load (Create if doesn't exist) the xmlform */
|
|
$Parameters = array('SYS_LANG' => SYS_LANG, 'URL' => G::encrypt($this->file, URL_KEY), 'DYN_UID' => $this->dyn_uid, 'PRO_UID' => $this->pro_uid, 'DYNAFORM_NAME' => $this->dyn_title, 'FILE' => $this->file, 'DYN_EDITOR' => $this->dyn_editor
|
|
);
|
|
$_SESSION['Current_Dynafom']['Parameters'] = $Parameters;
|
|
|
|
$XmlEditor = array('URL' => G::encrypt($this->file, URL_KEY), 'XML' => '' //$openDoc->getXml()
|
|
);
|
|
$JSEditor = array('URL' => G::encrypt($this->file, URL_KEY)
|
|
);
|
|
|
|
$A = G::encrypt($this->file, URL_KEY);
|
|
|
|
try {
|
|
$openDoc = new Xml_Document();
|
|
$fileName = $this->home . $this->file . '.xml';
|
|
if (file_exists($fileName)) {
|
|
$openDoc->parseXmlFile($fileName);
|
|
} else {
|
|
$this->_createDefaultXmlForm($fileName);
|
|
$openDoc->parseXmlFile($fileName);
|
|
}
|
|
//$form = new Form( $this->file , $this->home, SYS_LANG, true );
|
|
$Properties = DynaformEditorAjax::get_properties($A, $this->dyn_uid);
|
|
/* Start Block: Prepare the XMLDB connection */
|
|
define('DB_XMLDB_HOST', PATH_DYNAFORM . $this->file . '.xml');
|
|
define('DB_XMLDB_USER', '');
|
|
define('DB_XMLDB_PASS', '');
|
|
define('DB_XMLDB_NAME', '');
|
|
define('DB_XMLDB_TYPE', 'myxml');
|
|
/* Start Block: Prepare the dynaformEditor */
|
|
$G_PUBLISH = new Publisher();
|
|
$sName = 'dynaformEditor';
|
|
$G_PUBLISH->publisherId = $sName;
|
|
$oHeadPublisher = & headPublisher::getSingleton();
|
|
$oHeadPublisher->setTitle(G::LoadTranslation('ID_DYNAFORM_EDITOR') . ' - ' . $Properties['DYN_TITLE']);
|
|
$G_PUBLISH->AddContent('blank');
|
|
$this->panelConf['title'] = '';
|
|
$G_PUBLISH->AddContent('panel-init', 'mainPanel', $this->panelConf);
|
|
if ($Properties['DYN_TYPE'] == 'xmlform') {
|
|
$G_PUBLISH->AddContent('xmlform', 'toolbar', 'dynaforms/fields_Toolbar', 'display:none', $Parameters, '', '');
|
|
} else {
|
|
$G_PUBLISH->AddContent('xmlform', 'toolbar', 'dynaforms/fields_ToolbarGrid', 'display:none', $Parameters, '', '');
|
|
}
|
|
$G_PUBLISH->AddContent('xmlform', 'xmlform', 'dynaforms/dynaforms_Editor', 'display:none', $Parameters, '', '');
|
|
$G_PUBLISH->AddContent('xmlform', 'xmlform', 'dynaforms/dynaforms_XmlEditor', 'display:none', $XmlEditor, '', '');
|
|
$G_PUBLISH->AddContent('blank');
|
|
$i = 0;
|
|
$aFields = array();
|
|
$aFields[] = array('XMLNODE_NAME' => 'char', 'TYPE' => 'char', 'UP' => 'char', 'DOWN' => 'char'
|
|
);
|
|
$oSession = new DBSession(new DBConnection(PATH_DYNAFORM . $this->file . '.xml', '', '', '', 'myxml'));
|
|
$oDataset = $oSession->Execute('SELECT * FROM dynaForm WHERE NOT( XMLNODE_NAME = "" ) AND TYPE <> "pmconnection"');
|
|
$iMaximun = $oDataset->count();
|
|
while ($aRow = $oDataset->Read()) {
|
|
$aFields[] = array('XMLNODE_NAME' => $aRow['XMLNODE_NAME'], 'TYPE' => $aRow['TYPE'], 'UP' => ($i > 0 ? G::LoadTranslation('ID_UP') : ''), 'DOWN' => ($i < $iMaximun - 1 ? G::LoadTranslation('ID_DOWN') : ''), 'row__' => ($i + 1)
|
|
);
|
|
$i++;
|
|
break;
|
|
}
|
|
global $_DBArray;
|
|
$_DBArray['fields'] = $aFields;
|
|
$_SESSION['_DBArray'] = $_DBArray;
|
|
$oCriteria = new Criteria('dbarray');
|
|
$oCriteria->setDBArrayTable('fields');
|
|
/**
|
|
* *@Erik-> this is deprecated,.
|
|
* (unuseful) $G_PUBLISH->AddContent('propeltable', 'paged-table', 'dynaforms/fields_List', $oCriteria, $Parameters, '', SYS_URI.'dynaforms/dynaforms_PagedTableAjax');**
|
|
*/
|
|
$G_PUBLISH->AddContent('blank');
|
|
$G_PUBLISH->AddContent('xmlform', 'xmlform', 'dynaforms/dynaforms_JSEditor', 'display:none', $JSEditor, '', '');
|
|
} catch (Exception $e) {
|
|
|
|
}
|
|
$G_PUBLISH->AddContent('xmlform', 'xmlform', 'dynaforms/dynaforms_Properties', 'display:none', $Properties, '', '');
|
|
//for showHide tab option @Neyek
|
|
$G_PUBLISH->AddContent('blank');
|
|
$G_PUBLISH->AddContent('panel-tab', G::LoadTranslation("ID_PREVIEW"), $sName . '[3]', 'dynaformEditor.changeToPreview', 'dynaformEditor.saveCurrentView');
|
|
$G_PUBLISH->AddContent('panel-tab', G::LoadTranslation("ID_XML"), $sName . '[4]', 'dynaformEditor.changeToXmlCode', 'dynaformEditor.saveCurrentView');
|
|
if ($Properties['DYN_TYPE'] != 'grid') {
|
|
$G_PUBLISH->AddContent('panel-tab', G::LoadTranslation("ID_HTML"), $sName . '[5]', 'dynaformEditor.changeToHtmlCode', 'dynaformEditor.saveCurrentView');
|
|
}
|
|
$G_PUBLISH->AddContent('panel-tab', G::LoadTranslation("ID_FIELDS_LIST"), $sName . '[6]', 'dynaformEditor.changeToFieldsList', 'dynaformEditor.saveCurrentView');
|
|
if ($Properties["DYN_TYPE"] != "grid") {
|
|
$G_PUBLISH->AddContent('panel-tab', G::LoadTranslation("ID_JAVASCRIPTS"), $sName . '[7]', 'dynaformEditor.changeToJavascripts', 'dynaformEditor.saveCurrentView');
|
|
}
|
|
$G_PUBLISH->AddContent('panel-tab', G::LoadTranslation("ID_PROPERTIES"), $sName . '[8]', 'dynaformEditor.changeToProperties', 'dynaformEditor.saveCurrentView');
|
|
|
|
//for showHide tab option @Neyek
|
|
if ($Properties["DYN_TYPE"] != "grid") {
|
|
$G_PUBLISH->AddContent("panel-tab", G::LoadTranslation("ID_CONDITIONS_EDITOR"), $sName . "[9]", "dynaformEditor.changeToShowHide", "dynaformEditor.saveShowHide");
|
|
}
|
|
|
|
$G_PUBLISH->AddContent('panel-close');
|
|
$oHeadPublisher->addScriptFile("/js/maborak/core/maborak.loader.js",2);
|
|
$oHeadPublisher->addScriptFile('/jscore/dynaformEditor/core/dynaformEditor.js');
|
|
|
|
$oHeadPublisher->addScriptFile('/js/codemirrorOld/js/codemirror.js',1);
|
|
|
|
$oHeadPublisher->addScriptFile('/js/grid/core/grid.js');
|
|
$oHeadPublisher->addScriptCode('
|
|
var DYNAFORM_URL="' . $Parameters['URL'] . '";
|
|
leimnud.event.add(window,"load",function(){ loadEditor(); });
|
|
');
|
|
$oHeadPublisher->addScriptCode(' var jsMeta;var __usernameLoggedDE__ = "' . (isset($_SESSION['USR_USERNAME']) ? $_SESSION['USR_USERNAME'] : '') . '";var SYS_LANG = "' . SYS_LANG . '";var __DYN_UID__ = "' . $this->dyn_uid . '";');
|
|
|
|
$arrayParameterAux = $Parameters;
|
|
$arrayParameterAux["DYNAFORM_NAME"] = base64_encode($arrayParameterAux["DYNAFORM_NAME"]);
|
|
$oHeadPublisher->addScriptCode('var dynaformEditorParams = \'' . serialize($arrayParameterAux) . '\';');
|
|
|
|
G::RenderPage("publish", 'blank');
|
|
}
|
|
|
|
/**
|
|
* Get the filename
|
|
*
|
|
* @param string $file
|
|
* @return string
|
|
*/
|
|
public function _getFilename($file)
|
|
{
|
|
return (strcasecmp(substr($file, - 5), '_tmp0') == 0) ? substr($file, 0, strlen($file) - 5) : $file;
|
|
}
|
|
|
|
/**
|
|
* Set the temporal copy
|
|
*
|
|
* @param string $onOff
|
|
* @return void
|
|
*/
|
|
public function _setUseTemporalCopy($onOff)
|
|
{
|
|
$file = self::_getFilename($this->file);
|
|
if ($onOff) {
|
|
$this->file = $file . '_tmp0';
|
|
self::_setTmpData(array('useTmpCopy' => true ));
|
|
if (!file_exists(PATH_DYNAFORM . $file . '.xml')) {
|
|
$this->_createDefaultXmlForm(PATH_DYNAFORM . $file . '.xml');
|
|
}
|
|
//Creates a copy if it doesn't exist, else, use the old copy
|
|
if (!file_exists(PATH_DYNAFORM . $this->file . '.xml')) {
|
|
self::_copyFile(PATH_DYNAFORM . $file . '.xml', PATH_DYNAFORM . $this->file . '.xml');
|
|
}
|
|
if (!file_exists(PATH_DYNAFORM . $this->file . '.html') && file_exists(PATH_DYNAFORM . $file . '.html')) {
|
|
self::_copyFile(PATH_DYNAFORM . $file . '.html', PATH_DYNAFORM . $this->file . '.html');
|
|
}
|
|
} else {
|
|
$this->file = $file;
|
|
self::_setTmpData(array());
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Set temporal data
|
|
*
|
|
* @param $data
|
|
* @return void
|
|
*/
|
|
public function _setTmpData($data)
|
|
{
|
|
G::verifyPath(PATH_C . 'dynEditor/', true);
|
|
$fp = fopen(PATH_C . 'dynEditor/' . session_id() . '.php', 'w');
|
|
fwrite($fp, '$tmpData=unserialize(\'' . addcslashes(serialize($data), '\\\'') . '\');');
|
|
fclose($fp);
|
|
}
|
|
|
|
/**
|
|
* Get temporal data
|
|
*
|
|
* @param string $filename
|
|
* @return array
|
|
*/
|
|
public function _getTmpData()
|
|
{
|
|
$tmpData = array();
|
|
$file = PATH_C . 'dynEditor/' . session_id() . '.php';
|
|
if (file_exists($file)) {
|
|
eval(implode('', file($file)));
|
|
}
|
|
return $tmpData;
|
|
}
|
|
|
|
/**
|
|
* Copy files
|
|
*
|
|
* @param file $from
|
|
* @param file $to
|
|
* @return void
|
|
*/
|
|
public function _copyFile($from, $to)
|
|
{
|
|
$copy = implode('', file($from));
|
|
$fcopy = fopen($to, "w");
|
|
fwrite($fcopy, $copy);
|
|
fclose($fcopy);
|
|
}
|
|
}
|