/** * 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; }
/** * 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(); }
/** * 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); }
/** * Get language options. * * @return array */ protected function _getLanguageOptions() { $languages = ['auto' => 'Auto detect']; foreach (Language::find() as $language) { $languages[$language->language] = $language->name; } return $languages; }
/** * 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); } }
/** * 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); }
/** * 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()]); }
public function getCountryCode($languageCode) { return Language::findFirstByCode((string) $languageCode)->countrycode; }
/** * 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; }
/** * 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); }
/** * 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(); }
/** * 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...'); } }
/** * 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; }