/** {@inheritdoc} */ public function toTwig() { $content = $this->content; if ($this->allowTemplateSyntax) { $tpl = Curry_Twig_Template::loadTemplateString($content); $content = $tpl->render(array()); } return array('content' => $content); }
/** * 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)); }
public function templateToString($template, BaseObject $obj) { $tpl = Curry_Twig_Template::loadTemplateString($template); return $tpl->render(Curry_Propel::toTwig($obj)); }
/** * 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; }
/** * 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 ''; }