Exemplo n.º 1
0
 /** {@inheritdoc} */
 public function toTwig()
 {
     $content = $this->content;
     if ($this->allowTemplateSyntax) {
         $tpl = Curry_Twig_Template::loadTemplateString($content);
         $content = $tpl->render(array());
     }
     return array('content' => $content);
 }
Exemplo n.º 2
0
 /**
  * Wrap module with inline admin controls.
  *
  * @param string $content
  * @param Curry_PageModuleWrapper $pageModuleWrapper
  * @return string
  */
 protected function adminModule($content, Curry_PageModuleWrapper $pageModuleWrapper)
 {
     $user = User::getUser();
     $pageId = $pageModuleWrapper->getPageRevision()->getPageId();
     $page = $pageModuleWrapper->getPageRevision()->getPage();
     $pageModuleId = $pageModuleWrapper->getPageModuleId();
     $commands = array();
     $templatePermission = $user->hasAccess('Curry_Backend_Template');
     $contentPermission = $user->hasPagePermission($page, PageAccessPeer::PERM_CONTENT);
     $modulePermission = $user->hasPagePermission($page, PageAccessPeer::PERM_MODULES);
     $createPermission = $user->hasPagePermission($page, PageAccessPeer::PERM_CREATE_MODULE);
     if (!$user->hasModuleAccess($pageModuleWrapper)) {
         return $content;
     }
     if ($contentPermission || $modulePermission) {
         $url = url('admin.php', array('module' => 'Curry_Backend_Page', 'view' => 'Module', 'page_id' => $pageId, 'page_module_id' => $pageModuleId));
         if ($user->hasPagePermission($page, PageAccessPeer::PERM_CONTENT)) {
             $commands['edit'] = array('Name' => 'Edit', 'Url' => $url, 'Class' => 'iframe');
         }
     }
     if ($pageModuleWrapper->getTemplate() && $templatePermission) {
         $url = url('admin.php', array('module' => 'Curry_Backend_Template', 'view' => 'Edit', 'file' => $pageModuleWrapper->getTemplate()));
         $commands['template'] = array('Name' => 'Edit template', 'Url' => $url, 'Class' => 'iframe');
     }
     if ($modulePermission) {
         $url = url('admin.php', array('module' => 'Curry_Backend_Page', 'view' => 'ModuleProperties', 'page_id' => $pageId, 'page_module_id' => $pageModuleId));
         $commands['properties'] = array('Name' => 'Properties', 'Url' => $url, 'Class' => 'iframe');
     }
     if ($createPermission && ($contentPermission && !$pageModuleWrapper->isInherited() || $modulePermission)) {
         $url = url('admin.php', array('module' => 'Curry_Backend_Page', 'view' => 'DeleteModule', 'page_id' => $pageId, 'page_module_id' => $pageModuleId));
         $commands['delete'] = array('Name' => 'Delete', 'Url' => $url, 'Class' => 'iframe');
     }
     $module = $pageModuleWrapper->createObject();
     $module->setPageGenerator($this);
     $commands = $module->getInlineCommands($commands);
     if (!count($commands)) {
         return $content;
     }
     $tpl = Curry_Twig_Template::loadTemplateString(Curry_InlineAdmin::getAdminModuleTpl());
     return $tpl->render(array('Id' => $pageModuleId, 'Name' => $pageModuleWrapper->getName(), 'ClassName' => $pageModuleWrapper->getClassName(), 'Content' => $content, 'commands' => $commands));
 }
Exemplo n.º 3
0
 public function templateToString($template, BaseObject $obj)
 {
     $tpl = Curry_Twig_Template::loadTemplateString($template);
     return $tpl->render(Curry_Propel::toTwig($obj));
 }
