/**
  * Test...
  *
  * @covers JLanguage::hasKey
  * @todo Implement testHasKey().
  *
  * @return void
  */
 public function testHasKey()
 {
     // Key doesn't exist, returns false
     $this->assertFalse($this->object->hasKey('com_admin.key'));
     // Remove the following lines when you implement this test.
     $this->markTestIncomplete('This test has not been implemented yet.');
 }
 /**
  * Method to run this controller.
  *
  * @throws \Exception
  * @return  mixed
  */
 protected function doExecute()
 {
     $db = $this->model->getDb();
     $this->useTransaction ? $db->transactionStart(true) : null;
     try {
         $this->preSaveHook();
         $validData = $this->doSave();
         // Invoke the postSave method to allow for the child class to access the model.
         $this->postSaveHook($this->model, $validData);
         // Set success message
         $this->setMessage(\JText::_(($this->lang->hasKey(strtoupper($this->option) . ($this->recordId == 0 && $this->app->isSite() ? '_SUBMIT' : '') . '_SAVE_SUCCESS') ? strtoupper($this->option) : 'JLIB_APPLICATION') . ($this->recordId == 0 && $this->app->isSite() ? '_SUBMIT' : '') . '_SAVE_SUCCESS'), Message::MESSAGE_GREEN);
     } catch (ValidateFailException $e) {
         $this->useTransaction ? $db->transactionRollback(true) : null;
         $errors = $e->getErrors();
         foreach ($errors as $error) {
             if ($error instanceof \Exception) {
                 $this->setMessage($error->getMessage(), Message::WARNING_YELLOW);
             } else {
                 $this->setMessage($error, Message::WARNING_YELLOW);
             }
         }
         // Save the data in the session.
         $this->app->setUserState($this->context . '.data', $this->data);
         // Redirect back to the edit screen.
         $this->setRedirect($this->getFailRedirect());
         return false;
     } catch (\Exception $e) {
         $this->useTransaction ? $db->transactionRollback(true) : null;
         if (JDEBUG) {
             throw $e;
         }
         $this->setRedirect($this->getFailRedirect(), $e->getMessage(), Message::ERROR_RED);
         return false;
     }
     $this->useTransaction ? $db->transactionCommit(true) : null;
     return true;
 }
Example #3
0
 /**
  * @todo Implement testHasKey().
  */
 public function testHasKey()
 {
     $string1 = 'com_admin.key';
     $lang = new JLanguage('');
     // HasKey doesn't exist, returns FALSE
     $this->assertFalse($lang->hasKey($string1));
 }
Example #4
0
 /**
  * Test...
  *
  * @return void
  */
 public function testHasKey()
 {
     // Key doesn't exist, returns false
     $this->assertFalse($this->object->hasKey('com_admin.key'));
 }
