コード例 #1
0
 public function postModule(PostModuleEvent $event)
 {
     $pageModuleWrapper = $event->getModuleWrapper();
     $queryCount = $event->getExtra('module_profiler.query_count');
     $time = microtime(true) - $event->getExtra('module_profiler.time');
     $userTime = Helper::getCpuTime('u') - $event->getExtra('module_profiler.user_time');
     $systemTime = Helper::getCpuTime('s') - $event->getExtra('module_profiler.system_time');
     $memoryUsage = memory_get_usage(true) - $event->getExtra('module_profiler.memory_usage');
     $sqlQueries = $queryCount !== null ? Propel::getQueryCount() - $queryCount : null;
     if ($userTime + $systemTime > $this->cpuLimit || $time > $this->timeLimit) {
         $this->logger->warning('Module generation time exceeded limit');
     }
     if ($memoryUsage > $this->memoryLimit) {
         $this->logger->warning('Module memory usage exceeded limit');
     }
     if ($sqlQueries > $this->sqlLimit) {
         $this->logger->warning('Module sql query count exceeded limit');
     }
     // add module debug info
     $this->moduleDebugInfo[] = array($pageModuleWrapper->getName(), $pageModuleWrapper->getClassName(), $pageModuleWrapper->getTemplate(), $pageModuleWrapper->getTarget(), (bool) $event->getExtra('module_cacher.cached'), round($time * 1000.0), round(($userTime + $systemTime) * 1000.0), Helper::humanReadableBytes($memoryUsage), Helper::humanReadableBytes(memory_get_peak_usage(true)), $sqlQueries !== null ? $sqlQueries : 'n/a');
     // Remove values to prevent caching
     $extras = $event->getExtras();
     unset($extras['module_profiler.time']);
     unset($extras['module_profiler.query_count']);
     unset($extras['module_profiler.user_time']);
     unset($extras['module_profiler.system_time']);
     unset($extras['module_profiler.memory_usage']);
     $event->setExtras($extras);
 }
コード例 #2
0
 /**
  * Restore page from serialized object.
  *
  * @param Page $page
  * @param array $pageData
  * @param array $pageMap
  */
 public static function restorePage(Page $page, array $pageData, array $pageMap)
 {
     unset($pageData['id']);
     unset($pageData['uid']);
     unset($pageData['name']);
     unset($pageData['url']);
     if ($pageData['redirect_page']) {
         $page->setRedirectPage(self::findPageByMap($pageData['redirect_page'], $pageMap));
     }
     $page->fromArray($pageData, BasePeer::TYPE_FIELDNAME);
     $page->save();
     if (!$pageData['revision']) {
         return;
     }
     // Create new revision
     $pr = new PageRevision();
     $pr->setPage($page);
     $pr->setBasePage(self::findPageByMap($pageData['revision']['base_page'], $pageMap));
     $pr->fromArray($pageData['revision'], BasePeer::TYPE_FIELDNAME);
     $pr->setDescription('Copied');
     $page->setWorkingPageRevision($pr);
     $page->save();
     // Add module data...
     $order = array();
     $parentPages = ArrayHelper::objectsToArray($page->getWorkingPageRevision()->getInheritanceChain(true), null, 'getPageId');
     $inheritedModules = $pr->getModules();
     foreach ($pageData['revision']['modules'] as $module) {
         $pm = null;
         if (!$module['is_inherited']) {
             $pm = PageModuleQuery::create()->findOneByUid($module['uid']);
             if ($pm && !in_array($pm->getPageId(), $parentPages)) {
                 // Page module exists, but is not in our "inheritance chain"
                 // Give the module a new unique-id, and create the module here
                 $pm->setUid(Helper::getUniqueId());
                 $pm->save();
                 $pm = null;
             }
         } else {
             // find inherited module
             foreach ($inheritedModules as $inheritedModule) {
                 if ($inheritedModule->getUid() == $module['uid']) {
                     $pm = $inheritedModule;
                     break;
                 }
             }
         }
         if (!$pm) {
             $pm = new PageModule();
             $pm->setPage($page);
             $pm->fromArray($module, BasePeer::TYPE_FIELDNAME);
         }
         if (!$module['is_inherited']) {
             $rm = new RevisionModule();
             $rm->setPageModule($pm);
             $rm->setPageRevision($pr);
         }
         foreach ($module['datas'] as $moduleData) {
             $md = new ModuleData();
             $md->setPageModule($pm);
             $md->setPageRevision($pr);
             $md->fromArray($moduleData, BasePeer::TYPE_FIELDNAME);
         }
         $order[] = $pm->getUid();
     }
     $pr->save();
     $modules = ArrayHelper::objectsToArray($pr->getModules(), 'getUid');
     if (array_keys($modules) !== $order) {
         foreach ($order as $uid) {
             $module = $modules[$uid];
             $sortorder = new ModuleSortorder();
             $sortorder->setPageModule($module);
             $sortorder->setPageRevision($pr);
             $sortorder->insertAtBottom();
             $sortorder->save();
         }
     }
     $page->setActivePageRevision($pr);
     $page->save();
 }
