Spaces:
Sleeping
Sleeping
| /** | |
| * class.headPublisher.php | |
| * | |
| * @package gulliver.system | |
| * | |
| * ProcessMaker Open Source Edition | |
| * Copyright (C) 2004 - 2011 Colosa Inc. | |
| * | |
| * This program is free software: you can redistribute it and/or modify | |
| * it under the terms of the GNU Affero General Public License as | |
| * published by the Free Software Foundation, either version 3 of the | |
| * License, or (at your option) any later version. | |
| * | |
| * This program is distributed in the hope that it will be useful, | |
| * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
| * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
| * GNU Affero General Public License for more details. | |
| * | |
| * You should have received a copy of the GNU Affero General Public LicensegetExtJsLibraries | |
| * along with this program. If not, see <http://www.gnu.org/licenses/>. | |
| * | |
| * For more information, contact Colosa Inc, 2566 Le Jeune Rd., | |
| * Coral Gables, FL, 33134, USA, or email info@colosa.com. | |
| * | |
| */ | |
| use ProcessMaker\Plugins\PluginRegistry; | |
| /** | |
| * Class headPublisher | |
| * | |
| * @author David S. Callizaya S. <davidsantos@colosa.com> | |
| * @package gulliver.system | |
| * @access public | |
| */ | |
| class headPublisher | |
| { | |
| public static $instance = null; | |
| public $scriptFiles = array(); | |
| public $cssFiles = array(); | |
| public $leimnudLoad = array(); | |
| /* extJsSkin init coreLoad flag */ | |
| public $extJsInit = 'false'; | |
| /* extJsSkin store the current skin for the ExtJs */ | |
| public $extJsSkin = ''; | |
| /* extJsScript Array, to store the file to be include */ | |
| public $extJsScript = array(); | |
| /* extJsLibrary Array, to store extended ExtJs lybraries */ | |
| public $extJsLibrary = array(); | |
| /* extJsContent Array, to store the file to be include in the skin content */ | |
| public $extJsContent = array(); | |
| /* extVariable array, to store the variables generated in PHP, and used in JavaScript */ | |
| public $extVariable = array(); | |
| /* variable array, to store the variables generated in PHP, and used in JavaScript */ | |
| public $vars = array(); | |
| /* tplVariable array, to store the variables for template power */ | |
| public $tplVariable = array(); | |
| public $translationsFile; | |
| public $leimnudInitString = ' var leimnud = new maborak(); | |
| leimnud.make({ | |
| zip:true, | |
| inGulliver:true, | |
| modules :"dom,abbr,rpc,drag,drop,app,panel,fx,grid,xmlform,validator,dashboard", | |
| files :"" | |
| });'; | |
| public $headerScript = ' | |
| try{ | |
| leimnud.exec(leimnud.fix.memoryLeak); | |
| if(leimnud.browser.isIphone){ | |
| leimnud.iphone.make(); | |
| } | |
| }catch(e){}'; | |
| public $disableHeaderScripts = false; | |
| public $title = ''; | |
| /** | |
| * Function headPublisher | |
| * | |
| * @author David S. Callizaya S. <davidsantos@colosa.com> | |
| * @access public | |
| * @return string | |
| */ | |
| public function __construct() | |
| { | |
| $this->addScriptFile("/js/maborak/core/maborak.js"); | |
| $this->translationsFile = "/js/ext/translation." . SYS_LANG . ".js"; | |
| $this->addScriptCode(' var __usernameLogged__ = "' . (isset($_SESSION['USR_USERNAME']) ? $_SESSION['USR_USERNAME'] : '') . '";var SYS_LANG = "' . SYS_LANG . '";'); | |
| } | |
| public function &getSingleton() | |
| { | |
| if (self::$instance == null) { | |
| self::$instance = new headPublisher(); | |
| } | |
| return self::$instance; | |
| } | |
| /** | |
| * Function setTitle | |
| * | |
| * @author David S. Callizaya S. <davidsantos@colosa.com> | |
| * @access public | |
| * @param eter string url | |
| * @param eter string LoadType | |
| * @return string | |
| */ | |
| public function setTitle($title) | |
| { | |
| $this->title = $title; | |
| } | |
| /** | |
| * Function addScriptFile | |
| * | |
| * @author David S. Callizaya S. <davidsantos@colosa.com> | |
| * @access public | |
| * @param eter string url | |
| * @param eter string LoadType | |
| * @return string | |
| */ | |
| public function addScriptFile($url, $LoadType = 1) | |
| { | |
| if ($LoadType == 1) { | |
| $this->scriptFiles[$url] = $url; | |
| } | |
| if ($LoadType == 2) { | |
| $this->leimnudLoad[$url] = $url; | |
| } | |
| } | |
| public function addCssFile($url) | |
| { | |
| $this->cssFiles[$url] = $url; | |
| } | |
| /** | |
| * Function addInstanceModule | |
| * | |
| * @author David S. Callizaya S. <davidsantos@colosa.com> | |
| * @access public | |
| * @param eter string instance | |
| * @param eter string module | |
| * @return string | |
| */ | |
| public function addInstanceModule($instance, $module) | |
| { | |
| $this->headerScript .= "leimnud.Package.Load('" . $module . "',{Instance:" . $instance . ",Type:'module'});\n"; | |
| } | |
| /** | |
| * Function addClassModule | |
| * | |
| * @author David S. Callizaya S. <davidsantos@colosa.com> | |
| * @access public | |
| * @param eter string class | |
| * @param eter string module | |
| * @return string | |
| */ | |
| public function addClassModule($class, $module) | |
| { | |
| $this->headerScript .= "leimnud.Package.Load('" . $module . "',{Class:" . $class . ",Type:'module'});\n"; | |
| } | |
| /** | |
| * Function addScriptCode | |
| * | |
| * @author David S. Callizaya S. <davidsantos@colosa.com> | |
| * @access public | |
| * @param eter string script | |
| * @return string | |
| */ | |
| public function addScriptCode($script) | |
| { | |
| $this->headerScript .= $script; | |
| } | |
| /** | |
| * Function printHeader | |
| * | |
| * @author David S. Callizaya S. <davidsantos@colosa.com> | |
| * @access public | |
| * @return string | |
| */ | |
| public function printHeader() | |
| { | |
| $jslabel = 'labels/en.js'; | |
| if (defined('SYS_LANG')) { | |
| $jslabel = 'labels' . PATH_SEP . SYS_LANG . '.js'; | |
| if (!file_exists(PATH_CORE . 'js' . PATH_SEP . $jslabel)) { | |
| $jslabel = 'labels/en.js'; | |
| } | |
| } | |
| if (file_exists(PATH_CORE . 'js' . PATH_SEP . $jslabel)) { | |
| $this->addScriptFile('/jscore/' . $jslabel, 1); | |
| } | |
| if ($this->disableHeaderScripts) { | |
| return ''; | |
| } | |
| // available js-calendar languages array | |
| $availableJsCalendarLang = array('ca', 'cn', 'cz', 'de', 'en', 'es', 'fr', 'it', 'jp', 'nl', 'pl', 'pt', 'ro', 'ru', 'sv'); | |
| // get the system language without locale | |
| $sysLang = explode('-', SYS_LANG); | |
| $sysLang = $sysLang[0]; | |
| // verify if the requested lang by the system is supported by js-calendar library, if not set english by default | |
| $sysLang = in_array($sysLang, $availableJsCalendarLang) ? $sysLang : 'en'; | |
| $this->addScriptFile("/js/widgets/js-calendar/unicode-letter.js"); | |
| //$this->addScriptFile( "/js/widgets/js-calendar/lang/" . $sysLang . ".js" ); | |
| $head = ''; | |
| $head .= '<TITLE>' . $this->title . "</TITLE>\n"; | |
| foreach ($this->cssFiles as $file) { | |
| $head = $head . " <link rel=\"stylesheet\" href=\"" . G::browserCacheFilesUrl($file) . "\">\n"; | |
| } | |
| $head = $head . " | |
| <!--//////////////////////////////////********//////////////////////////////////--> | |
| <noscript> | |
| <div> | |
| ". G::LoadTranslation( 'ID_ERROR_JS_NOT_AVAILABLE' )." | |
| </div> | |
| </noscript> | |
| <!--//////////////////////////////////********//////////////////////////////////--> | |
| <script type=\"text/javascript\"> | |
| var BROWSER_CACHE_FILES_UID = \"" . G::browserCacheFilesGetUid() . "\"; | |
| </script> | |
| "; | |
| foreach ($this->scriptFiles as $file) { | |
| $head = $head . "<script type=\"text/javascript\" src=\"" . G::browserCacheFilesUrl($file) . "\"></script>\n"; | |
| } | |
| if (!in_array($this->translationsFile, $this->scriptFiles)) { | |
| $head = $head . "<script type=\"text/javascript\" src=\"" . G::browserCacheFilesUrl($this->translationsFile) . "\"></script>\n"; | |
| } | |
| $head .= "<script type='text/javascript'>\n"; | |
| $head .= $this->leimnudInitString; | |
| foreach ($this->leimnudLoad as $file) { | |
| $head .= " leimnud.Package.Load(false, {Type: 'file', Path: '" . $file . "', Absolute : true});\n"; | |
| } | |
| $head .= $this->headerScript; | |
| $head .= "</script>\n"; | |
| $head .= "<script type=\"text/javascript\" src=\"" . G::browserCacheFilesUrl("/js/maborak/core/maborak.loader.js") . "\"></script>\n"; | |
| return $head; | |
| } | |
| /** | |
| * Function printRawHeader | |
| * Its prupose is to load el HEADs initialization javascript | |
| * into a single SCRIPT tag, it is usefull when it is needed | |
| * to load a page by leimnud floating panel of by another ajax | |
| * method. (See also RAW skin) | |
| * | |
| * @author David S. Callizaya S. <davidsantos@colosa.com> | |
| * @access public | |
| * @return string | |
| */ | |
| public function printRawHeader() | |
| { | |
| $jslabel = '/jscore/labels/en.js'; | |
| if (defined('SYS_LANG')) { | |
| $jslabel1 = 'labels' . PATH_SEP . SYS_LANG . '.js'; | |
| if (!file_exists(PATH_CORE . 'js' . PATH_SEP . $jslabel1)) { | |
| $jslabel = '/jscore/labels/en.js'; | |
| } | |
| } | |
| $head = ''; | |
| //$head .= "<script language='javascript'>\n"; | |
| foreach ($this->scriptFiles as $file) { | |
| if (($file != "/js/maborak/core/maborak.js") && ($file != $jslabel)) { | |
| $head = $head . " eval(ajax_function(\"" . G::browserCacheFilesUrl($file) . "\", \"\", \"\"));\n"; | |
| } | |
| } | |
| foreach ($this->leimnudLoad as $file) { | |
| $head .= " eval(ajax_function('" . $file . "','',''));\n"; | |
| } | |
| //Adapts the add events on load to simple javascript sentences. | |
| $this->headerScript = preg_replace('/\s*leimnud.event.add\s*\(\s*window\s*,\s*(?:\'|")load(?:\'|")\s*,\s*function\(\)\{(.+)\}\s*\)\s*;?/', '$1', $this->headerScript); | |
| $head .= $this->headerScript; | |
| //$head .= "</script>\n"; | |
| return $head; | |
| } | |
| /** | |
| * Function clearScripts | |
| * Its prupose is to clear all the scripts of the header. | |
| * | |
| * @author David S. Callizaya S. <davidsantos@colosa.com> | |
| * @access public | |
| * @return string | |
| */ | |
| public function clearScripts() | |
| { | |
| $this->scriptFiles = array(); | |
| $this->leimnudLoad = array(); | |
| $this->leimnudInitString = ''; | |
| $this->headerScript = ''; | |
| } | |
| /** | |
| * Function includeExtJs | |
| * with this function we are using the ExtJs library, this library is not compatible with | |
| * previous libraries, for that reason oHeadPublisher will clear previous libraries like maborak | |
| * we need to check if we need the language file | |
| * this function returns the header needed to render a page using ExtJs | |
| * | |
| * @author Fernando Ontiveros <fernando@colosa.com> | |
| * @access public | |
| * @return string | |
| */ | |
| public function includeExtJs() | |
| { | |
| $this->clearScripts(); | |
| $head = ""; | |
| $head = $head . " <script type=\"text/javascript\" src=\"" . G::browserCacheFilesUrl("/js/ext/ext-base.js") . "\"></script>\n"; | |
| $head = $head . " <script type=\"text/javascript\" src=\"" . G::browserCacheFilesUrl("/js/ext/ext-all.js") . "\"></script>\n"; | |
| $head = $head . " <script type=\"text/javascript\" src=\"" . G::browserCacheFilesUrl("/jscore/src/PM.js") . "\"></script>\n"; | |
| $head = $head . " <script type=\"text/javascript\" src=\"" . G::browserCacheFilesUrl("/jscore/src/Sessions.js") . "\"></script>\n"; | |
| if (SYS_LANG != 'en') { | |
| $tempLang = str_replace('-', '_', SYS_LANG); | |
| if (file_exists(PATH_GULLIVER_HOME . 'js' . PATH_SEP . 'ext' . PATH_SEP . 'locale' . PATH_SEP . 'ext-lang-' . $tempLang . '.js')) { | |
| $head = $head . " <script type=\"text/javascript\" src=\"" . G::browserCacheFilesUrl("/js/ext/locale/ext-lang-" . $tempLang . ".js") . "\"></script>\n"; | |
| } else { | |
| $aux = explode('-', strtolower(SYS_LANG)); | |
| if (file_exists(PATH_GULLIVER_HOME . 'js' . PATH_SEP . 'ext' . PATH_SEP . 'locale' . PATH_SEP . 'ext-lang-' . $aux[0] . '.js')) { | |
| $head = $head . " <script type=\"text/javascript\" src=\"" . G::browserCacheFilesUrl("/js/ext/locale/ext-lang-" . $aux[0] . ".js") . "\"></script>\n"; | |
| } | |
| } | |
| } | |
| // enabled for particular use | |
| $head .= $this->getExtJsLibraries(); | |
| // $head .= " <script type='text/javascript' src='/js/ext/draw2d.js'></script>\n"; | |
| // $head .= " <script type=\"text/javascript\" src=\"" . G::browserCacheFilesUrl("/js/ext/translation." . SYS_LANG . ".js") . "\"></script>\n"; | |
| if (!isset($this->extJsSkin) || $this->extJsSkin == '') { | |
| $this->extJsSkin = 'xtheme-gray'; | |
| //$this->extJsSkin = 'gtheme'; | |
| } | |
| //$head .= $this->getExtJsStylesheets(); | |
| $head .= $this->getExtJsScripts(); | |
| $head .= $this->getExtJsVariablesScript(); | |
| $oServerConf = & ServerConf::getSingleton(); | |
| if ($oServerConf->isRtl(SYS_LANG)) { | |
| $head = $head . " <script type=\"text/javascript\" src=\"" . G::browserCacheFilesUrl("/js/ext/extjs_rtl.js") . "\"></script>\n"; | |
| } | |
| return $head; | |
| } | |
| public function getExtJsStylesheets($skinName) | |
| { | |
| $script = " <link rel='stylesheet' type='text/css' href='/css/$skinName.css' />\n"; | |
| //$script .= " <script type=\"text/javascript\" src=\"" . G::browserCacheFilesUrl("/js/ext/translation." . SYS_LANG . ".js") . "\"></script>\n"; | |
| /* | |
| $script .= " <link rel='stylesheet' type='text/css' href='/skins/ext/ext-all-notheme.css' />\n"; | |
| $script .= " <link rel='stylesheet' type='text/css' href='/skins/ext/" . $this->extJsSkin.".css' />\n"; | |
| // <!-- DEPRECATED, this will be removed in a future - the three next lines | |
| if (file_exists ( PATH_HTML . 'skins' . PATH_SEP . 'ext' . PATH_SEP . 'pmos-' . $this->extJsSkin . '.css' )) { | |
| $script .= " <link rel='stylesheet' type='text/css' href='/skins/ext/pmos-" . $this->extJsSkin . ".css' />\n"; | |
| } | |
| //DEPRECATED, this will be removed in a future --> | |
| //new interactive css decorator | |
| $script .= " <link rel='stylesheet' type='text/css' href='/gulliver/loader?t=extjs-cssExtended&s=".$this->extJsSkin."' />\n"; | |
| $script .= " <link rel='stylesheet' type='text/css' href='/images/icons_silk/sprite.css' />\n"; | |
| */ | |
| // Load external/plugin css | |
| // NOTE is necesary to move this to decorator server | |
| if (class_exists('ProcessMaker\Plugins\PluginRegistry') && !empty(config("system.workspace"))) { | |
| $oPluginRegistry = PluginRegistry::loadSingleton(); | |
| $registeredCss = $oPluginRegistry->getRegisteredCss(); | |
| /** @var \ProcessMaker\Plugins\Interfaces\CssFile $cssFile */ | |
| foreach ($registeredCss as $cssFile) { | |
| $script .= " <link rel='stylesheet' type='text/css' href='" . $cssFile->getCssFile() . ".css' />\n"; | |
| } | |
| } | |
| return $script; | |
| } | |
| public function getExtJsScripts() | |
| { | |
| $script = ''; | |
| if (isset($this->extJsScript) && is_array($this->extJsScript)) { | |
| foreach ($this->extJsScript as $key => $file) { | |
| $script = $script . " <script type=\"text/javascript\" src=\"" . G::browserCacheFilesUrl($file . ".js") . "\"></script>\n"; | |
| } | |
| } | |
| return $script; | |
| } | |
| public function getExtJsVariablesScript() | |
| { | |
| $script = ''; | |
| if (count($this->extVariable) > 0) { | |
| $script = "<script language='javascript'>\n"; | |
| foreach ($this->extVariable as $key => $val) { | |
| $name = $val['name']; | |
| $value = $val['value']; | |
| $variablesValues = G::json_encode($value); | |
| $variablesValues = $this->stripCodeQuotes($variablesValues); | |
| // var_dump($variablesValues); | |
| // echo "<br>"; | |
| $script .= " var $name = " . $variablesValues . ";\n"; | |
| /* | |
| if ($val ['type'] == 'number') | |
| $script .= " var $name = $value;\n"; | |
| else | |
| $script .= " var $name = '$value';\n"; | |
| */ | |
| } | |
| $script .= "</script>\n"; | |
| } | |
| return $script; | |
| } | |
| public function getExtJsLibraries() | |
| { | |
| $script = ''; | |
| if (isset($this->extJsLibrary) && is_array($this->extJsLibrary)) { | |
| foreach ($this->extJsLibrary as $file) { | |
| $script = $script . " <script type=\"text/javascript\" src=\"" . G::browserCacheFilesUrl("/js/ext/" . $file . ".js") . "\"></script>\n"; | |
| } | |
| } | |
| if (!in_array($this->translationsFile, $this->extJsLibrary)) { | |
| $script = $script . " <script type=\"text/javascript\" src=\"" . G::browserCacheFilesUrl($this->translationsFile) . "\"></script>\n"; | |
| } | |
| return $script; | |
| } | |
| /** | |
| * add a ExtJS extended library | |
| * | |
| * @author Erik A. Ortiz <erik@colosa.com> | |
| * @access public | |
| * @param (String) http js path library | |
| * @return none | |
| */ | |
| public function usingExtJs($library) | |
| { | |
| if (!is_string($library)) { | |
| throw new Exception('headPublisher::usingExt->ERROR - the parameter should be a js path string'); | |
| } | |
| array_push($this->extJsLibrary, $library); | |
| } | |
| /** | |
| * Function setExtSkin | |
| * | |
| * @author Fernando Ontiveros <fernando@colosa.com> | |
| * @access public | |
| * @return string | |
| */ | |
| public function setExtSkin($skin) | |
| { | |
| $this->extJsSkin = $skin; | |
| } | |
| /** | |
| * Function addExtJsScript | |
| * adding a javascript file . | |
| * | |
| * js | |
| * add a js file in the extension Javascript Array, | |
| * later, when we use the includeExtJs function, all the files in this array will be included in the output | |
| * if the second argument is true, the file will not be minified, this is useful for debug purposes. | |
| * | |
| * Feature added - <erik@colosa.com> | |
| * - Hook to find javascript registered from plugins and load them | |
| * | |
| * @author Fernando Ontiveros <fernando@colosa.com> | |
| * @author Erik Amaru Ortiz <erik@colosa.com> | |
| * @access public | |
| * @return string | |
| */ | |
| public function addExtJsScript($filename, $debug = false, $isExternal = false) | |
| { | |
| $sPath = PATH_TPL; | |
| //if the template file doesn't exists, then try with the plugins folders | |
| if (!is_file($sPath . $filename . ".js")) { | |
| $aux = explode(PATH_SEP, $filename); | |
| //check if G_PLUGIN_CLASS is defined, because publisher can be called without an environment | |
| if (count($aux) > 1 && defined('G_PLUGIN_CLASS')) { | |
| $flagPlugin = false; | |
| $keyPlugin = count($aux)-2; | |
| $oPluginRegistry = PluginRegistry::loadSingleton(); | |
| if ($oPluginRegistry->isRegisteredFolder($aux[$keyPlugin])) { | |
| $flagPlugin = true; | |
| } else { | |
| $keyPlugin --; | |
| if ($oPluginRegistry->isRegisteredFolder($aux[$keyPlugin])) { | |
| $flagPlugin = true; | |
| } | |
| } | |
| if ($flagPlugin) { | |
| array_push($this->extJsLibrary, 'translation.' . trim($aux[$keyPlugin]) . '.' . SYS_LANG); | |
| $sPath = PATH_PLUGINS; | |
| } | |
| } | |
| } | |
| if (!$isExternal) { | |
| $jsFilename = $sPath . $filename . '.js'; | |
| } else { | |
| $jsFilename = $filename . '.js'; | |
| } | |
| if (!file_exists($jsFilename)) { | |
| return; | |
| } | |
| $mtime = filemtime($jsFilename); | |
| G::mk_dir(PATH_C . 'ExtJs'); | |
| if ($debug) { | |
| $cacheName = str_replace('/', '_', $filename); | |
| $cacheFilename = PATH_C . 'ExtJs' . PATH_SEP . $cacheName . '.js'; | |
| file_put_contents($cacheFilename, file_get_contents($jsFilename)); | |
| } else { | |
| $cacheName = G::encryptOld($mtime . $jsFilename); | |
| $cacheFilename = PATH_C . 'ExtJs' . PATH_SEP . $cacheName . '.js'; | |
| if (!file_exists($cacheFilename)) { | |
| $content = JSMin::minify(file_get_contents($jsFilename)); | |
| file_put_contents($cacheFilename, $content); | |
| } | |
| } | |
| $this->extJsScript[] = '/extjs/' . $cacheName; | |
| //hook for registered javascripts from plugins | |
| if (class_exists('ProcessMaker\Plugins\PluginRegistry') && !empty(config("system.workspace"))) { | |
| $oPluginRegistry = PluginRegistry::loadSingleton(); | |
| $pluginJavascripts = $oPluginRegistry->getRegisteredJavascriptBy($filename); | |
| } else { | |
| $pluginJavascripts = array(); | |
| } | |
| if (count($pluginJavascripts) > 0) { | |
| if ($debug) { | |
| foreach ($pluginJavascripts as $pluginJsFile) { | |
| $jsPluginCacheName = ''; | |
| if (substr($pluginJsFile, - 3) != '.js') { | |
| $pluginJsFile .= '.js'; | |
| } | |
| if (file_exists(PATH_PLUGINS . $pluginJsFile)) { | |
| $jsPluginCacheName = str_replace('/', '_', str_replace('.js', '', $pluginJsFile)); | |
| $cacheFilename = PATH_C . 'ExtJs' . PATH_SEP . $jsPluginCacheName . ".js"; | |
| file_put_contents($cacheFilename, file_get_contents(PATH_PLUGINS . $pluginJsFile)); | |
| } | |
| if ($jsPluginCacheName != '') { | |
| $this->extJsScript[] = '/extjs/' . $jsPluginCacheName; | |
| } | |
| } | |
| } else { | |
| foreach ($pluginJavascripts as $pluginJsFile) { | |
| $jsPluginCacheName = ''; | |
| if (substr($pluginJsFile, - 3) !== '.js') { | |
| $pluginJsFile .= '.js'; | |
| } | |
| if (file_exists(PATH_PLUGINS . $pluginJsFile)) { | |
| $mtime = filemtime(PATH_PLUGINS . $pluginJsFile); | |
| $jsPluginCacheName = G::encryptOld($mtime . $pluginJsFile); | |
| $cacheFilename = PATH_C . 'ExtJs' . PATH_SEP . $jsPluginCacheName . '.js'; | |
| if (!file_exists($cacheFilename)) { | |
| $content = JSMin::minify(file_get_contents(PATH_PLUGINS . $pluginJsFile)); | |
| file_put_contents($cacheFilename, $content); | |
| } | |
| } | |
| if ($jsPluginCacheName != '') { | |
| $this->extJsScript[] = '/extjs/' . $jsPluginCacheName; | |
| } | |
| } | |
| } | |
| } | |
| //end hook for registered javascripts from plugins | |
| } | |
| /** | |
| * Function AddContent | |
| * adding a html file . | |
| * | |
| * html. | |
| * the main idea for this function, is to be a replacement to homonymous function in Publisher class. | |
| * with this function you are adding Content to the output, the class HeadPublisher will maintain a list of | |
| * files to render in the body of the output page | |
| * | |
| * @author Fernando Ontiveros <fernando@colosa.com> | |
| * @access public | |
| * @return string | |
| */ | |
| public function AddContent($templateHtml) | |
| { | |
| $this->extJsContent[] = $templateHtml; | |
| } | |
| public function getContent() | |
| { | |
| return $this->extJsContent; | |
| } | |
| /** | |
| * Function assign | |
| * assign a STRING value to a JS variable | |
| * use this function to send from PHP variables to be used in JavaScript | |
| * | |
| * @author Fernando Ontiveros <fernando@colosa.com> | |
| * @access public | |
| * @return string | |
| */ | |
| public function Assign($variable, $value) | |
| { | |
| $this->extVariable[] = array('name' => $variable, 'value' => $value, 'type' => 'string' | |
| ); | |
| } | |
| public function AssignVar($name, $value) | |
| { | |
| $this->vars[$name] = $value; | |
| } | |
| public function getVars() | |
| { | |
| return $this->vars; | |
| } | |
| /** | |
| * Function assignNumber | |
| * assign a Number value to a JS variable | |
| * use this function to send from PHP variables to be used in JavaScript | |
| * | |
| * @author Fernando Ontiveros <fernando@colosa.com> | |
| * @access public | |
| * @return string | |
| */ | |
| public function AssignNumber($variable, $value) | |
| { | |
| $this->extVariable[] = array('name' => $variable, 'value' => $value, 'type' => 'number'); | |
| } | |
| /** | |
| * Function renderExtJs | |
| * this function returns the content rendered using ExtJs | |
| * extJsContent have an array, and we iterate this array to draw the content | |
| * | |
| * @author Fernando Ontiveros <fernando@colosa.com> | |
| * @access public | |
| * @return string | |
| */ | |
| public function renderExtJs() | |
| { | |
| $body = ''; | |
| if (isset($this->extJsContent) && is_array($this->extJsContent)) { | |
| foreach ($this->extJsContent as $key => $file) { | |
| $sPath = PATH_TPL; | |
| //if the template file doesn't exists, then try with the plugins folders | |
| if (!is_file($sPath . $file . ".html")) { | |
| $aux = explode(PATH_SEP, $file); | |
| //check if G_PLUGIN_CLASS is defined, because publisher can be called without an environment | |
| if (count($aux) == 2 && defined('G_PLUGIN_CLASS')) { | |
| $oPluginRegistry = PluginRegistry::loadSingleton(); | |
| if ($oPluginRegistry->isRegisteredFolder($aux[0])) { | |
| $sPath = PATH_PLUGINS; | |
| } | |
| } | |
| } | |
| $template = new TemplatePower($sPath . $file . '.html'); | |
| $template->prepare(); | |
| foreach ($this->getVars() as $k => $v) { | |
| $template->assign($k, $v); | |
| } | |
| $body .= $template->getOutputContent(); | |
| } | |
| } | |
| return $body; | |
| } | |
| public function stripCodeQuotes($sJson) | |
| { | |
| $fields = array("editor", "renderer" | |
| ); | |
| foreach ($fields as $field) { | |
| $pattern = '/"(' . $field . ')":"[a-zA-Z.()]*"/'; | |
| // echo $pattern."<br>"; | |
| preg_match($pattern, $sJson, $matches); | |
| // var_dump ($matches); | |
| // echo "<br>"; | |
| if (!empty($matches)) { | |
| $rendererMatch = $matches[0]; | |
| $replaceBy = explode(":", $matches[0]); | |
| $replaceBy[1] = str_replace('"', '', $replaceBy[1]); | |
| $tmpString = implode(":", $replaceBy); | |
| $sJson = str_replace($rendererMatch, $tmpString, $sJson); | |
| // var_dump ($sJson); | |
| // echo "<br>"; | |
| } | |
| } | |
| return $sJson; | |
| } | |
| /** | |
| * Function disableHeaderScripts | |
| * this function sets disableHeaderScripts to true | |
| * to avoid print scripts into the header | |
| * | |
| * @author Enrique Ponce de Leom <enrique@colosa.com> | |
| * @access public | |
| * @return string | |
| */ | |
| public function disableHeaderScripts() | |
| { | |
| $this->disableHeaderScripts = true; | |
| } | |
| /** | |
| * Gets an array that contains the status of the view. | |
| * | |
| * @return array $views | |
| */ | |
| public function getExtJsViewState() | |
| { | |
| $json = new stdClass(); | |
| $views = array(); | |
| $keyState = "extJsViewState"; | |
| $prefixExtJs = "ys-"; | |
| $oServerConf = &ServerConf::getSingleton(); | |
| $deleteCache = true; | |
| $sjson = $oServerConf->getProperty($keyState); | |
| if ($sjson !== "") { | |
| $json = G::json_decode($sjson); | |
| if ((is_array($json) || is_object($json)) && sizeof($json)){ | |
| foreach ($json as $key => $value) { | |
| $views[$key] = $value; | |
| } | |
| } | |
| } | |
| $httpCookies = explode("; ", $_SERVER['HTTP_COOKIE']); | |
| foreach ($httpCookies as $cookie) { | |
| $value = explode("=", $cookie); | |
| if (count($value) > 1 && substr($value[0], 0, 3) === $prefixExtJs) { | |
| $deleteCache = false; | |
| $key = substr($value[0], 3); | |
| $views[$key] = $value[1]; | |
| } | |
| } | |
| if ((array)$json != $views) { | |
| $oServerConf->setProperty($keyState, G::json_encode($views)); | |
| } | |
| return $views; | |
| } | |
| } | |