/**
  * Compiles code for the {radinclude} tag
  *
  * @param array $args array with attributes from parser
  * @param object $compiler compiler object
  * @param array $parameter array with compilation parameter
  * @throws rad_exception
  * @return string compiled code
  */
 public function compile($args, $compiler, $parameter)
 {
     // check and get attributes
     $_attr = $this->getAttributes($compiler, $args);
     if (!isset($_attr['module'])) {
         throw new rad_exception("radinclude: missing 'module' parameter");
     }
     if (!isset($_attr['file'])) {
         throw new rad_exception("radinclude: missing 'file' parameter");
     }
     $modulename = trim($_attr['module'], '"\'');
     //remove beginning and end quotes
     $filename = trim($_attr['file'], '"\'');
     if (!preg_match('/^[a-z][a-z0-9]{2,31}$/i', $modulename)) {
         throw new rad_exception("radinclude: 'module' should only use a-zA-Z0-9 characters and be from 2 to 31 long");
     }
     if (!preg_match('/^[a-z0-9][-_.a-z0-9]*(?:\\/[a-z0-9][-_.a-z0-9]*)*\\.tpl$/i', $filename)) {
         throw new rad_exception("radinclude: 'file' should only consists of a-zA-Z0-9-_. and \\ symbols");
     }
     if (!($filename = rad_themer::getFilePath(null, 'templates', $modulename, $filename))) {
         throw new rad_exception("Template {$filename} not found in module {$modulename}");
     }
     $this->replaceFilename($filename, $args);
     //relative to module filename -> to absolute path
     return parent::compile($args, $compiler, $parameter);
 }
예제 #2
0
 /**
  * Gets the XML-file name for module and component
  * @param string $module
  * @param string $fn
  * @return string - Full file name
  */
 private function _getFN($module, $fn, $useTheme = false, $checkExists = false)
 {
     $fn .= '.xml';
     if ($checkExists && $useTheme) {
         return rad_themer::getFilePath(null, 'set', $module, $fn);
     }
     //Use only default theme
     $file = COMPONENTSPATH . $module . DS . 'set' . DS . $fn;
     if (!$checkExists || file_exists($file)) {
         return $file;
     }
     return null;
 }
예제 #3
0
function _autoload($class_name)
{
    if (trim($class_name) == '') {
        return false;
    }
    if (class_exists($class_name)) {
        return true;
    }
    $classParts = explode('_', $class_name);
    if (count($classParts) < 2) {
        return false;
    }
    switch ($classType = array_shift($classParts)) {
        case 'rad':
            $file = LIBPATH . 'class.' . implode('_', $classParts) . '.php';
            break;
        case 'interface':
            $file = LIBPATH . 'interfaces' . DS . 'interface.' . implode('_', $classParts) . '.php';
            break;
        case 'rpl':
            $file = LIBPATH . 'ext/' . strtolower($class_name) . '.php';
            break;
        case 'struct':
        case 'model':
        case 'controller':
        case 'class':
            $plural = $classType == 'class' ? 'classes' : $classType . 's';
            $component = array_shift($classParts);
            $className = implode('_', $classParts);
            $file = rad_themer::getFilePath(null, $plural, $component, $className . '.php');
            break;
        default:
            return;
    }
    if (!empty($file)) {
        @(include_once $file);
        if (class_exists($class_name, false)) {
            return true;
        }
        throw new RuntimeException("Could not find the class '{$class_name}' in {$file}!", 11348);
    }
}
예제 #4
0
    errorMsg('Module name is incorrect!');
}
if (empty($filename)) {
    errorMsg('File name is not set!');
}
if (!preg_match('~^[a-zA-Z0-9][-_.a-zA-Z0-9]*(?:/[a-zA-Z0-9][-_.a-zA-Z0-9]*)*\\.(?:js|css)$~i', $filename)) {
    errorMsg('File name is incorrect!');
}
$theme_name = rad_themer::getCurrentTheme();
$cachedFile = $config['rootPath'] . 'cache' . DS . $type . DS . $theme_name . DS . $module . DS . $filename;
$cachedPath = dirname($cachedFile);
if (!recursive_mkdir($cachedPath, 0777)) {
    errorMsg('Can not create dir! Path: {$cachedPath}');
}
if (!file_exists($cachedFile) || time() - filemtime($cachedFile) >= (int) $config['cache.power.time']) {
    $originalFile = rad_themer::getFilePath($theme_name, 'jscss', $module, $filename);
    if (!$originalFile) {
        errorMsg('File does not exist!');
    }
    try {
        rad_jscss::copyToCache($originalFile, $cachedFile);
    } catch (Exception $e) {
        errorMsg("Could not copy file {$originalFile} to {$cachedFile}");
    }
}
if (!@readfile($cachedFile)) {
    errorMsg("Error reading {$cachedFile}");
}
function errorMsg($msg = null)
{
    header('HTTP/1.0 404 Not Found');
예제 #5
0
 private static function _renewCache($module, $file, $type)
 {
     $filename = fixPath($file);
     $cacheFile = CACHEPATH . $type . DS . self::$themeName . DS . $module . DS . $filename;
     $cachePath = dirname($cacheFile);
     if (!file_exists($cachePath)) {
         recursive_mkdir($cachePath);
     }
     if (file_exists($cacheFile) && time() - filemtime($cacheFile) < rad_config::getParam('cache.power.time')) {
         return true;
     }
     if ($fname = rad_themer::getFilePath(self::$themeName, 'jscss', $module, $filename)) {
         return self::copyToCache($fname, $cacheFile);
     }
     return false;
 }
예제 #6
0
 protected static function parseIncludes(&$includes)
 {
     self::$_includes = array();
     foreach ($includes as $id) {
         self::$_includes[$id->inc_name] = rad_themer::getFilePath(null, 'templates', $id->m_name, $id->inc_filename);
     }
 }
예제 #7
0
 public static function getLinkToImage($module, $file, $preset)
 {
     if (empty($preset)) {
         //TODO: maybe it'd be better to set "original" preset by default?
         throw new RuntimeException('"Preset" parameter is required in {url type="image"} TAG');
     }
     $fnameOriginal = rad_themer::getFilePath(null, 'img', $module, $file);
     if (!$fnameOriginal) {
         throw new RuntimeException("File {$file} not found in module {$module} for {url type='image'}");
     }
     $theme = rad_themer::getCurrentTheme();
     $tail = "img/{$theme}/{$module}/{$preset}/{$file}";
     $fnameCached = CACHEPATH . fixPath($tail);
     self::renewCache($fnameOriginal, $fnameCached, $preset);
     return SITE_URL . 'cache/' . $tail;
 }
예제 #8
0
 /**
  * Function that is called to show all variables and all the page!
  */
 public static function show()
 {
     $o = rad_rsmarty::getSmartyObject();
     //TODO: optimize memory
     if (count(self::$_html)) {
         foreach (self::$_html as $key => $value) {
             $o->assign($key, $value);
         }
     }
     $o->assign('_CURR_LANG_', rad_lang::getCurrentLanguage());
     if (isset(self::$sendedParams[self::$_alias->filename])) {
         foreach (self::$sendedParams[self::$_alias->filename] as $pkey => $pval) {
             $o->assign($pkey, $pval);
         }
     }
     $file = rad_themer::getFilePath(null, 'templates', 'core', 'maintemplates' . DS . self::$_alias->filename . '.tpl');
     rad_instances::setCurrentTemplate($file, true);
     $o->display($file);
 }