コード例 #3
0
ファイル: FileBrowser.php プロジェクト: bombayworks/currycms
 /**
  * Get file details.
  *
  * @param array $selected
  * @return array
  */
 public function getFileInfo($selected)
 {
     if (count($selected) == 1) {
         try {
             $path = $selected[0];
             $physical = self::virtualToPhysical($path);
             $public = self::physicalToPublic($physical);
             if (!is_file($physical)) {
                 return null;
             }
             $owner = fileowner($physical);
             if (function_exists('posix_getpwuid')) {
                 $owner = posix_getpwuid($owner);
                 $owner = '<span title="' . $owner['uid'] . '">' . htmlspecialchars($owner['name']) . '</span>';
             }
             $group = filegroup($physical);
             if (function_exists('posix_getgrgid')) {
                 $group = posix_getgrgid($group);
                 $group = '<span title="' . $group['gid'] . '">' . htmlspecialchars($group['name']) . '</span>';
             }
             $fi = array('Name' => '<h2>' . basename($physical) . '</h2>', 'Preview' => '', 'Size' => '<strong>Size: </strong>' . Helper::humanReadableBytes(filesize($physical)), 'Writable' => '<strong>Writable: </strong>' . (self::isWritable($physical) ? 'Yes' : 'No'), 'Permissions' => '<strong>Permissions: </strong>' . PathHelper::getFilePermissions($physical), 'Owner' => '<strong>Owner: </strong>' . $owner . ' / ' . $group);
             switch (strtolower(pathinfo($physical, PATHINFO_EXTENSION))) {
                 case 'jpg':
                 case 'gif':
                 case 'png':
                 case 'bmp':
                     $image = getimagesize($physical);
                     $fi['Preview'] = '<img src="' . $public . '?' . filemtime($physical) . '" alt="" class="preview" />';
                     if ($image[0] > 240 || $image[1] > 240) {
                         $fi['Preview'] = '<a href="' . $public . '?' . filemtime($physical) . '" target="_blank" class="fullscreen-preview" title="Click to toggle fullscreen">' . $fi['Preview'] . '</a>';
                     }
                     $fi['Dimensions'] = '<strong>Dimension: </strong>' . $image[0] . 'x' . $image[1];
                     if (self::isPhysicalWritable($physical)) {
                         $fi['Actions'] = '<a href="' . url('', array('module', 'view' => 'PixlrEdit', 'image' => $public)) . '" class="dialog" onclick="$(this).data(\'dialog\').width = $(window).width() - 20; $(this).data(\'dialog\').height = $(window).height() - 20;" data-dialog=\'{"width":"90%","height":600,"resizable":false,"draggable":false}\'>Edit with Pixlr</a>';
                     }
                     break;
                 case 'ogg':
                 case 'ogv':
                 case 'mp4':
                 case 'webm':
                     $fi['Preview'] = '<video src="' . $public . '" class="preview" controls />';
                     break;
                 case 'mp3':
                 case 'oga':
                 case 'wav':
                     $fi['Preview'] = '<audio src="' . $public . '" class="preview" controls />';
                     break;
                 case 'swf':
                     $size = getimagesize($physical);
                     $flash = Flash::embed(Flash::SWFOBJECT_STATIC, $public, $size[0], $size[1], '9.0.0', array());
                     $fi['Preview'] = $flash['html'];
                     break;
             }
             return $fi;
         } catch (Exception $e) {
             $this->app->logger->error($e->getMessage());
         }
     } else {
         $totalSize = 0;
         foreach ($selected as $s) {
             $physical = self::virtualToPhysical($s);
             $totalSize += filesize($physical);
         }
         return array('Name' => '<h2>' . count($selected) . ' files</h2>', 'Size' => '<strong>Size: </strong>' . Helper::humanReadableBytes($totalSize));
     }
     return null;
 }
