isValidLanguage() public static method

public static isValidLanguage ( $language ) : boolean
$language
return boolean
Example #1
0
 /**
  * Get user preferred locale.
  *
  * @return string|null
  */
 protected function getPreferredLanguage()
 {
     if (!isset($_COOKIE[self::LANG_PARAM_NAME])) {
         return null;
     }
     $lang = $_COOKIE[self::LANG_PARAM_NAME];
     if (Tool::isValidLanguage($lang)) {
         return $lang;
     }
     return null;
 }
Example #2
0
 /**
  * @return string
  * @throws \Exception
  * @throws \Zend_Exception
  */
 protected function getTableName()
 {
     if (empty($this->tableName)) {
         // default
         $this->tableName = "object_" . $this->model->getClassId();
         if (!$this->model->getIgnoreLocalizedFields()) {
             $language = null;
             // check for a localized field and if they should be used for this list
             if (property_exists("\\Pimcore\\Model\\Object\\" . ucfirst($this->model->getClassName()), "localizedfields")) {
                 if ($this->model->getLocale()) {
                     if (Tool::isValidLanguage((string) $this->model->getLocale())) {
                         $language = (string) $this->model->getLocale();
                     }
                 }
                 if (!$language && \Zend_Registry::isRegistered("Zend_Locale")) {
                     $locale = \Zend_Registry::get("Zend_Locale");
                     if (Tool::isValidLanguage((string) $locale)) {
                         $language = (string) $locale;
                     }
                 }
                 if (!$language) {
                     $language = Tool::getDefaultLanguage();
                 }
                 if (!$language) {
                     throw new \Exception("No valid language/locale set. Use \$list->setLocale() to add a language to the listing, or register a global locale");
                 }
                 $this->tableName = "object_localized_" . $this->model->getClassId() . "_" . $language;
             }
         }
     }
     return $this->tableName;
 }
 /**
  * @throws \Exception
  * @param null $language
  * @return string
  */
 public function getLanguage($language = null)
 {
     if ($language) {
         return (string) $language;
     }
     // try to get the language from the registry
     try {
         $locale = \Zend_Registry::get("Zend_Locale");
         if (Tool::isValidLanguage((string) $locale)) {
             return (string) $locale;
         }
         throw new \Exception("Not supported language");
     } catch (\Exception $e) {
         return Tool::getDefaultLanguage();
     }
 }