Exemplo n.º 4
0
 /**
  * Insert module and return generated content.
  *
  * @param Curry_PageModuleWrapper $pageModuleWrapper
  * @return string
  */
 protected function insertModule(Curry_PageModuleWrapper $pageModuleWrapper)
 {
     Curry_Core::log(($pageModuleWrapper->getEnabled() ? 'Inserting' : 'Skipping') . ' module "' . $pageModuleWrapper->getName() . '" of type "' . $pageModuleWrapper->getClassName() . '" with target "' . $pageModuleWrapper->getTarget() . '"');
     if (!$pageModuleWrapper->getEnabled()) {
         return "";
     }
     $cached = false;
     $devMode = Curry_Core::$config->curry->developmentMode;
     if ($devMode) {
         $time = microtime(true);
         $sqlQueries = Curry_Propel::getQueryCount();
         $userTime = Curry_Util::getCpuTime('u');
         $systemTime = Curry_Util::getCpuTime('s');
         $memoryUsage = memory_get_usage(true);
     }
     $this->moduleCache = array();
     $module = $pageModuleWrapper->createObject();
     $module->setPageGenerator($this);
     $cp = $module->getCacheProperties();
     $cacheName = $this->getModuleCacheName($pageModuleWrapper, $module);
     // try to use cached content
     if ($cp !== null && ($cache = Curry_Core::$cache->load($cacheName)) !== false) {
         $cached = true;
         $this->insertCachedModule($cache);
         $content = $cache['content'];
     } else {
         $template = null;
         if ($pageModuleWrapper->getTemplate()) {
             $template = Curry_Twig_Template::loadTemplate($pageModuleWrapper->getTemplate());
         } else {
             if ($module->getDefaultTemplate()) {
                 $template = Curry_Twig_Template::loadTemplateString($module->getDefaultTemplate());
             }
         }
         if ($template && $template->getEnvironment()) {
             $twig = $template->getEnvironment();
             $twig->addGlobal('module', array('Id' => $pageModuleWrapper->getPageModuleId(), 'ClassName' => $pageModuleWrapper->getClassName(), 'Name' => $pageModuleWrapper->getName(), 'ModuleDataId' => $pageModuleWrapper->getModuleDataId(), 'Target' => $pageModuleWrapper->getTarget()));
         }
         $content = (string) $module->showFront($template);
         if ($cp !== null) {
             $this->moduleCache['content'] = $content;
             $this->saveModuleCache($cacheName, $cp->getLifetime());
         }
     }
     if ($devMode) {
         $time = microtime(true) - $time;
         $userTime = Curry_Util::getCpuTime('u') - $userTime;
         $systemTime = Curry_Util::getCpuTime('s') - $systemTime;
         $memoryUsage = memory_get_usage(true) - $memoryUsage;
         $sqlQueries = $sqlQueries !== null ? Curry_Propel::getQueryCount() - $sqlQueries : null;
         $cpuLimit = Curry_Core::$config->curry->debug->moduleCpuLimit;
         $timeLimit = Curry_Core::$config->curry->debug->moduleTimeLimit;
         $memoryLimit = Curry_Core::$config->curry->debug->moduleMemoryLimit;
         $sqlLimit = Curry_Core::$config->curry->debug->moduleSqlLimit;
         if ($userTime + $systemTime > $cpuLimit || $time > $timeLimit) {
             trace_warning('Module generation time exceeded limit');
         }
         if ($memoryUsage > $memoryLimit) {
             trace_warning('Module memory usage exceeded limit');
         }
         if ($sqlQueries > $sqlLimit) {
             trace_warning('Module sql query count exceeded limit');
         }
         // add module debug info
         $this->moduleDebugInfo[] = array($pageModuleWrapper->getName(), $pageModuleWrapper->getClassName(), $pageModuleWrapper->getTemplate(), $pageModuleWrapper->getTarget(), $cached, round($time * 1000.0), round(($userTime + $systemTime) * 1000.0), Curry_Util::humanReadableBytes($memoryUsage), Curry_Util::humanReadableBytes(memory_get_peak_usage(true)), $sqlQueries !== null ? $sqlQueries : 'n/a');
     }
     return $content;
 }
