private function upgrade_1_3()
 {
     $types = $this->listTypes();
     $formatters = $this->listAll();
     $aboutDriver = ExtensionManager::about('templatedtextformatters');
     foreach (array_keys($types) as $type) {
         $types[$type]['code'] = file_get_contents($types[$type]['path'] . '/formatter.' . $type . '.tpl');
         if (preg_match('/public\\s*function\\s*ttf_tokens\\s*\\([^\\)]*\\)\\s*(\\{(?:[^\\{\\}]+|(?1))*\\})/', $types[$type]['code'], $m)) {
             $types[$type]['ttf_tokens_code'] = $m[0];
         }
     }
     foreach ($formatters as $id => $dummy) {
         $file = TEXTFORMATTERS . "/formatter.{$id}.php";
         $data = file_get_contents($file);
         if (!preg_match('/public\\s*function\\s*ttf_tokens\\s*\\([^\\)]*\\)\\s*(\\{(?:[^\\{\\}]+|(?1))*\\})/', $data, $m)) {
             continue;
         }
         $code = $m[0];
         if (!preg_match('/\'templatedtextformatters-type\'\\s*=>\\s*\'([^\']+)\'/', $data, $m)) {
             continue;
         }
         $type = $m[1];
         if (!$types[$type] || !$types[$type]['ttf_tokens_code']) {
             continue;
         }
         $data = str_replace($code, $types[$type]['ttf_tokens_code'], $data);
         if (!General::writeFile($file, $data, Symphony::Configuration()->get('write_mode', 'file'))) {
             continue;
         }
         include_once $file;
         $classname = "formatter{$id}";
         $old = new $classname();
         $about = $old->about();
         $tokens = array('___' . $type . '/* CLASS NAME */' => $id, '/* NAME */' => preg_replace('/[^\\w\\s\\.-_\\&\\;]/i', '', trim($about['name'])), '/* AUTHOR NAME */' => $about['author']['name'], '/* AUTHOR WEBSITE */' => $about['author']['website'], '/* AUTHOR EMAIL */' => $about['author']['email'], '/* RELEASE DATE */' => DateTimeObj::getGMT('c'), '/* TEMPLATEDTEXTFORMATTERS VERSION */' => $aboutDriver['version'], '/* TEMPLATEDTEXTFORMATTERS TYPE */' => $type);
         if (method_exists($old, 'ttf_tokens')) {
             $tokens = array_merge($tokens, $old->ttf_tokens(false));
         }
         $code = str_replace(array_keys($tokens), $tokens, $types[$type]['code']);
         $code = str_replace('/* CLASS NAME */', $classname, $code);
         General::writeFile($file, $code, Symphony::Configuration()->get('write_mode', 'file'));
     }
 }