Example #4
0
 /**
  * @return null|\Pimcore\Translate|\Pimcore\Translate\Website
  * @throws \Zend_Exception
  */
 public function initTranslation()
 {
     $translate = null;
     if (\Zend_Registry::isRegistered("Zend_Translate")) {
         $t = \Zend_Registry::get("Zend_Translate");
         // this check is necessary for the case that a document is rendered within an admin request
         // example: send test newsletter
         if ($t instanceof \Pimcore\Translate) {
             $translate = $t;
         }
     }
     if (!$translate) {
         // setup \Zend_Translate
         try {
             $locale = \Zend_Registry::get("Zend_Locale");
             $translate = new \Pimcore\Translate\Website($locale);
             if (Tool::isValidLanguage($locale)) {
                 $translate->setLocale($locale);
             } else {
                 \Logger::error("You want to use an invalid language which is not defined in the system settings: " . $locale);
                 // fall back to the first (default) language defined
                 $languages = Tool::getValidLanguages();
                 if ($languages[0]) {
                     \Logger::error("Using '" . $languages[0] . "' as a fallback, because the language '" . $locale . "' is not defined in system settings");
                     $translate = new \Pimcore\Translate\Website($languages[0]);
                     // reinit with new locale
                     $translate->setLocale($languages[0]);
                 } else {
                     throw new \Exception("You have not defined a language in the system settings (Website -> Frontend-Languages), please add at least one language.");
                 }
             }
             // register the translator in \Zend_Registry with the key "\Zend_Translate" to use the translate helper for \Zend_View
             \Zend_Registry::set("Zend_Translate", $translate);
         } catch (\Exception $e) {
             \Logger::error("initialization of Pimcore_Translate failed");
             \Logger::error($e);
         }
     }
     return $translate;
 }
 public function gridGetColumnConfigAction()
 {
     if ($this->getParam("id")) {
         $class = Object\ClassDefinition::getById($this->getParam("id"));
     } else {
         if ($this->getParam("name")) {
             $class = Object\ClassDefinition::getByName($this->getParam("name"));
         }
     }
     $gridType = "search";
     if ($this->getParam("gridtype")) {
         $gridType = $this->getParam("gridtype");
     }
     $objectId = $this->getParam("objectId");
     if ($objectId) {
         $fields = Object\Service::getCustomGridFieldDefinitions($class->getId(), $objectId);
     }
     if (!$fields) {
         $fields = $class->getFieldDefinitions();
     }
     $types = array();
     if ($this->getParam("types")) {
         $types = explode(",", $this->getParam("types"));
     }
     // grid config
     $gridConfig = array();
     if ($objectId) {
         $configFiles["configFileClassUser"] = PIMCORE_CONFIGURATION_DIRECTORY . "/object/grid/" . $this->getParam("objectId") . "_" . $class->getId() . "-user_" . $this->getUser()->getId() . ".psf";
         $configFiles["configFileUser"] = PIMCORE_CONFIGURATION_DIRECTORY . "/object/grid/" . $this->getParam("objectId") . "-user_" . $this->getUser()->getId() . ".psf";
         foreach ($configFiles as $configFile) {
             if (is_file($configFile)) {
                 $gridConfig = Tool\Serialize::unserialize(file_get_contents($configFile));
                 if (is_array($gridConfig) && array_key_exists("classId", $gridConfig)) {
                     if ($gridConfig["classId"] == $class->getId()) {
                         break;
                     } else {
                         $gridConfig = array();
                     }
                 } else {
                     break;
                 }
             }
         }
     }
     $localizedFields = array();
     $objectbrickFields = array();
     foreach ($fields as $key => $field) {
         if ($field instanceof Object\ClassDefinition\Data\Localizedfields) {
             $localizedFields[] = $field;
         } else {
             if ($field instanceof Object\ClassDefinition\Data\Objectbricks) {
                 $objectbrickFields[] = $field;
             }
         }
     }
     $availableFields = array();
     $systemColumns = array("id", "fullpath", "published", "creationDate", "modificationDate", "filename", "classname");
     if (empty($gridConfig)) {
         $count = 0;
         if (!$this->getParam("no_system_columns")) {
             $vis = $class->getPropertyVisibility();
             foreach ($systemColumns as $sc) {
                 $key = $sc;
                 if ($key == "fullpath") {
                     $key = "path";
                 }
                 if (empty($types) && ($vis[$gridType][$key] || $gridType == "all")) {
                     $availableFields[] = array("key" => $sc, "type" => "system", "label" => $sc, "position" => $count);
                     $count++;
                 }
             }
         }
         $includeBricks = !$this->getParam("no_brick_columns");
         foreach ($fields as $key => $field) {
             if ($field instanceof Object\ClassDefinition\Data\Localizedfields) {
                 foreach ($field->getFieldDefinitions() as $fd) {
                     if (empty($types) || in_array($fd->getFieldType(), $types)) {
                         $fieldConfig = $this->getFieldGridConfig($fd, $gridType, $count);
                         if (!empty($fieldConfig)) {
                             $availableFields[] = $fieldConfig;
                             $count++;
                         }
                     }
                 }
             } else {
                 if ($field instanceof Object\ClassDefinition\Data\Objectbricks && $includeBricks) {
                     if (in_array($field->getFieldType(), $types)) {
                         $fieldConfig = $this->getFieldGridConfig($field, $gridType, $count);
                         if (!empty($fieldConfig)) {
                             $availableFields[] = $fieldConfig;
                             $count++;
                         }
                     } else {
                         $allowedTypes = $field->getAllowedTypes();
                         if (!empty($allowedTypes)) {
                             foreach ($allowedTypes as $t) {
                                 $brickClass = Object\Objectbrick\Definition::getByKey($t);
                                 $brickFields = $brickClass->getFieldDefinitions();
                                 if (!empty($brickFields)) {
                                     foreach ($brickFields as $bf) {
                                         $fieldConfig = $this->getFieldGridConfig($bf, $gridType, $count, false, $t . "~");
                                         if (!empty($fieldConfig)) {
                                             $availableFields[] = $fieldConfig;
                                             $count++;
                                         }
                                     }
                                 }
                             }
                         }
                     }
                 } else {
                     if (empty($types) || in_array($field->getFieldType(), $types)) {
                         $fieldConfig = $this->getFieldGridConfig($field, $gridType, $count, !empty($types));
                         if (!empty($fieldConfig)) {
                             $availableFields[] = $fieldConfig;
                             $count++;
                         }
                     }
                 }
             }
         }
     } else {
         $savedColumns = $gridConfig['columns'];
         foreach ($savedColumns as $key => $sc) {
             if (!$sc['hidden']) {
                 if (in_array($key, $systemColumns)) {
                     $colConfig = array("key" => $key, "type" => "system", "label" => $key, "position" => $sc['position']);
                     if (isset($sc['width'])) {
                         $colConfig['width'] = $sc['width'];
                     }
                     $availableFields[] = $colConfig;
                 } else {
                     $keyParts = explode("~", $key);
                     if (substr($key, 0, 1) == "~") {
                         // not needed for now
                         //                            $type = $keyParts[1];
                         //                            $field = $keyParts[2];
                         //                            $keyid = $keyParts[3];
                     } else {
                         if (count($keyParts) > 1) {
                             $brick = $keyParts[0];
                             $key = $keyParts[1];
                             $brickClass = Object\Objectbrick\Definition::getByKey($brick);
                             $fd = $brickClass->getFieldDefinition($key);
                             if (!empty($fd)) {
                                 $fieldConfig = $this->getFieldGridConfig($fd, $gridType, $sc['position'], true, $brick . "~");
                                 if (!empty($fieldConfig)) {
                                     if (isset($sc['width'])) {
                                         $fieldConfig['width'] = $sc['width'];
                                     }
                                     $availableFields[] = $fieldConfig;
                                 }
                             }
                         } else {
                             $fd = $class->getFieldDefinition($key);
                             //if not found, look for localized fields
                             if (empty($fd)) {
                                 foreach ($localizedFields as $lf) {
                                     $fd = $lf->getFieldDefinition($key);
                                     if (!empty($fd)) {
                                         break;
                                     }
                                 }
                             }
                             if (!empty($fd)) {
                                 $fieldConfig = $this->getFieldGridConfig($fd, $gridType, $sc['position'], true);
                                 if (!empty($fieldConfig)) {
                                     if (isset($sc['width'])) {
                                         $fieldConfig['width'] = $sc['width'];
                                     }
                                     $availableFields[] = $fieldConfig;
                                 }
                             }
                         }
                     }
                 }
             }
         }
     }
     usort($availableFields, function ($a, $b) {
         if ($a["position"] == $b["position"]) {
             return 0;
         }
         return $a["position"] < $b["position"] ? -1 : 1;
     });
     $config = \Pimcore\Config::getSystemConfig();
     $frontendLanguages = Tool\Admin::reorderWebsiteLanguages(\Pimcore\Tool\Admin::getCurrentUser(), $config->general->validLanguages);
     if ($frontendLanguages) {
         $language = explode(',', $frontendLanguages)[0];
     } else {
         $language = $this->getLanguage();
     }
     if (!Tool::isValidLanguage($language)) {
         $validLanguages = Tool::getValidLanguages();
         $language = $validLanguages[0];
     }
     if (!empty($gridConfig) && !empty($gridConfig['language'])) {
         $language = $gridConfig['language'];
     }
     $this->_helper->json(array("sortinfo" => $gridConfig['sortinfo'], "language" => $language, "availableFields" => $availableFields, "onlyDirectChildren" => $gridConfig['onlyDirectChildren'], "pageSize" => $gridConfig['pageSize']));
 }