コード例 #4
0
ファイル: Backend.php プロジェクト: bombayworks/currycms
 public function index(Request $request, View $view)
 {
     $response = $view->show($request);
     if (!$response instanceof Response) {
         $response = new Response(Helper::stringify($response));
     }
     return $response;
 }
コード例 #5
0
ファイル: FileEditor.php プロジェクト: bombayworks/currycms
 /**
  * Get edit file form.
  *
  * @param SplFileInfo $file
  * @return Curry_Form
  */
 protected function getEditForm(SplFileInfo $file)
 {
     $content = file_get_contents($file->getPathname());
     $eol = Helper::getStringEol($content);
     $form = new Curry_Form(array('action' => url('', $_GET), 'method' => 'post', 'class' => 'ctrlsave ajaxsubmit', 'elements' => array('eol' => array('hidden', array('value' => urlencode($eol))), 'content' => array('codeMirror', array('label' => 'Content', 'value' => $content, 'cols' => 40, 'rows' => 25)), 'save' => array('submit', array('class' => 'btn btn-large', 'label' => 'Save')))));
     return $form;
 }
コード例 #6
0
 /**
  * Add HTML content to menu.
  *
  * @param mixed $content
  */
 public function addMenuContent($content)
 {
     $this->menuContent .= Helper::stringify($content);
 }
コード例 #7
0
ファイル: App.php プロジェクト: bombayworks/currycms
 /**
  * {@inheritdoc}
  */
 public function handle(Request $request, $type = HttpKernelInterface::MASTER_REQUEST, $catch = true)
 {
     $startTime = microtime(true);
     $this->logger->debug(($type === HttpKernelInterface::MASTER_REQUEST ? 'Master-Request: ' : 'Sub-Request') . $request->getMethod() . ' ' . $request->getRequestUri());
     $previous = isset($this->request) ? $this->request : null;
     $this->request = $request;
     $response = $this->kernel->handle($request, $type, $catch);
     $this->request = $previous;
     if ($this['developmentMode']) {
         $queryCount = Util\Propel::getQueryCount();
         $this->logger->debug("Response completed", array('time' => microtime(true) - $startTime, 'mem' => Helper::humanReadableBytes(memory_get_peak_usage()), 'sql' => $queryCount !== null ? $queryCount : 'n/a'));
     }
     return $response;
 }
コード例 #8
0
ファイル: PageHelper.php プロジェクト: bombayworks/currycms
 /**
  * Save new module.
  * 
  * @todo Set module position.
  *
  * @param PageRevision $pageRevision
  * @param array $values
  * @return PageModule
  */
 public static function saveNewModule(PageRevision $pageRevision, array $values)
 {
     $pageModule = new PageModule();
     $pageModule->setUid(Helper::getUniqueId());
     $pageModule->setPageId($pageRevision->getPageId());
     if (ctype_digit($values['module_class'])) {
         $module = ModuleQuery::create()->findPk($values['module_class']);
         $pageModule->setModuleClass($module->getModuleClass());
         $pageModule->setName($values['name']);
         $pageModule->setTarget($values['target']);
         $pageModule->setContentVisibility($module->getContentVisibility());
         $pageModule->setSearchVisibility($module->getSearchVisibility());
         $template = $module->getTemplate();
     } else {
         $template = null;
         if ($values['template'] == 'new' && $values['template_name']) {
             $className = $values['module_class'];
             $predefinedTemplates = call_user_func(array($className, 'getPredefinedTemplates'));
             $root = \Curry\App::getInstance()['template.root'];
             $template = $values['template_name'];
             $templateFile = $root . DIRECTORY_SEPARATOR . $template;
             if (!file_exists($templateFile)) {
                 $dir = dirname($templateFile);
                 if (!is_dir($dir)) {
                     mkdir($dir, 0777, true);
                 }
                 $code = $predefinedTemplates[$values['predefined_template']];
                 file_put_contents($templateFile, (string) $code);
             }
         } else {
             if ($values['template']) {
                 $template = $values['template'];
             }
         }
         $target = '';
         if (!empty($values['target'])) {
             $target = $values['target'];
         } else {
             if (!empty($values['target_name'])) {
                 $target = $values['target_name'];
             }
         }
         if (empty($target)) {
             throw new Exception('Module target not set');
         }
         $pageModule = new PageModule();
         $pageModule->setUid(Helper::getUniqueId());
         $pageModule->setPageId($pageRevision->getPageId());
         $pageModule->setModuleClass($values['module_class']);
         $pageModule->setName($values['name']);
         $pageModule->setTarget($target);
         $pageModule->setContentVisibility($values['content_visibility']);
         $pageModule->setSearchVisibility($values['search_visibility']);
     }
     $pageModule->save();
     $revisionModule = new RevisionModule();
     $revisionModule->setPageModule($pageModule);
     $revisionModule->setPageRevision($pageRevision);
     $revisionModule->save();
     $moduleData = new ModuleData();
     $moduleData->setPageRevision($pageRevision);
     $moduleData->setPageModule($pageModule);
     $moduleData->setEnabled(true);
     $moduleData->setTemplate($template);
     $moduleData->save();
     // create default data
     $wrapper = new PageModuleWrapper($pageModule, $pageRevision, null);
     $wrapper->createData();
     return $pageModule;
 }
