Пример #1
0
 /**
  * Get main select builder.
  *
  * @return Builder
  */
 public function getSource()
 {
     $builder = new Builder();
     $builder->from('Core\\Model\\LanguageTranslation')->where('language_id = ' . $this->_language->getId());
     $showUntranslated = (bool) $this->getDI()->getRequest()->get('untranslated', 'int', 0);
     if ($showUntranslated) {
         $builder->where("original = translated");
     }
     if ($search = $this->getDI()->getRequest()->get('search')) {
         $builder->where("original LIKE '%{$search}%'")->orWhere("translated LIKE '%{$search}%'");
     }
     return $builder;
 }
Пример #2
0
 /**
  * This action is executed before execute any action in the application.
  *
  * @param PhalconEvent $event      Event object.
  * @param Dispatcher   $dispatcher Dispatcher object.
  *
  * @return mixed
  */
 public function beforeDispatch(PhEvent $event, Dispatcher $dispatcher)
 {
     $di = $this->getDI();
     $cookie = $di->getCookie();
     $session = $di->getSession();
     $config = $di->getConfig();
     $languageCode = '';
     if ($di->get('app')->isConsole()) {
         return;
     }
     // Detect language from cookie
     if ($cookie->has('languageCode')) {
         $languageCode = $cookie->get('languageCode')->getValue();
     } else {
         // Get default language from language model
         $languageCode = LanguageModel::findFirst(['default = :isdefault: AND status = :enable:', 'bind' => ['isdefault' => LanguageModel::IS_DEFAULT, 'enable' => LanguageModel::STATUS_ENABLE]])->code;
     }
     // Set language code to session
     if ($session->has('languageCode') && $session->get('languageCode') != $languageCode || !$session->has('languageCode')) {
         $session->set('languageCode', $languageCode);
     }
     $messages = [];
     $directory = $di->get('registry')->directories->modules . ucfirst($dispatcher->getModuleName()) . '/Lang/' . $languageCode . '/' . strtolower($dispatcher->getControllerName());
     $extension = '.php';
     if (file_exists($directory . $extension)) {
         require $directory . $extension;
     }
     // add default core lang package
     require $di->get('registry')->directories->modules . self::DEFAULT_LANG_PACK . '/Lang/' . $languageCode . '/default.php';
     $translate = new PhTranslateArray(['content' => array_merge($messages, $default)]);
     $di->set('lang', $translate);
     return !$event->isStopped();
 }