Example #6
0
 /**
  * @param $language
  * @param bool $useFrontendLanguages
  * @return $this
  * @throws \Zend_Exception
  */
 public function setLanguage($language, $useFrontendLanguages = false)
 {
     if (\Zend_Locale::isLocale($language, true)) {
         $locale = new \Zend_Locale($language);
     } else {
         $locale = new \Zend_Locale("en");
     }
     if ($useFrontendLanguages) {
         // check if given language is a valid language
         if (!Tool::isValidLanguage($locale)) {
             return;
         }
         \Zend_Registry::set("Zend_Locale", $locale);
     } else {
         // check if given language is installed if not => skip
         if (!in_array((string) $locale->getLanguage(), AdminTool::getLanguages())) {
             return;
         }
         \Zend_Registry::set("Zend_Locale", $locale);
         if (\Zend_Registry::isRegistered("Zend_Translate")) {
             $t = \Zend_Registry::get("Zend_Translate");
             if ((string) $locale != (string) $t->getLocale()) {
                 $languageFile = AdminTool::getLanguageFile($locale);
                 $t->addTranslation($languageFile, $locale);
                 $t->setLocale($locale);
             }
         }
     }
     $this->language = (string) $locale;
     $this->view->language = $this->getLanguage();
     return $this;
 }