Example #5
0
 /**
  * Install function that is designed to handle individual clients
  *
  * @param   string   $cname     Cname @todo: not used
  * @param   string   $basePath  The base name.
  * @param   integer  $clientId  The client id.
  * @param   object   &$element  The XML element.
  *
  * @return  boolean
  *
  * @since  3.1
  */
 protected function _install($cname, $basePath, $clientId, &$element)
 {
     $this->setManifest($this->parent->getManifest());
     // Get the language name
     // Set the extensions name
     $name = JFilterInput::getInstance()->clean((string) $this->getManifest()->name, 'cmd');
     $this->set('name', $name);
     // Get the Language tag [ISO tag, eg. en-GB]
     $tag = (string) $this->getManifest()->tag;
     // Check if we found the tag - if we didn't, we may be trying to install from an older language package
     if (!$tag) {
         $this->parent->abort(JText::sprintf('JLIB_INSTALLER_ABORT', JText::_('JLIB_INSTALLER_ERROR_NO_LANGUAGE_TAG')));
         return false;
     }
     $this->set('tag', $tag);
     // Set the language installation path
     $this->parent->setPath('extension_site', $basePath . '/language/' . $tag);
     // Do we have a meta file in the file list?  In other words... is this a core language pack?
     if ($element && count($element->children())) {
         $files = $element->children();
         foreach ($files as $file) {
             if ((string) $file->attributes()->file == 'meta') {
                 $this->core = true;
                 break;
             }
         }
     }
     // If the language directory does not exist, let's create it
     $created = false;
     if (!file_exists($this->parent->getPath('extension_site'))) {
         if (!($created = JFolder::create($this->parent->getPath('extension_site')))) {
             $this->parent->abort(JText::sprintf('JLIB_INSTALLER_ABORT', JText::sprintf('JLIB_INSTALLER_ERROR_CREATE_FOLDER_FAILED', $this->parent->getPath('extension_site'))));
             return false;
         }
     } else {
         // Look for an update function or update tag
         $updateElement = $this->getManifest()->update;
         // Upgrade manually set or update tag detected
         if ($this->parent->isUpgrade() || $updateElement) {
             // Transfer control to the update function
             return $this->update();
         } elseif (!$this->parent->isOverwrite()) {
             // Overwrite is set
             // We didn't have overwrite set, find an update function or find an update tag so lets call it safe
             if (file_exists($this->parent->getPath('extension_site'))) {
                 // If the site exists say so.
                 JLog::add(JText::sprintf('JLIB_INSTALLER_ABORT', JText::sprintf('JLIB_INSTALLER_ERROR_FOLDER_IN_USE', $this->parent->getPath('extension_site'))), JLog::WARNING, 'jerror');
             } else {
                 // If the admin exists say so.
                 JLog::add(JText::sprintf('JLIB_INSTALLER_ABORT', JText::sprintf('JLIB_INSTALLER_ERROR_FOLDER_IN_USE', $this->parent->getPath('extension_administrator'))), JLog::WARNING, 'jerror');
             }
             return false;
         }
     }
     /*
      * If we created the language directory we will want to remove it if we
      * have to roll back the installation, so let's add it to the installation
      * step stack
      */
     if ($created) {
         $this->parent->pushStep(array('type' => 'folder', 'path' => $this->parent->getPath('extension_site')));
     }
     // Copy all the necessary files
     if ($this->parent->parseFiles($element) === false) {
         // Install failed, rollback changes
         $this->parent->abort();
         return false;
     }
     // Parse optional tags
     $this->parent->parseMedia($this->getManifest()->media);
     // Copy all the necessary font files to the common pdf_fonts directory
     $this->parent->setPath('extension_site', $basePath . '/language/pdf_fonts');
     $overwrite = $this->parent->setOverwrite(true);
     if ($this->parent->parseFiles($this->getManifest()->fonts) === false) {
         // Install failed, rollback changes
         $this->parent->abort();
         return false;
     }
     $this->parent->setOverwrite($overwrite);
     // Get the language description
     $description = (string) $this->getManifest()->description;
     if ($description) {
         $this->parent->set('message', JText::_($description));
     } else {
         $this->parent->set('message', '');
     }
     // Add an entry to the extension table with a whole heap of defaults
     $row = JTable::getInstance('extension');
     $row->set('name', $this->get('name'));
     $row->set('type', 'language');
     $row->set('element', $this->get('tag'));
     // There is no folder for languages
     $row->set('folder', '');
     $row->set('enabled', 1);
     $row->set('protected', 0);
     $row->set('access', 0);
     $row->set('client_id', $clientId);
     $row->set('params', $this->parent->getParams());
     $row->set('manifest_cache', $this->parent->generateManifestCache());
     if (!$row->store()) {
         // Install failed, roll back changes
         $this->parent->abort(JText::sprintf('JLIB_INSTALLER_ABORT', $row->getError()));
         return false;
     }
     // Create an unpublished content language.
     if ((int) $clientId === 0) {
         // Load the site language manifest.
         $siteLanguageManifest = JLanguage::parseXMLLanguageFile(JPATH_SITE . '/language/' . $this->tag . '/' . $this->tag . '.xml');
         // Set the content language title as the language metadata name.
         $contentLanguageTitle = $siteLanguageManifest['name'];
         // Set, as fallback, the content language native title to the language metadata name.
         $contentLanguageNativeTitle = $contentLanguageTitle;
         // If exist, load the native title from the language xml metadata.
         if (isset($siteLanguageMetadata['nativeName']) && $siteLanguageMetadata['nativeName']) {
             $contentLanguageNativeTitle = $siteLanguageMetadata['nativeName'];
         }
         // Try to load a language string from the installation language var. Will be removed in 4.0.
         if ($contentLanguageNativeTitle === $contentLanguageTitle) {
             if (file_exists(JPATH_INSTALLATION . '/language/' . $this->tag . '/' . $this->tag . '.xml')) {
                 $installationLanguage = new JLanguage($this->tag);
                 $installationLanguage->load('', JPATH_INSTALLATION);
                 if ($installationLanguage->hasKey('INSTL_DEFAULTLANGUAGE_NATIVE_LANGUAGE_NAME')) {
                     // Make sure it will not use the en-GB fallback.
                     $defaultLanguage = new JLanguage('en-GB');
                     $defaultLanguage->load('', JPATH_INSTALLATION);
                     $defaultLanguageNativeTitle = $defaultLanguage->_('INSTL_DEFAULTLANGUAGE_NATIVE_LANGUAGE_NAME');
                     $installationLanguageNativeTitle = $installationLanguage->_('INSTL_DEFAULTLANGUAGE_NATIVE_LANGUAGE_NAME');
                     if ($defaultLanguageNativeTitle != $installationLanguageNativeTitle) {
                         $contentLanguageNativeTitle = $installationLanguage->_('INSTL_DEFAULTLANGUAGE_NATIVE_LANGUAGE_NAME');
                     }
                 }
             }
         }
         // Prepare language data for store.
         $languageData = array('lang_id' => 0, 'lang_code' => $this->tag, 'title' => $contentLanguageTitle, 'title_native' => $contentLanguageNativeTitle, 'sef' => $this->getSefString($this->tag), 'image' => strtolower(str_replace('-', '_', $this->tag)), 'published' => 0, 'ordering' => 0, 'access' => (int) JFactory::getConfig()->get('access', 1), 'description' => '', 'metakey' => '', 'metadesc' => '', 'sitename' => '');
         $tableLanguage = JTable::getInstance('language');
         if (!$tableLanguage->bind($languageData) || !$tableLanguage->check() || !$tableLanguage->store() || !$tableLanguage->reorder()) {
             JLog::add(JText::sprintf('JLIB_INSTALLER_WARNING_UNABLE_TO_INSTALL_CONTENT_LANGUAGE', $siteLanguageManifest['name'], $tableLanguage->getError()), JLog::WARNING, 'jerror');
         }
     }
     // Clobber any possible pending updates
     $update = JTable::getInstance('update');
     $uid = $update->find(array('element' => $this->get('tag'), 'type' => 'language', 'folder' => ''));
     if ($uid) {
         $update->delete($uid);
     }
     return $row->get('extension_id');
 }