Пример #1
0
 /**
  * Component initialization
  */
 function init()
 {
     Yii::import('application.vendors.*');
     // need this since Yii autoload handler raises an error if class is not found
     spl_autoload_unregister(array('YiiBase', 'autoload'));
     // registering Dwoo autoload handler
     require_once 'Dwoo/dwooAutoload.php';
     // adding back Yii autoload handler
     spl_autoload_register(array('YiiBase', 'autoload'));
     // compiled templates directory
     $compileDir = Yii::app()->getRuntimePath() . '/dwoo/compiled/';
     // create compiled directory if not exists
     if (!file_exists($compileDir)) {
         mkdir($compileDir, $this->filePermission, true);
     }
     // cached templates directory
     $cacheDir = Yii::app()->getRuntimePath() . '/dwoo/cache/';
     // create compiled directory if not exists
     if (!file_exists($cacheDir)) {
         mkdir($cacheDir, $this->filePermission, true);
     }
     $this->dwoo = new Dwoo($compileDir, $cacheDir);
     $loader = $this->dwoo->getLoader();
     // adding extension plugin directory
     $loader->addDirectory(Yii::getPathOfAlias('application.extensions.Dwoo.plugins'));
     // adding config plugin directory if specified
     if (!empty($this->pluginsDir)) {
         $loader->addDirectory(Yii::getPathOfAlias($this->pluginsDir));
     }
 }
Пример #2
0
 public function testLoaderGetSet()
 {
     $dwoo = new Dwoo(DWOO_COMPILE_DIR, DWOO_CACHE_DIR);
     $loader = new Dwoo_Loader(TEST_DIRECTORY . '/temp/cache');
     $dwoo->setLoader($loader);
     $this->assertEquals($loader, $dwoo->getLoader());
 }
Пример #3
0
 /**
  * {@inheritdoc}
  */
 public function render($viewName, Model $model, NotificationCenter $notificationCenter, $output = true)
 {
     Profile::start('Renderer', 'Generate HTML');
     $templateName = $viewName . '.' . static::$templateFileExtension;
     $dwoo = new Dwoo($this->compiledPath, $this->cachePath);
     $dwoo->getLoader()->addDirectory($this->functionsPath);
     Profile::start('Renderer', 'Create template file.');
     $template = new Dwoo_Template_File($templateName);
     $template->setIncludePath($this->getTemplatesPath());
     Profile::stop();
     Profile::start('Renderer', 'Render');
     $dwooData = new Dwoo_Data();
     $dwooData->setData($model->getData());
     $dwooData->assign('errorMessages', $notificationCenter->getErrors());
     $dwooData->assign('successMessages', $notificationCenter->getSuccesses());
     $this->setHeader('Content-type: text/html', $output);
     // I do never output directly from dwoo to have the possibility to show an error page if there was a render error.
     $result = $rendered = $dwoo->get($template, $dwooData, null, false);
     if ($output) {
         echo $result;
     }
     Profile::stop();
     Profile::stop();
     return $output ? null : $rendered;
 }
Пример #4
0
function Dwoo_Plugin_format_text(Dwoo $dwoo, $text, $format = 'plain', $mode = 'format')
{
    switch ($format) {
        case 'html':
            if ($mode == 'strip') {
                return strip_tags($text);
            } else {
                return $text;
            }
        case 'micstext':
            // load plugin
            if (function_exists('Dwoo_Plugin_micstext') === false) {
                $dwoo->getLoader()->loadPlugin('micstext');
            }
            return Dwoo_Plugin_micstext($dwoo, $text, $mode);
        default:
        case 'plain':
            return nl2br(htmlspecialchars($text));
    }
}
Пример #5
0
 /**
  * returns the plugin type of a plugin and adds it to the used plugins array if required
  *
  * @param string $name plugin name, as found in the template
  * @return int type as a multi bit flag composed of the Dwoo plugin types constants
  */
 protected function getPluginType($name)
 {
     $pluginType = -1;
     if ($this->securityPolicy === null && (function_exists($name) || strtolower($name) === 'isset' || strtolower($name) === 'empty') || $this->securityPolicy !== null && in_array(strtolower($name), $this->securityPolicy->getAllowedPhpFunctions()) !== false) {
         $phpFunc = true;
     }
     while ($pluginType <= 0) {
         if (isset($this->customPlugins[$name])) {
             $pluginType = $this->customPlugins[$name]['type'] | Dwoo::CUSTOM_PLUGIN;
         } elseif (class_exists('Dwoo_Plugin_' . $name, false) !== false) {
             if (is_subclass_of('Dwoo_Plugin_' . $name, 'Dwoo_Block_Plugin')) {
                 $pluginType = Dwoo::BLOCK_PLUGIN;
             } else {
                 $pluginType = Dwoo::CLASS_PLUGIN;
             }
             $interfaces = class_implements('Dwoo_Plugin_' . $name, false);
             if (in_array('Dwoo_ICompilable', $interfaces) !== false || in_array('Dwoo_ICompilable_Block', $interfaces) !== false) {
                 $pluginType |= Dwoo::COMPILABLE_PLUGIN;
             }
         } elseif (function_exists('Dwoo_Plugin_' . $name) !== false) {
             $pluginType = Dwoo::FUNC_PLUGIN;
         } elseif (function_exists('Dwoo_Plugin_' . $name . '_compile')) {
             $pluginType = Dwoo::FUNC_PLUGIN | Dwoo::COMPILABLE_PLUGIN;
         } elseif (function_exists('smarty_modifier_' . $name) !== false) {
             $pluginType = Dwoo::SMARTY_MODIFIER;
         } elseif (function_exists('smarty_function_' . $name) !== false) {
             $pluginType = Dwoo::SMARTY_FUNCTION;
         } elseif (function_exists('smarty_block_' . $name) !== false) {
             $pluginType = Dwoo::SMARTY_BLOCK;
         } else {
             if ($pluginType === -1) {
                 try {
                     $this->dwoo->getLoader()->loadPlugin($name, isset($phpFunc) === false);
                 } catch (Exception $e) {
                     if (isset($phpFunc)) {
                         $pluginType = Dwoo::NATIVE_PLUGIN;
                     } elseif (is_object($this->dwoo->getPluginProxy()) && $this->dwoo->getPluginProxy()->handles($name)) {
                         $pluginType = Dwoo::PROXY_PLUGIN;
                         break;
                     } else {
                         throw $e;
                     }
                 }
             } else {
                 throw new Dwoo_Exception('Plugin "' . $name . '" could not be found');
             }
             $pluginType++;
         }
     }
     if (($pluginType & Dwoo::COMPILABLE_PLUGIN) === 0 && ($pluginType & Dwoo::NATIVE_PLUGIN) === 0 && ($pluginType & Dwoo::PROXY_PLUGIN) === 0) {
         $this->usedPlugins[$name] = $pluginType;
     }
     return $pluginType;
 }