Example #7
0
 /**
  * @param $locale
  * @param $messageId
  * @return mixed
  */
 protected function createEmptyTranslation($locale, $messageId)
 {
     $messageIdOriginal = $messageId;
     $messageId = mb_strtolower($messageId);
     // don't create translation if it's just empty
     if (array_key_exists($messageId, $this->_translate[$locale])) {
         return;
     }
     $class = self::getBackend();
     // no translation found create key
     if (Tool::isValidLanguage($locale)) {
         try {
             $t = $class::getByKey($messageId);
             $t->addTranslation($locale, "");
         } catch (\Exception $e) {
             $t = new $class();
             $t->setKey($messageId);
             // add all available languages
             $availableLanguages = (array) Tool::getValidLanguages();
             foreach ($availableLanguages as $language) {
                 $t->addTranslation($language, "");
             }
         }
         $t->save();
     }
     // put it into the store, otherwise when there are more calls to the same key during one process
     // the key would be inserted/updated several times, what would be redundant
     $this->_translate[$locale][$messageId] = $messageIdOriginal;
 }
Example #8
0
 public function wordExportAction()
 {
     //error_reporting(E_ERROR);
     //ini_set("display_errors", "off");
     $id = $this->getParam("id");
     $data = \Zend_Json::decode($this->getParam("data"));
     $source = $this->getParam("source");
     $exportFile = PIMCORE_SYSTEM_TEMP_DIRECTORY . "/" . $id . ".html";
     if (!is_file($exportFile)) {
         /*file_put_contents($exportFile, '<!DOCTYPE html>' . "\n" . '<html>
               <head>
                   <style type="text/css">' . file_get_contents(PIMCORE_PATH . "/static/css/word-export.css") . '</style>
               </head>
               <body>
           ');*/
         File::put($exportFile, '<style type="text/css">' . file_get_contents(PIMCORE_PATH . "/static6/css/word-export.css") . '</style>');
     }
     foreach ($data as $el) {
         try {
             $element = Element\Service::getElementById($el["type"], $el["id"]);
             $output = "";
             // check supported types (subtypes)
             if (!in_array($element->getType(), array("page", "snippet", "email", "object"))) {
                 continue;
             }
             if ($element instanceof Element\ElementInterface) {
                 $output .= '<h1 class="element-headline">' . ucfirst($element->getType()) . " - " . $element->getFullPath() . ' (ID: ' . $element->getId() . ')</h1>';
             }
             if ($element instanceof Document\PageSnippet) {
                 if ($element instanceof Document\Page) {
                     $structuredDataEmpty = true;
                     $structuredData = '
                         <table border="1" cellspacing="0" cellpadding="5">
                             <tr>
                                 <td colspan="2"><span style="color:#cc2929;font-weight: bold;">Structured Data</span></td>
                             </tr>
                     ';
                     if ($element->getTitle()) {
                         $structuredData .= '<tr>
                                 <td><span style="color:#cc2929;">Title</span></td>
                                 <td>' . $element->getTitle() . '&nbsp;</td>
                             </tr>';
                         $structuredDataEmpty = false;
                     }
                     if ($element->getDescription()) {
                         $structuredData .= '<tr>
                                 <td><span style="color:#cc2929;">Description</span></td>
                                 <td>' . $element->getDescription() . '&nbsp;</td>
                             </tr>';
                         $structuredDataEmpty = false;
                     }
                     if ($element->getKeywords()) {
                         $structuredData .= '<tr>
                                 <td><span style="color:#cc2929;">Keywords</span></td>
                                 <td>' . $element->getKeywords() . '&nbsp;</td>
                             </tr>';
                         $structuredDataEmpty = false;
                     }
                     if ($element->getProperty("navigation_name")) {
                         $structuredData .= '<tr>
                                 <td><span style="color:#cc2929;">Navigation</span></td>
                                 <td>' . $element->getProperty("navigation_name") . '&nbsp;</td>
                             </tr>';
                         $structuredDataEmpty = false;
                     }
                     $structuredData .= '</table>';
                     if (!$structuredDataEmpty) {
                         $output .= $structuredData;
                     }
                 }
                 // we need to set the parameter "pimcore_admin" here to be able to render unpublished documents
                 $reqBak = $_REQUEST;
                 $_REQUEST["pimcore_admin"] = true;
                 $html = Document\Service::render($element, array(), false);
                 $_REQUEST = $reqBak;
                 // set the request back to original
                 $html = preg_replace("@</?(img|meta|div|section|aside|article|body|bdi|bdo|canvas|embed|footer|head|header|html)([^>]+)?>@", "", $html);
                 $html = preg_replace('/<!--(.*)-->/Uis', '', $html);
                 include_once "simple_html_dom.php";
                 $dom = str_get_html($html);
                 if ($dom) {
                     // remove containers including their contents
                     $elements = $dom->find("form,script,style,noframes,noscript,object,area,mapm,video,audio,iframe,textarea,input,select,button,");
                     if ($elements) {
                         foreach ($elements as $el) {
                             $el->outertext = "";
                         }
                     }
                     $clearText = function ($string) {
                         $string = str_replace("\r\n", "", $string);
                         $string = str_replace("\n", "", $string);
                         $string = str_replace("\r", "", $string);
                         $string = str_replace("\t", "", $string);
                         $string = preg_replace('/&[a-zA-Z0-9]+;/', '', $string);
                         // remove html entities
                         $string = preg_replace('#[ ]+#', '', $string);
                         return $string;
                     };
                     // remove empty tags (where it matters)
                     $elements = $dom->find("a, li");
                     if ($elements) {
                         foreach ($elements as $el) {
                             $string = $clearText($el->plaintext);
                             if (empty($string)) {
                                 $el->outertext = "";
                             }
                         }
                     }
                     // replace links => links get [Linktext]
                     $elements = $dom->find("a");
                     if ($elements) {
                         foreach ($elements as $el) {
                             $string = $clearText($el->plaintext);
                             if (!empty($string)) {
                                 $el->outertext = "[" . $el->plaintext . "]";
                             } else {
                                 $el->outertext = "";
                             }
                         }
                     }
                     $html = $dom->save();
                     $dom->clear();
                     unset($dom);
                     // force closing tags (simple_html_dom doesn't seem to support this anymore)
                     $doc = new \DOMDocument();
                     libxml_use_internal_errors(true);
                     $doc->loadHTML('<?xml encoding="UTF-8"><article>' . $html . "</article>");
                     libxml_clear_errors();
                     $html = $doc->saveHTML();
                     $bodyStart = strpos($html, "<body>") + 6;
                     $bodyEnd = strpos($html, "</body>");
                     if ($bodyStart && $bodyEnd) {
                         $html = substr($html, $bodyStart, $bodyEnd - $bodyStart);
                     }
                     $output .= $html;
                 }
             } else {
                 if ($element instanceof Object\Concrete) {
                     $hasContent = false;
                     if ($fd = $element->getClass()->getFieldDefinition("localizedfields")) {
                         $definitions = $fd->getFielddefinitions();
                         $locale = new \Zend_Locale(str_replace("-", "_", $source));
                         if (Tool::isValidLanguage((string) $locale)) {
                             $locale = (string) $locale;
                         } else {
                             $locale = $locale->getLanguage();
                         }
                         $output .= '
                         <table border="1" cellspacing="0" cellpadding="2">
                             <tr>
                                 <td colspan="2"><span style="color:#cc2929;font-weight: bold;">Localized Data</span></td>
                             </tr>
                     ';
                         foreach ($definitions as $definition) {
                             // check allowed datatypes
                             if (!in_array($definition->getFieldtype(), array("input", "textarea", "wysiwyg"))) {
                                 continue;
                             }
                             $content = $element->{"get" . ucfirst($definition->getName())}($locale);
                             if (!empty($content)) {
                                 $output .= '
                             <tr>
                                 <td><span style="color:#cc2929;">' . $definition->getTitle() . ' (' . $definition->getName() . ')<span></td>
                                 <td>' . $content . '&nbsp;</td>
                             </tr>
                             ';
                                 $hasContent = true;
                             }
                         }
                         $output .= '</table>';
                     }
                     if (!$hasContent) {
                         $output = "";
                         // there's no content in the object, so reset all contents and do not inclide it in the export
                     }
                 }
             }
             // append contents
             if (!empty($output)) {
                 $f = fopen($exportFile, "a+");
                 fwrite($f, $output);
                 fclose($f);
             }
         } catch (\Exception $e) {
             \Logger::error("Word Export: " . $e->getMessage());
             \Logger::error($e);
         }
     }
     $this->_helper->json(array("success" => true));
 }