Пример #3
0
 /**
  * Initialize form.
  *
  * @return void
  */
 public function initialize()
 {
     $this->setDescription('This menu item will be available under menu or parent menu item.');
     $content = $this->addContentFieldSet()->addText('title')->addSelect('target', 'Target', 'Link type', [null => 'Default link', MenuItem::ITEM_TARGET_BLANK => 'Opens the linked document in a new window or tab', MenuItem::ITEM_TARGET_PARENT => 'Opens the linked document in the parent frame', MenuItem::ITEM_TARGET_TOP => 'Opens the linked document in the full body of the window'])->addRadio('url_type', 'Select url type', null, [0 => 'Url', 1 => 'System page'])->addText('url', 'Url', 'Do not type url with starting slash... Example: "somepage/url/to?param=1"')->addText('page', 'Page', 'Start typing to see pages variants.', null, [], ['data-link' => $this->getDI()->getUrl()->get('admin/pages/suggest'), 'data-target' => '#page_id', 'data-widget' => 'autocomplete', 'autocomplete' => 'off'])->addTextArea('onclick', 'OnClick', 'Type JS action that will be performed when this menu item is selected.')->addCkEditor('tooltip')->addSelect('tooltip_position', 'Tooltip position', null, [MenuItem::ITEM_TOOLTIP_POSITION_TOP => 'Top', MenuItem::ITEM_TOOLTIP_POSITION_BOTTOM => 'Bottom', MenuItem::ITEM_TOOLTIP_POSITION_LEFT => 'Left', MenuItem::ITEM_TOOLTIP_POSITION_RIGHT => 'Right'])->addRemoteFile('icon', 'Select icon')->addSelect('icon_position', 'Icon position', null, [MenuItem::ITEM_ICON_POSITION_LEFT => 'Left', MenuItem::ITEM_ICON_POSITION_RIGHT => 'Right'])->addMultiSelect('languages', 'Languages', 'Choose the language in which the menu item will be displayed.
                 If no one selected - will be displayed at all.', Language::find(), null, ['using' => ['language', 'name']])->addMultiSelect('roles', 'Roles', 'If no value is selected, will be allowed to all (also as all selected).', Role::find(), null, ['using' => ['id', 'name']])->addCheckbox('is_enabled', 'Is enabled', null, 1, true, false)->addHidden('page_id')->addHidden('menu_id')->addHidden('parent_id');
     $this->_setValidation($content);
 }
Пример #4
0
 /**
  * Get language options.
  *
  * @return array
  */
 protected function _getLanguageOptions()
 {
     $languages = ['auto' => 'Auto detect'];
     foreach (Language::find() as $language) {
         $languages[$language->language] = $language->name;
     }
     return $languages;
 }
Пример #5
0
 /**
  * Check language parameter.
  *
  * @return void
  */
 protected function _checkLanguage()
 {
     $language = preg_replace("/[^A-Za-z0-9?!]/", '', $this->request->get('lang', 'string'));
     if ($language && ($languageObject = Language::findFirst("language = '" . $language . "'"))) {
         $this->di->get('session')->set('language', $languageObject->language);
         $this->di->get('session')->set('locale', $languageObject->locale);
     }
 }
Пример #6
0
 /**
  * Return package as string, package metadata.
  *
  * @param array $params Some additional params.
  *
  * @return string
  */
 public function toJson(array $params = [])
 {
     $data = $this->getDefaultMetadata();
     // Get widgets data if this package is module.
     if ($this->type == Manager::PACKAGE_TYPE_MODULE) {
         /**
          * Widgets data.
          */
         $widgets = Widget::findByModule($this->name);
         foreach ($widgets as $widget) {
             $data['widgets'][] = ['name' => $widget->name, 'module' => $this->name, 'description' => $widget->description, 'is_paginated' => $widget->is_paginated, 'is_acl_controlled' => $widget->is_acl_controlled, 'admin_form' => $widget->admin_form, 'enabled' => (bool) $widget->enabled];
         }
         /**
          * Translations data.
          */
         if (!empty($params['withTranslations'])) {
             foreach (Language::find() as $language) {
                 $translations = $language->toTranslationsArray([$this->name]);
                 if (!empty($translations['content'])) {
                     $data['i18n'][] = $translations;
                 }
             }
         }
     } else {
         unset($data['widgets']);
     }
     // Check widget module.
     $packageData = $this->getData();
     if (!empty($packageData['module'])) {
         $data['module'] = $packageData['module'];
     }
     // Get events.
     if ($this->type == Manager::PACKAGE_TYPE_MODULE || $this->type == Manager::PACKAGE_TYPE_PLUGIN) {
         $packageData = $this->getData();
         if (!empty($packageData) && !empty($packageData['events'])) {
             $data['events'] = $packageData['events'];
         }
     }
     // Check dependencies.
     if (!empty($this->_dependenciesData)) {
         $data['dependencies'] = $this->_dependenciesData;
     } else {
         unset($data['dependencies']);
     }
     return json_encode($data, JSON_PRETTY_PRINT);
 }
Пример #7
0
 /**
  * Create action.
  *
  * @return void
  *
  * @Route("/create", methods={"GET", "POST"}, name="admin-category-create")
  */
 public function createAction()
 {
     $formData = [];
     $message = '';
     if ($this->request->hasPost('fsubmit')) {
         $formData = array_merge($formData, $this->request->getPost());
         if ($formData['root'] > 1) {
             $root = Category::findFirst($formData['root']);
         } else {
             $root = self::checkRoot();
         }
         // Create category
         $myCategory = new Category();
         $myCategory->assign(['iconpath' => $formData['iconpath'], 'status' => $formData['status'], 'root' => $formData['root']]);
         // Create category languages
         $langPacks = [];
         // Create default language record when chosen language != default language.
         if ($formData['lcode'] != $this->config->global->defaultLanguage) {
             $langPacks[0] = new CategoryLang();
             $langPacks[0]->name = 'n/a';
             $langPacks[0]->lcode = $this->config->global->defaultLanguage;
         }
         // Create selected language
         $langPacks[1] = new CategoryLang();
         $langPacks[1]->assign(['lcode' => $formData['lcode'], 'name' => $formData['name'], 'description' => $formData['description'], 'seokeyword' => $formData['seokeyword'], 'seodescription' => $formData['seodescription']]);
         // Add related language to category
         $myCategory->lang = $langPacks;
         if ($myCategory->appendTo($root)) {
             $formData = [];
             $this->flash->success(str_replace('###name###', $myCategory->getOneLangBySession()->name, $this->lang->_('message-create-category-success')));
         } else {
             foreach ($myCategory->getMessages() as $msg) {
                 $message .= $this->lang->_($msg->getMessage()) . '<br />';
             }
             $this->flash->error($message);
         }
     }
     $this->bc->add($this->lang->_('title-index'), 'admin/category');
     $this->bc->add($this->lang->_('title-create'), 'admin/category/create');
     $this->view->setVars(['bc' => $this->bc->generate(), 'formData' => $formData, 'statusList' => Category::getStatusList(), 'categories' => Category::find(['order' => 'lft']), 'languages' => Language::find()]);
 }
Пример #8
0
 public function getCountryCode($languageCode)
 {
     return Language::findFirstByCode((string) $languageCode)->countrycode;
 }
Пример #9
0
 /**
  * Model validation.
  *
  * @return bool
  */
 public function validation()
 {
     $condition = "language = '" . $this->language . "' AND locale = '" . $this->locale . "'";
     if (!empty($this->id)) {
         $condition .= "AND id != " . $this->id;
     }
     $isValid = !(bool) Language::findFirst($condition);
     if (!$isValid) {
         $this->appendMessage(new Message(sprintf('Language "%s" with locale "%s" already exists.', $this->language, $this->locale)));
     }
     return $isValid;
 }
Пример #10
0
 /**
  * Init locale.
  *
  * @param DI     $di     Dependency injection.
  * @param Config $config Dependency injection.
  *
  * @return void
  */
 protected function _initI18n(DI $di, Config $config)
 {
     if ($di->get('app')->isConsole()) {
         return;
     }
     $languageObject = null;
     if (!$di->get('session')->has('language')) {
         /** @var Language $languageObject */
         if ($config->installed) {
             $language = Settings::getSetting('system_default_language');
             if ($language == 'auto') {
                 $locale = \Locale::acceptFromHttp($_SERVER["HTTP_ACCEPT_LANGUAGE"]);
                 $languageObject = Language::findFirst("language = '" . $locale . "' OR locale = '" . $locale . "'");
             } else {
                 $languageObject = Language::findFirst("language = '" . $language . "'");
             }
         }
         if ($languageObject) {
             $di->get('session')->set('language', $languageObject->language);
             $di->get('session')->set('locale', $languageObject->locale);
         } else {
             $di->get('session')->set('language', Config::CONFIG_DEFAULT_LANGUAGE);
             $di->get('session')->set('locale', Config::CONFIG_DEFAULT_LOCALE);
         }
     }
     $language = $di->get('session')->get('language');
     $translate = null;
     if (!$config->application->debug || !$config->installed) {
         $messages = [];
         $directory = $config->application->languages->cacheDir;
         $extension = ".php";
         if (file_exists($directory . $language . $extension)) {
             require $directory . $language . $extension;
         } else {
             if (file_exists($directory . Config::CONFIG_DEFAULT_LANGUAGE . $extension)) {
                 // fallback to default
                 require $directory . Config::CONFIG_DEFAULT_LANGUAGE . $extension;
             }
         }
         $translate = new TranslateArray(["content" => $messages]);
     } else {
         if (!$languageObject) {
             $languageObject = Language::findFirst(['conditions' => 'language = :language:', 'bind' => ["language" => $language]]);
             if (!$languageObject) {
                 $languageObject = Language::findFirst("language = '" . Config::CONFIG_DEFAULT_LANGUAGE . "'");
             }
         }
         $translate = new TranslationDb($di, $languageObject->getId(), new LanguageTranslation());
     }
     $di->set('i18n', $translate);
 }
Пример #11
0
 /**
  * Check and set icon for language.
  *
  * @param Language $language Language object.
  * @param FileForm $form     Form object.
  *
  * @return void
  */
 protected function _setLanguageIcon($language, $form)
 {
     // Upload language icon.
     if (!$form->hasFiles()) {
         return;
     }
     if (!is_dir(PUBLIC_PATH . '/' . Language::LANGUAGE_ICON_LOCATION)) {
         mkdir(PUBLIC_PATH . '/' . Language::LANGUAGE_ICON_LOCATION, 766, true);
     }
     $files = $form->getFiles();
     $iconPath = Language::LANGUAGE_ICON_LOCATION . $language->language . ' . ' . pathinfo($files[0]->getName(), PATHINFO_EXTENSION);
     $fullIconPath = PUBLIC_PATH . '/' . $iconPath;
     if (file_exists($fullIconPath)) {
         @unlink($fullIconPath);
     }
     $files[0]->moveTo($fullIconPath);
     $language->icon = $iconPath;
     $language->save();
 }
Пример #12
0
 /**
  * Upload package action.
  *
  * @return void
  *
  * @Route("/upload", methods={"GET", "POST"}, name="admin-packages-upload")
  */
 public function uploadAction()
 {
     $this->view->form = $form = new UploadForm();
     if (!$this->request->isPost() || !$form->isValid()) {
         return;
     }
     $packageManager = new Manager(Package::find());
     $packageManager->clearTempDirectory();
     $packageFile = $this->request->getUploadedFiles();
     if (count($packageFile) == 1 && $packageFile[0]->getSize() != 0) {
         $filename = $packageManager->getTempDirectory() . 'uploaded.zip';
         $packageFile[0]->moveTo($filename);
         try {
             // Install package - check dep, copy files, get manifest, etc.
             $manifest = $packageManager->installPackage($filename);
             // Create package database object.
             if (!$manifest->isUpdate) {
                 $package = new Package();
                 $package->assign($manifest->toArray());
                 $package->save();
                 $this->_enablePackageConfig($package);
                 $this->_updateMetadata();
                 // install package dependencies
                 if ($manifest->get('dependencies')) {
                     $dependencies = $manifest->get('dependencies');
                     foreach ($dependencies as $dependency) {
                         $needPackage = $this->_getPackage($dependency['type'], $dependency['name']);
                         if ($needPackage) {
                             $packageDependency = new PackageDependency();
                             $packageDependency->package_id = $package->id;
                             $packageDependency->dependency_id = $needPackage->id;
                             $packageDependency->save();
                         }
                     }
                 }
             }
             if ($manifest->type == Manager::PACKAGE_TYPE_MODULE) {
                 // Run module install script.
                 $newPackageVersion = $packageManager->runInstallScript($manifest);
                 $this->_clearCache();
                 // Install translations if possible.
                 if (!empty($manifest->i18n)) {
                     foreach ($manifest->i18n as $languageData) {
                         Language::parseImportData($this->getDI(), $languageData->toArray());
                     }
                 }
                 // Register module in system to perform database update.
                 $modules = $this->getDI()->get('registry')->modules;
                 $loader = $this->getDI()->get('loader');
                 $modules[] = $manifest->name;
                 $moduleName = ucfirst($manifest->name);
                 // Register namespaces.
                 $loader->registerNamespaces([$moduleName => $this->getDI()->get('registry')->directories->modules . $moduleName], true);
                 $loader->register();
                 // Register module in app
                 $this->getDI()->get('app')->registerModules([$manifest->name => $moduleName . '\\Bootstrap']);
                 $this->getDI()->get('registry')->modules = $modules;
                 // Update database.
                 $schema = new Schema($this->getDI());
                 $schema->updateDatabase();
             }
             if ($manifest->isUpdate) {
                 $this->flash->success('Package updated to version ' . $newPackageVersion . '!');
             } else {
                 $this->flash->success('Package installed!');
             }
         } catch (Exception $e) {
             $this->flash->error($e->getMessage());
         }
     } else {
         $this->flash->notice('Please, select zip file...');
     }
 }
Пример #13
0
    /**
     * Admin action for editing widget options through admin panel.
     *
     * @return CoreForm
     */
    public function adminAction()
    {
        $form = new CoreForm();
        $form->addText('title');
        // Adding additional html for language selector support.
        $languageSelectorHtml = '
                <style type="text/css">
                    form .form_elements > div{
                        min-height: auto !important;
                        padding-top: 0px !important;
                    }

                    form .form_elements > div:nth-last-child(2){
                        padding-top: 10px !important;
                    }
                </style>
                <script type="text/javascript">
                     var defaultLanguage = "%s";
                     $(document).ready(function(){
                        $("#html_block_language").change(function(){
                            $("#cke_html_"+$(this).val()).closest(".form_element_container").show();
                            $(".cke").not("#cke_html_"+$(this).val()).closest(".form_element_container").hide();
                        });

                        // Hide inactive.
                        $("textarea").not("#html_"+defaultLanguage).closest(".form_element_container").hide();
                        setTimeout(
                            function(){
                                $(".cke").not("#cke_html_"+defaultLanguage).closest(".form_element_container").hide();
                            }, 200);
                    });
                </script>
                <div class="form_element_container" style="float: left;">
                    <div class="form_label">
                        <label for="title">%s</label>
                    </div>
                    <div class="form_element">
                        <select id="html_block_language" style="width: 120px;">
                            %s
                        </select>
                    </div>
                </div>
                ';
        // Creating languages boxes.
        $languages = Language::find();
        $languageHtmlItems = '';
        $defaultLanguage = Settings::getSetting('system_default_language', 'en');
        if ($defaultLanguage == 'auto') {
            $defaultLanguage = 'en';
        }
        $elements = [];
        foreach ($languages as $language) {
            $selectedLanguage = '';
            if ($language->language == $defaultLanguage) {
                $selectedLanguage = 'selected="selected"';
            }
            $elementName = 'html_' . $language->language;
            $elements[$elementName] = 'HTML (' . strtoupper($language->language) . ')';
            $languageHtmlItems .= '<option ' . $selectedLanguage . ' value=' . $language->language . '>' . $language->name . '</option>';
        }
        $languageSelectorHtml = sprintf($languageSelectorHtml, $defaultLanguage, $this->di->get('i18n')->_('HTML block, for:'), $languageHtmlItems);
        // Adding created html to form.
        $form->addHtml('html_language', $languageSelectorHtml);
        foreach ($elements as $elementName => $elementTitle) {
            $form->addCkEditor($elementName, $elementTitle);
        }
        $form->addHtml('separator');
        return $form;
    }