コード例 #9
0
ファイル: Database.php プロジェクト: bombayworks/currycms
 /**
  * Restore database.
  */
 public function showRestore()
 {
     $this->showMainMenu();
     $tables = array();
     $selectedTables = array();
     $disabledTables = array();
     foreach (Propel::getModels() as $package => $classes) {
         $tables[$package] = array();
         foreach ($classes as $table) {
             $tables[$package][$table] = $table;
             if (method_exists($table, 'save')) {
                 $selectedTables[] = $table;
             } else {
                 $disabledTables[] = $table;
             }
         }
     }
     $files = array('' => '-- Select file --', 'upload' => '[ Upload from computer ]', 'remote' => '[ From remote server ]');
     $path = Curry_Backend_DatabaseHelper::createBackupName('*.txt');
     foreach (array_reverse(glob($path)) as $file) {
         $files[$file] = basename($file) . ' (' . Helper::humanReadableBytes(filesize($file)) . ')';
     }
     $form = new Curry_Form(array('action' => url('', array("module", "view", "page_id")), 'method' => 'post', 'enctype' => 'multipart/form-data', 'elements' => array('tables' => array('multiselect', array('label' => 'Tables', 'multiOptions' => $tables, 'value' => $selectedTables, 'disable' => $disabledTables, 'size' => 15)), 'file' => array('select', array('label' => 'From file', 'multiOptions' => $files, 'class' => 'trigger-change', 'onchange' => "\$('#uploadfile-label').next().andSelf()[this.value == 'upload'?'show':'hide']();" . "\$('#remote-label').next().andSelf()[this.value == 'remote'?'show':'hide']();")), 'uploadfile' => array('file', array('label' => 'Upload file', 'valueDisabled' => true)), 'remote' => array('text', array('label' => 'Remote')), 'max_execution_time' => array('text', array('label' => 'Max execution time', 'value' => '', 'description' => 'Input time in seconds to allow interruption if the time taken to restore would exceed the maximum execution time.')))));
     $form->addElement('submit', 'Go');
     if (isPost() && $form->isValid($_POST)) {
         if ($form->file->getValue() == 'upload') {
             if (!$form->uploadfile->isUploaded()) {
                 throw new Exception('No file was uploaded.');
             }
             $fileinfo = $form->uploadfile->getFileInfo();
             Curry_Backend_DatabaseHelper::restoreFromFile($fileinfo['uploadfile']['tmp_name'], $form->tables->getValue(), 0, 0, $this);
         } else {
             if ($form->file->getValue() == 'remote') {
                 if (!$form->remote->getValue()) {
                     throw new Exception('No remote URL set');
                 }
                 $url = url($form->remote->getValue());
                 $post = array('login_username' => $url->getUser(), 'login_password' => $url->getPassword(), 'tables' => '*', 'name' => 'db.txt', 'type' => 'local');
                 $url->setUser(null)->setPassword(null)->setPath('/admin.php')->add(array('module' => 'Curry_Backend_Database', 'view' => 'Backup'));
                 $context = stream_context_create(array('http' => array('method' => 'POST', 'header' => "Content-type: application/x-www-form-urlencoded\r\n", 'content' => http_build_query($post))));
                 $fp = fopen($url, 'r', false, $context);
                 Curry_Backend_DatabaseHelper::restoreFromFile($fp, $form->tables->getValue(), 0, 0, $this);
                 fclose($fp);
             } else {
                 if ($form->file->getValue()) {
                     Curry_Backend_DatabaseHelper::restoreFromFile($form->file->getValue(), $form->tables->getValue(), (int) $form->max_execution_time->getValue(), 0, $this);
                 }
             }
         }
     }
     $this->addMainContent($form);
 }