Example #1
0
 /**
  * Creates temporary (variable) JavaScript file
  *
  * @param string $script
  * @param string $id
  * @param string $params
  * @param bool $adm
  * @return SPHeader
  */
 public function &addJsVarFile($script, $id, $params, $adm = false)
 {
     $this->store(get_defined_vars(), __FUNCTION__);
     $checksum = md5(json_encode(get_defined_vars()));
     if (!isset($this->_checksums[__FUNCTION__][$checksum])) {
         $this->_checksums[__FUNCTION__][$checksum] = true;
         $varFile = SPLoader::translatePath("var.js.{$script}_{$id}", 'front', true, 'js');
         if (!$varFile) {
             $file = SPLoader::JsFile($script, $adm, true, false);
             if ($file) {
                 SPLoader::loadClass('base.fs.file');
                 $file = new SPFile($file);
                 $fc =& $file->read();
                 foreach ($params as $k => $v) {
                     $fc = str_replace("__{$k}__", $v, $fc);
                 }
                 $fc = str_replace('__CREATED__', date(SPFactory::config()->key('date.log_format', 'D M j G:i:s T Y')), $fc);
                 $varFile = SPLoader::translatePath("var.js.{$script}_{$id}", 'front', false, 'js');
                 $file->saveAs($varFile);
             } else {
                 Sobi::Error(__FUNCTION__, SPLang::e('CANNOT_LOAD_FILE_AT', $file), SPC::NOTICE, 0, __LINE__, __FILE__);
             }
         }
         if (Sobi::Cfg('cache.include_js_files', false) && !($adm || defined('SOBIPRO_ADM'))) {
             $this->_cache['js'][++$this->count] = $varFile;
         } else {
             $varFile = str_replace(SOBI_ROOT, SPFactory::config()->get('live_site'), $varFile);
             $varFile = str_replace('\\', '/', $varFile);
             $varFile = preg_replace('|(\\w)(//)(\\w)|', '$1/$3', $varFile);
             $varFile = "\n<script type=\"text/javascript\" src=\"{$varFile}\"></script>";
             if (!in_array($varFile, $this->jsFiles)) {
                 $this->jsFiles[++$this->count] = $varFile;
             }
         }
     }
     return $this;
 }