Exemplo n.º 5
0
    /**
     * Main view.
     *
     * @return string
     */
    public function getFinder()
    {
        if (isPost() && isset($_REQUEST['action'])) {
            try {
                // call instance method
                $method = 'action' . $_REQUEST['action'];
                if (!method_exists($this, $method)) {
                    throw new Curry_Exception('Action does not exist.');
                }
                $contentType = isset($_GET['iframe']) ? 'text/html' : 'application/json';
                Curry_Application::returnJson($this->{$method}($_REQUEST), "", $contentType);
            } catch (Exception $e) {
                if (isAjax()) {
                    $this->returnJson(array('status' => 0, 'error' => $e->getMessage()));
                } else {
                    $this->addMessage($e->getMessage(), self::MSG_ERROR);
                }
            }
        }
        $template = Curry_Twig_Template::loadTemplateString(<<<TPL
{% spaceless %}
<div class="finder">
  {% if selection %}
  <input type="hidden" name="selection" value="{{selection}}" />
  {% endif %}
  <div class="finder-overlay"><p></p></div>
  <div class="wrapper">
  {% for path in paths %}
  <ul class="folder {{path.IsRoot?'root':''}}" data-finder='{"path":"{{path.Path}}","action":"{{path.UploadUrl}}"}'>
    {% for file in path.files %}
    <li class="{{file.IsSelected?'selected':(file.IsHighlighted?'highlighted':'')}} {{file.Icon}}"><a href="{{file.Url}}" class="navigate" data-finder='{"name":"{{file.Name}}","path":"{{file.Path}}"}'>{{file.Name}}</a></li>
    {% endfor %}
  </ul>
  {% endfor %}
  {% if fileInfo %}
  <ul class="fileinfo">
    {% for Key,Value in fileInfo %}
    <li class="fileinfo-{{Key|lower}}">{{Value|raw}}</li>
    {% endfor %}
  </ul>
  {% endif %}
  </div>
  <div class="btn-toolbar">
    <div class="btn-group">
      {% for action in actions %}
      <a href="{{action.Action}}" class="btn {{action.Class}}" data-finder='{{action.Data ? action.Data|json_encode : ''}}'>{{action.Label}}</a>
      {% endfor %}
    </div>
    <select></select>
    <div class="btn-group">
      <button class="btn cancel">Cancel</button>
      <button class="btn btn-primary select" {{selection?'':'disabled=""'}}>Select</button>
    </ul>
  </div>
</div>
{% endspaceless %}
TPL
);
        $vars = array();
        $selected = (array) $_GET['path'];
        if ($_GET['public'] == 'true') {
            $virtual = array();
            foreach ($selected as $s) {
                $virtual[] = self::publicToVirtual($s);
            }
            $selected = $virtual;
        }
        // Verify selection and show selection info
        if (count($selected)) {
            try {
                $vars['fileInfo'] = $this->getFileInfo($selected);
                $selection = array();
                foreach ($selected as $s) {
                    $physical = self::virtualToPhysical($s);
                    $public = self::virtualToPublic($s);
                    $selection[] = $public;
                    if (isset($_GET['type'])) {
                        if ($_GET['type'] == 'folder' && !is_dir($physical)) {
                            $selection = false;
                            break;
                        }
                        if ($_GET['type'] == 'file' && !is_file($physical)) {
                            $selection = false;
                            break;
                        }
                    }
                }
                if ($selection) {
                    $vars['selection'] = join(PATH_SEPARATOR, $selection);
                }
            } catch (Exception $e) {
                $selected = array();
            }
        }
        // Show actions
        if ($selected && $selected[0]) {
            $vars['actions'] = array(array('Label' => 'Download', 'Action' => (string) url('', array('module', 'view' => 'Download', 'path' => $selected))));
            if ($this->isPhysicalWritable(self::virtualToPhysical($selected[0]))) {
                $vars['actions'][] = array('Label' => 'Upload', 'Action' => (string) url('', array('module', 'view', 'path' => $selected[0], 'action' => 'Upload')), 'Class' => 'upload');
                $vars['actions'][] = array('Label' => 'Delete', 'Action' => (string) url('', array('module', 'view', 'path' => $selected, 'action' => 'Delete')), 'Class' => 'delete');
                $vars['actions'][] = array('Label' => 'Create directory', 'Action' => (string) url('', array('module', 'view', 'path' => $selected[0], 'action' => 'CreateDirectory')), 'Class' => 'create-directory');
                if (count($selected) == 1) {
                    $vars['actions'][] = array('Label' => 'Rename', 'Action' => (string) url('', array('module', 'view', 'path' => $selected[0], 'action' => 'Rename')), 'Class' => 'rename', 'Data' => array('name' => basename($selected[0])));
                }
            }
        }
        $vars['paths'] = self::getPaths($selected);
        $content = $template->render($vars);
        if (isAjax()) {
            $this->returnJson(array('content' => $content, 'maxUploadSize' => Curry_Util::computerReadableBytes(get_cfg_var('upload_max_filesize')), 'path' => $selected));
        } else {
            return $content;
        }
        return '';
    }