示例#2
0
    public function formatElementItem($activity, $fallback = FALSE)
    {
        switch ($activity['item_type']) {
            // Pages and Page Templates
            case 'pages':
                // Is is a Page Template?
                $is_template = !is_numeric($activity['item_id']);
                // Fetch the page from the DB
                $page = Symphony::Database()->fetch('
						SELECT `title`
						FROM `tbl_pages`
						WHERE `' . ($is_template ? 'handle' : 'id') . '` = "' . $activity['item_id'] . '"');
                // If the page no longer exists, use the fallback description
                if (empty($page)) {
                    $item = $activity['fallback_description'];
                } elseif ($is_template) {
                    $item = __(' the %1s page %2s', array($page[0]['title'], $fallback ? __('template') : Widget::Anchor(__('template'), URL . '/symphony/blueprints/pages/template/' . $activity['item_id'])->generate()));
                    // Or if it was the page config, build that description
                } else {
                    $item = __(' the %1s page', array($fallback ? $page[0]['title'] : Widget::Anchor($page[0]['title'], URL . '/symphony/blueprints/pages/edit/' . $activity['item_id'])->generate()));
                }
                break;
            case "events":
                // Grab the event info
                $handle = EventManager::__getHandleFromFilename($activity['item_id']);
                $about = EventManager::about($handle);
                // If the event no longer exists, use the fallback description
                if (empty($about)) {
                    $item = $activity['fallback_description'];
                } else {
                    $item = __(' the %1s event', array($fallback ? $about['name'] : Widget::Anchor($about['name'], URL . '/symphony/blueprints/events/edit/' . $handle)->generate()));
                }
                break;
            case "datasources":
                // Grab the DS info
                $handle = DatasourceManager::__getHandleFromFilename($activity['item_id']);
                $about = DatasourceManager::about($handle);
                // If the DS no longer exists, use the fallback description
                if (empty($about)) {
                    $item = $activity['fallback_description'];
                } else {
                    $item = __(' the %1s data source', array($fallback ? $about['name'] : Widget::Anchor($about['name'], URL . '/symphony/blueprints/datasources/edit/' . $handle)->generate()));
                }
                break;
            case "utilities":
                // If the utility no longer exists, use the fallback description
                if (!file_exists(UTILITIES . '/' . $activity['item_id'])) {
                    $item = $activity['fallback_description'];
                } else {
                    $item = __(' the %1s utility', array($fallback ? $activity['item_id'] : Widget::Anchor($activity['item_id'], URL . '/symphony/blueprints/utilities/edit/' . str_replace('.xsl', '', $activity['item_id']))->generate()));
                }
                break;
            case "sections":
                // Grab the section info
                $section = SectionManager::fetch($activity['item_id']);
                // If the section no longer exists, use the fallback description
                if (!$section instanceof Section) {
                    $item = $activity['fallback_description'];
                } else {
                    $item = __(' the %1s section', array($fallback ? $section->get('name') : Widget::Anchor($section->get('name'), URL . '/symphony/blueprints/sections/edit/' . $activity['item_id'])->generate()));
                }
                break;
            case "authors":
                // Grab the author info
                $author = AuthorManager::fetchByID($activity['item_id']);
                // If the author no longer exists, use the fallback description
                if (!$author instanceof Author) {
                    $item = $activity['fallback_description'];
                } else {
                    // If the author edited their own record
                    if ($activity['user_id'] == $activity['item_id']) {
                        $item = __(' his/her %1s', array($fallback ? __('author record') : Widget::Anchor(__('author record'), URL . '/symphony/system/authors/edit/' . $activity['item_id'])->generate()));
                    } else {
                        $item = __(' the author record for %1s', array($fallback ? $author->getFullName() : Widget::Anchor($author->getFullName(), URL . '/symphony/system/authors/edit/' . $activity['item_id'])->generate()));
                    }
                }
                break;
            case "preferences":
                $item = __(' the %s', array(Widget::Anchor(__('system preferences'), URL . '/symphony/system/preferences')->generate()));
                break;
            case "maintenance-mode":
                $item = __(' maintenance mode');
                break;
            case "extensions":
                try {
                    $about = ExtensionManager::about($activity['item_id']);
                } catch (Exception $e) {
                    $about = NULL;
                }
                if (empty($about)) {
                    $item = $activity['fallback_description'];
                } else {
                    $item = __('the %1s extension', array($about['name']));
                }
                break;
            case "login":
                $item = __(' to the back end');
                break;
            case "password-reset":
                $item = __(' his/her password');
                break;
            default:
                $item = NULL;
                break;
        }
        return $item;
    }
 /**
  *
  * Delegate fired when the extension is updated (when version changes)
  * @param string $previousVersion
  */
 public function update($previousVersion = false)
 {
     $about = ExtensionManager::about('anti_brute_force');
     return ABF::instance()->update($previousVersion, $about['version']);
 }
示例#4
0
 private function __construct()
 {
     $s = Symphony::Configuration()->get();
     $this->_settings = $s[ABF::SETTING_GROUP];
     unset($s);
     // now an array
     $validStatuses = EXTENSION_ENABLED;
     $about = ExtensionManager::about('anti_brute_force');
     $status = ExtensionManager::fetchStatus($about);
     $this->_isInstalled = in_array($validStatuses, $status);
     // only if already installed
     if ($this->_isInstalled) {
         // assure access to settings
         // fail is not settings, since this is a security software
         if (count($this->_settings) < 1) {
             throw new Exception('Can not load settings. Can not continue.');
         }
     }
 }
 public function save()
 {
     $about = array();
     if ($this->_context[0] && !is_object($this->formatter)) {
         $this->formatter = TextformatterManager::create($this->_context[0]);
     }
     if (is_object($this->formatter)) {
         $about = TextformatterManager::about($this->_context[0]);
     }
     $fields = $_POST['fields'];
     $driverAbout = ExtensionManager::about('templatedtextformatters');
     $types = $this->_driver->listTypes();
     if (strlen(trim($fields['name'])) < 1) {
         $this->_errors['name'] = __('You have to specify name for text formatter');
         return;
     }
     if ($about['templatedtextformatters-type'] && $about['templatedtextformatters-type'] != $fields['type']) {
         $this->_errors['type'] = __('Changing type of already existing formatter is not allowed');
         return;
     }
     if (!$fields['type'] || !is_array($types[$fields['type']]) || !isset($types[$fields['type']]['path'])) {
         $this->_errors['type'] = __('There is no <code>%s</code> type available', array($fields['type']));
         return;
     }
     $tplfile = $types[$fields['type']]['path'] . '/formatter.' . $fields['type'] . '.tpl';
     if (!@is_file($tplfile)) {
         $this->_errors['type'] = __('Wrong type of text formatter');
         return;
     }
     $classname = 'ttf_' . Lang::createHandle(trim($fields['name']), NULL, '_', false, true, array('@^[^a-z]+@i' => '', '/[^\\w-\\.]/i' => ''));
     $file = TEXTFORMATTERS . '/formatter.' . $classname . '.php';
     $isDuplicate = false;
     $queueForDeletion = NULL;
     if (!$about['handle'] && @is_file($file)) {
         $isDuplicate = true;
     } else {
         if ($about['handle']) {
             if ($classname != $about['handle'] && @is_file($file)) {
                 $isDuplicate = true;
             } elseif ($classname != $about['handle']) {
                 $queueForDeletion = TEXTFORMATTERS . '/formatter.' . $about['handle'] . '.php';
             }
         }
     }
     // Duplicate
     if ($isDuplicate) {
         $this->_errors['name'] = __('Text formatter with the name <code>%s</code> already exists', array($classname));
     }
     if (!empty($this->_errors)) {
         return;
     }
     $description = trim($fields['description']);
     if (empty($description)) {
         $description = __('N/A');
     }
     // https://github.com/symphonycms/symphony-2/wiki/Migration-Guide-to-2.5-for-Developers#properties
     if (is_callable(array('Symphony', 'Author'))) {
         $author = Symphony::Author();
     } else {
         $author = Administration::instance()->Author;
     }
     $tokens = array('___' . $fields['type'] . '/* CLASS NAME */' => $classname, '/* NAME */' => preg_replace('/[^\\w\\s\\.-_\\&\\;]/i', '', trim($fields['name'])), '/* AUTHOR NAME */' => self::cleanupString($author->getFullName()), '/* AUTHOR WEBSITE */' => self::cleanupString(URL), '/* AUTHOR EMAIL */' => self::cleanupString($author->get('email')), '/* RELEASE DATE */' => DateTimeObj::getGMT('c'), '/* DESCRIPTION */' => self::cleanupString($description), '/* TEMPLATEDTEXTFORMATTERS VERSION */' => $driverAbout['version'], '/* TEMPLATEDTEXTFORMATTERS TYPE */' => $fields['type']);
     if (!is_object($this->formatter)) {
         include_once $tplfile;
         $temp = 'formatter___' . $fields['type'];
         $temp = new $temp();
         if (method_exists($temp, 'ttf_tokens')) {
             $tokens = array_merge($tokens, $temp->ttf_tokens());
         }
     } else {
         if (method_exists($this->formatter, 'ttf_tokens')) {
             $tokens = array_merge($tokens, $this->formatter->ttf_tokens());
         }
     }
     $ttfShell = file_get_contents($tplfile);
     $ttfShell = str_replace(array_keys($tokens), $tokens, $ttfShell);
     $ttfShell = str_replace('/* CLASS NAME */', $classname, $ttfShell);
     // Write the file
     if (!is_writable(dirname($file)) || !($write = General::writeFile($file, $ttfShell, Symphony::Configuration()->get('write_mode', 'file')))) {
         $this->pageAlert(__('Failed to write Text Formatter source to <code>%s</code>. Please check permissions.', array($file)), Alert::ERROR);
     } else {
         if ($queueForDeletion || !$about['name']) {
             if ($queueForDeletion) {
                 General::deleteFile($queueForDeletion);
             }
             // TODO: Find a way to make formatted fields update their content
             $_SESSION['templatedtextformatters-alert'] = 'created';
             redirect(URL . '/symphony/extension/templatedtextformatters/edit/' . $classname);
         } else {
             // Update current data
             $_SESSION['templatedtextformatters-alert'] = 'saved';
             $_POST['fields']['name'] = $tokens['/* NAME */'];
             $_POST['fields']['description'] = $tokens['/* DESCRIPTION */'];
         }
     }
 }