/** * PHP 4 constructor for the tasker * * @return joomfishTasker */ function __construct() { parent::__construct(); $this->registerDefaultTask('show'); $this->act = JRequest::getVar('act', ''); $this->task = JRequest::getVar('task', ''); $this->cid = JRequest::getVar('cid', array(0)); if (!is_array($this->cid)) { $this->cid = array(0); } $this->fileCode = JRequest::getVar('fileCode', ''); $this->_falangManager = FalangManager::getInstance(); $this->registerTask('show', 'showCElementConfig'); $this->registerTask('detail', 'showElementConfiguration'); $this->registerTask('remove', 'removeContentElement'); $this->registerTask('remove_install', 'removeContentElement'); $this->registerTask('installer', 'showContentElementsInstaller'); $this->registerTask('uploadfile', 'installContentElement'); // Populate data used by controller $app = JFactory::getApplication(); $this->_catid = $app->getUserStateFromRequest('selected_catid', 'catid', ''); $this->_select_language_id = $app->getUserStateFromRequest('selected_lang', 'select_language_id', '-1'); $this->_language_id = JRequest::getVar('language_id', $this->_select_language_id); $this->_select_language_id = $this->_select_language_id == -1 && $this->_language_id != -1 ? $this->_language_id : $this->_select_language_id; // Populate common data used by view // get the view $this->view = $this->getView("elements"); // Assign data for view $this->view->assignRef('catid', $this->_catid); $this->view->assignRef('select_language_id', $this->_select_language_id); $this->view->assignRef('task', $this->task); $this->view->assignRef('act', $this->act); }
function jflanguagesType() { $this->values = array(); if (ACYMAILING_J16 && file_exists(JPATH_SITE . DS . 'libraries' . DS . 'joomfish' . DS . 'manager.php') || !ACYMAILING_J16 && file_exists(JPATH_SITE . DS . 'administrator' . DS . 'components' . DS . 'com_joomfish' . DS . 'classes' . DS . 'JoomfishManager.class.php')) { include_once JPATH_SITE . DS . 'components' . DS . 'com_joomfish' . DS . 'helpers' . DS . 'defines.php'; if (!ACYMAILING_J16) { include_once JOOMFISH_ADMINPATH . DS . 'classes' . DS . 'JoomfishManager.class.php'; } else { include_once JPATH_SITE . DS . 'libraries' . DS . 'joomfish' . DS . 'manager.php'; } $jfManager = JoomFishManager::getInstance(); $langActive = $jfManager->getActiveLanguages(); $this->values[] = JHTML::_('select.option', '', JText::_('DEFAULT_LANGUAGE')); foreach ($langActive as $oneLanguage) { $this->values[] = JHTML::_('select.option', $oneLanguage->shortcode . ',' . $oneLanguage->id, $oneLanguage->name); } $this->found = true; } if (empty($this->values) && file_exists(JPATH_SITE . DS . 'components' . DS . 'com_falang' . DS . 'helpers' . DS . 'defines.php') && (include_once JPATH_SITE . DS . 'components' . DS . 'com_falang' . DS . 'helpers' . DS . 'defines.php')) { JLoader::register('FalangManager', FALANG_ADMINPATH . '/classes/FalangManager.class.php'); $fManager = FalangManager::getInstance(); $langActive = $fManager->getActiveLanguages(); $this->values[] = JHTML::_('select.option', '', JText::_('DEFAULT_LANGUAGE')); foreach ($langActive as $oneLanguage) { $this->values[] = JHTML::_('select.option', $oneLanguage->lang_code . ',' . $oneLanguage->lang_id, $oneLanguage->title); } $this->found = true; } }
/** * Event "onMageBridgeValidate" * * @access public * @param array $actions * @param object $condition * @return bool */ public function onMageBridgeValidate($actions = null, $condition = null) { // Make sure this plugin is enabled if ($this->isEnabled() == false) { return false; } // Make sure to check upon the $actions array to see if it contains what we need if (empty($actions['falang_language'])) { return false; } // Fetch the current language $language = JFactory::getLanguage(); // Fetch the languages $languages = FalangManager::getInstance()->getActiveLanguages(); $language_code = JFactory::getApplication()->input->getCmd('lang'); if (!empty($languages)) { foreach ($languages as $l) { if ($language->getTag() == $l->code || $language->getTag() == $l->lang_code) { if (!empty($l->lang_code) && $l->lang_code == $actions['falang_language']) { return true; } elseif (!empty($l->shortcode) && $l->shortcode == $actions['falang_language']) { return true; } elseif (!empty($l->sef) && $l->sef == $actions['falang_language']) { return true; } } } } // Check if the condition applies if ($actions['falang_language'] == $language_code) { return true; } // Return false by default return false; }
/** Standard constructor * * @param languageID ID of the associated language * @param elementTable Reference to the ContentElementTable object */ function ContentObject($languageID, &$contentElement, $id = -1) { $db = JFactory::getDBO(); if ($id > 0) { $this->id = $id; } $this->language_id = $languageID; // active languages are cached in FalangManager - use these if possible $jfManager = FalangManager::getInstance(); if (isset($jfManager) && $jfManager->activeLanguagesCacheByID && array_key_exists($languageID, $jfManager->activeLanguagesCacheByID)) { $lang = $jfManager->activeLanguagesCacheByID[$languageID]; } else { $lang = new TableJFLanguage($db); $lang->load($languageID); } $this->language = $lang->title; $this->_contentElement = $contentElement; }
function __construct() { parent::__construct(); $this->registerDefaultTask('showTranslate'); $this->act = JRequest::getVar('act', ''); $this->task = JRequest::getVar('task', ''); $this->cid = JRequest::getVar('cid', array(0)); if (!is_array($this->cid)) { $this->cid = array(0); } $this->fileCode = JRequest::getVar('fileCode', ''); $this->_falangManager = FalangManager::getInstance(); $this->registerTask('overview', 'showTranslate'); $this->registerTask('cancel', 'showTranslate'); $this->registerTask('edit', 'editTranslation'); $this->registerTask('apply', 'saveTranslation'); $this->registerTask('save', 'saveTranslation'); $this->registerTask('publish', 'publishTranslation'); // NB the method will check on task $this->registerTask('unpublish', 'publishTranslation'); $this->registerTask('remove', 'removeTranslation'); $this->registerTask('preview', 'previewTranslation'); $this->registerTask('orphans', 'showOrphanOverview'); $this->registerTask('orphandetail', 'showOrphanDetail'); $this->registerTask('removeorphan', 'removeOrphan'); $this->registerTask('editfree', 'editFreeTranslation'); // Populate data used by controller $app = JFactory::getApplication(); $this->_catid = $app->getUserStateFromRequest('selected_catid', 'catid', ''); $this->_select_language_id = $app->getUserStateFromRequest('selected_lang', 'select_language_id', '-1'); $this->_language_id = JRequest::getVar('language_id', $this->_select_language_id); $this->_select_language_id = $this->_select_language_id == -1 && $this->_language_id != -1 ? $this->_language_id : $this->_select_language_id; // Populate common data used by view // get the view $this->view = $this->getView("translate"); $model = $this->getModel('translate'); $this->view->setModel($model, true); // Assign data for view $this->view->assignRef('catid', $this->_catid); $this->view->assignRef('select_language_id', $this->_select_language_id); $this->view->assignRef('task', $this->task); $this->view->assignRef('act', $this->act); }
/** * Sets up ContentElement Cache - mainly used for data to determine primary key id for tablenames ( and for * future use to allow tables to be dropped from translation even if contentelements are installed ) */ static function _setupContentElementCache() { $db = JFactory::getDBO(); // Make usre table exists otherwise create it. $db->setQuery("CREATE TABLE IF NOT EXISTS `#__falang_tableinfo` ( `id` int(11) NOT NULL auto_increment, `joomlatablename` varchar(100) NOT NULL default '', `tablepkID` varchar(100) NOT NULL default '', PRIMARY KEY (`id`)) ENGINE=MyISAM"); $db->query(); // clear out existing data $db->setQuery("DELETE FROM `#__falang_tableinfo`"); $db->query(); $falangManager = FalangManager::getInstance(); $contentElements = $falangManager->getContentElements(true); $sql = "INSERT INTO `#__falang_tableinfo` (joomlatablename,tablepkID) VALUES "; $firstTime = true; foreach ($contentElements as $key => $jfElement) { $tablename = $jfElement->getTableName(); $refId = $jfElement->getReferenceID(); $sql .= $firstTime ? "" : ","; $sql .= " ('" . $tablename . "', '" . $refId . "')"; $firstTime = false; } $db->setQuery($sql); $db->query(); }
/** * This method copies originals content items to one selected language * * @param unknown_type $original2languageInfo * @param unknown_type $phase * @param unknown_type $statecheck_i * @param unknown_type $message * @return array Information result array */ function copyOriginalToLanguage($original2languageInfo, &$phase, &$state_catid, $language_id, $overwrite, &$message) { $db = JFactory::getDBO(); $jfManager = FalangManager::getInstance(); $sql = ''; switch ($phase) { case 1: $original2languageInfo = array(); $sql = "select distinct CONCAT('" . $db->getPrefix() . "',reference_table) from #__falang_content"; $db->setQuery($sql); $tablesWithTranslations = $db->loadResultArray(); $sql = "SHOW TABLES"; $db->setQuery($sql); $tables = $db->loadResultArray(); $allContentElements = $jfManager->getContentElements(); foreach ($allContentElements as $catid => $ce) { $ceInfo = array(); $ceInfo['name'] = $ce->Name; $ceInfo['catid'] = $catid; $ceInfo['total'] = '??'; $ceInfo['existing'] = '??'; $ceInfo['processed'] = '0'; $ceInfo['copied'] = '0'; $ceInfo['copy'] = false; $contentTable = $ce->getTable(); $tablename = $db->getPrefix() . $contentTable->Name; if (in_array($tablename, $tables)) { // get total count of table entries $sql = 'SELECT COUNT(*) FROM ' . $tablename . ' AS c'; if ($contentTable->Filter != '') { $sql .= ' WHERE ' . $contentTable->Filter; } $db->setQuery($sql); $ceInfo['total'] = $db->loadResult(); } $original2languageInfo[$catid] = $ceInfo; } $phase = 1; // stays with 1 as the second phase needs the bottom to be clicked $message = JText::_('COPY2LANGUAGE_INFO'); break; case 2: if ($state_catid != '') { // removing all content information which are not to be copied! $celements = explode(',', $state_catid); if (count($celements) < count($original2languageInfo)) { $shortList = array(); foreach ($celements as $element) { $shortList[$element] = $original2languageInfo[$element]; } $original2languageInfo = $shortList; } } $phase = 3; case 3: if ($state_catid != '') { $celements = explode(',', $state_catid); // copy the information per content element file, starting with the first in the list $catid = array_shift($celements); $catidCompleted = false; // coyping the information from the selected content element if ($catid != '' && $language_id != 0) { // get's the config settings on how to store original files $storeOriginalText = $jfManager->getCfg('storageOfOriginal') == 'md5' ? false : true; // make sure we are only transfering data within parts (max 100 items at a time) $ceInfo =& $original2languageInfo[$catid]; if (intval($ceInfo['processed']) < intval($ceInfo['total'])) { $contentElement = $jfManager->getContentElement($catid); $db->setQuery($contentElement->createContentSQL($language_id, null, $ceInfo['processed'], 10, array())); $rows = $db->loadObjectList(); if ($db->getErrorNum()) { JError::raiseError(500, JTEXT::_('Invalid Content SQL : ') . $db->getErrorMsg()); return false; } else { for ($i = 0; $i < count($rows); $i++) { $contentObject = new ContentObject($language_id, $contentElement); $contentObject->readFromRow($rows[$i]); if ($overwrite || $contentObject->translation_id == 0) { $contentObject->copyContentToTranslation($rows[$i], $rows[$i]); $contentObject->store(); $ceInfo['copied'] += 1; } $rows[$i] = $contentObject; } $ceInfo['processed'] += $i; if ($ceInfo['processed'] >= $ceInfo['total']) { $catidCompleted = true; } } } } if ($catidCompleted) { if (count($celements) > 0) { $state_catid = implode(',', $celements); } else { $state_catid = ''; } } } $message = JText::_('COPY2LANGUAGE_PROCESS'); if ($state_catid == '') { $phase = 4; // Successfully finished phase 3 $message = JText::_('COPY2LANGUAGE_COMPLETED'); } break; } return $original2languageInfo; }
/** * Deletes the selected translations (only the translations of course) * @return string message */ function _removeTranslation($catid, $cid) { $message = ''; $db = JFactory::getDBO(); foreach ($cid as $cid_row) { list($translationid, $contentid, $language_id) = explode('|', $cid_row); $jfManager = FalangManager::getInstance(); $contentElement = $jfManager->getContentElement($catid); $contentTable = $contentElement->getTableName(); $contentid = intval($contentid); $translationid = intval($translationid); // safety check -- complete overkill but better to be safe than sorry // get the translation details JLoader::import('models.FalangContent', FALANG_ADMINPATH); $translation = new FalangContent($db); $translation->load($translationid); if (!isset($translation) || $translation->id == 0) { $this->setState('message', JText::sprintf('NO_SUCH_TRANSLATION', $translationid)); continue; } // make sure translation matches the one we wanted if ($contentid != $translation->reference_id) { $this->setState('message', JText::_('Something dodgy going on here')); continue; } $sql = "DELETE from #__falang_content WHERE reference_table='{$catid}' and language_id={$language_id} and reference_id={$contentid}"; $db->setQuery($sql); $db->query(); if ($db->getErrorNum() != 0) { $this->setError(JText::_('Something dodgy going on here')); JError::raiseWarning(400, JTEXT::_('No valid table information: ') . $db->getErrorMsg()); continue; } else { $this->setState('message', JText::_('Translation successfully deleted')); } } return $message; }
/** * Cached extraction of content element field information * this cached version is shared between pages and hence makes a big improvement to load times * for newly visited pages in a cached scenario * * @param string $reference_table * @return value */ public static function contentElementFields($reference_table) { static $info; if (!isset($info)) { $info = array(); } if (!isset($info[$reference_table])) { $cacheDir = JPATH_CACHE; $cacheFile = $cacheDir . "/" . $reference_table . "_cefields.cache"; if (file_exists($cacheFile)) { $cacheFileContent = file_get_contents($cacheFile); $info[$reference_table] = unserialize($cacheFileContent); } else { $jfm = FalangManager::getInstance(); $contentElement = $jfm->getContentElement($reference_table); // The language is not relevant for this function so just use the current language $registry = JFactory::getConfig(); $lang = $registry->get("config.jflang"); include_once JPATH_ADMINISTRATOR . DS . "components" . DS . "com_falang" . '/models/ContentObject.php'; $contentObject = new ContentObject($jfm->getLanguageID($lang), $contentElement); $textFields = $contentObject->getTextFields(); $info[$reference_table]["textFields"] = $textFields; $info[$reference_table]["fieldTypes"] = array(); if ($textFields !== null) { $defaultSet = false; foreach ($textFields as $field) { $info[$reference_table]["fieldTypes"][$field] = $contentObject->getFieldType($field); } } $cacheFileContent = serialize($info[$reference_table]); $handle = @fopen($cacheFile, "w"); if ($handle) { fwrite($handle, $cacheFileContent); fclose($handle); } } } return $info[$reference_table]; }
public static function getList(&$params) { $lang = JFactory::getLanguage(); $languages = JLanguageHelper::getLanguages(); $app = JFactory::getApplication(); //use to remove default language code in url $lang_codes = JLanguageHelper::getLanguages('lang_code'); $default_lang = JComponentHelper::getParams('com_languages')->get('site', 'en-GB'); $default_sef = $lang_codes[$default_lang]->sef; $sefToolsEnabled = modFaLangHelper::sefToolEnabled(); $menu = $app->getMenu(); $active = $menu->getActive(); $uri = JURI::getInstance(); // Get menu home items $homes = array(); foreach ($menu->getMenu() as $item) { if ($item->home) { $homes[$item->language] = $item; } } if (FALANG_J30) { //since 3.2 if (version_compare(JVERSION, '3.2', 'ge')) { $assoc = JLanguageAssociations::isEnabled(); } else { $assoc = isset($app->item_associations) ? (boolean) $app->item_associations : false; } } else { $assoc = (boolean) $app->get('menu_associations', true); } if ($assoc) { if ($active) { $associations = MenusHelper::getAssociations($active->id); } } foreach($languages as $i => &$language) { // Do not display language without frontend UI if (!JLanguage::exists($language->lang_code)) { unset($languages[$i]); } if (FALANG_J30) { $language_filter = JLanguageMultilang::isEnabled(); } else { $language_filter = $app->getLanguageFilter(); } //set language active before language filter use for sh404 notice $language->active = $language->lang_code == $lang->getTag(); //since v1.4 change in 1.5 , ex rsform preview don't have active if (isset($active)){ $language->display = ($active->language == '*' || $language->active)?true:false; } else { $language->display = true; } if ($language_filter) { if (isset($associations[$language->lang_code]) && $menu->getItem($associations[$language->lang_code])) { $language->display = true; $itemid = $associations[$language->lang_code]; if ($app->getCfg('sef')=='1') { $language->link = JRoute::_('index.php?lang='.$language->sef.'&Itemid='.$itemid); } else { $language->link = 'index.php?lang='.$language->sef.'&Itemid='.$itemid; } } else { //sef case if ($app->getCfg('sef')=='1') { //sefToolsEnabled if ($sefToolsEnabled) { $itemid = isset($homes[$language->lang_code]) ? $homes[$language->lang_code]->id : $homes['*']->id; $language->link = JRoute::_('index.php?lang='.$language->sef.'&Itemid='.$itemid); continue; } //$uri->setVar('lang',$language->sef); $router = JApplication::getRouter(); $tmpuri = clone($uri); $router->parse($tmpuri); $vars = $router->getVars(); //workaround to fix index language $vars['lang'] = $language->sef; //case of category article if (!empty($vars['view']) && $vars['view'] == 'article' && !empty($vars['option']) && $vars['option'] == 'com_content') { if (FALANG_J30){ JModelLegacy::addIncludePath(JPATH_SITE.'/components/com_content/models', 'ContentModel'); $model = JModelLegacy::getInstance('Article', 'ContentModel', array('ignore_request'=>true)); $appParams = JFactory::getApplication()->getParams(); } else { JModel::addIncludePath(JPATH_SITE.'/components/com_content/models', 'ContentModel'); $model =& JModel::getInstance('Article', 'ContentModel', array('ignore_request'=>true)); $appParams = JFactory::getApplication()->getParams(); } $model->setState('params', $appParams); //in sef some link have this url //index.php/component/content/article?id=39 //id is not in vars but in $tmpuri if (empty($vars['id'])) { $tmpid = $tmpuri->getVar('id'); if (!empty($tmpid)) { $vars['id'] = $tmpuri->getVar('id'); } else { continue; } } $item = $model->getItem($vars['id']); //get alias of content item without the id , so i don't have the translation $db = JFactory::getDbo(); $query = $db->getQuery(true); $query->select('alias')->from('#__content')->where('id = ' . (int) $item->id); $db->setQuery($query); $alias = $db->loadResult(); $vars['id'] = $item->id.':'.$alias; $vars['catid'] =$item->catid.':'.$item->category_alias; } //new version 1.5 //case for k2 item alias write twice if (isset($vars['option']) && $vars['option'] == 'com_k2'){ if ($vars['task'] == $vars['id']){ unset($vars['id']); } } $url = 'index.php?'.JURI::buildQuery($vars); $language->link = JRoute::_($url); //TODO check performance 3 queries by languages -1 /** * Replace the slug from the language switch with correctly translated slug. * $language->lang_code language de la boucle (icone lien) * $lang->getTag() => language en cours sur le site * $default_lang langue par default du site */ if($lang->getTag() != $language->lang_code && !empty($vars['Itemid'])) { $fManager = FalangManager::getInstance(); $id_lang = $fManager->getLanguageID($language->lang_code); $db = JFactory::getDbo(); // get translated path if exist $query = $db->getQuery(true); $query->select('fc.value') ->from('#__falang_content fc') ->where('fc.reference_id = '.(int)$vars['Itemid']) ->where('fc.language_id = '.(int) $id_lang ) ->where('fc.reference_field = \'path\'') ->where('fc.reference_table = \'menu\''); $db->setQuery($query); $translatedPath = $db->loadResult(); // $translatedPath not exist if not translated or site default language // don't pass id to the query , so no translation given by falang $query = $db->getQuery(true); $query->select('m.path') ->from('#__menu m') ->where('m.id = '.(int)$vars['Itemid']); $db->setQuery($query); $originalPath = $db->loadResult(); $pathInUse = null; //si on est sur une page traduite on doit récupérer la traduction du path en cours if ($default_lang != $lang->getTag() ) { $id_lang = $fManager->getLanguageID($lang->getTag()); // get translated path if exist $query = $db->getQuery(true); $query->select('fc.value') ->from('#__falang_content fc') ->where('fc.reference_id = '.(int)$vars['Itemid']) ->where('fc.language_id = '.(int) $id_lang ) ->where('fc.reference_field = \'path\'') ->where('fc.reference_table = \'menu\''); $db->setQuery($query); $pathInUse = $db->loadResult(); } if (!isset($translatedPath)) { $translatedPath = $originalPath; } // not exist if not translated or site default language if (!isset($pathInUse)) { $pathInUse = $originalPath ; } //make replacement in the url //si language de boucle et language site if($language->lang_code == $default_lang) { if (isset($pathInUse) && isset($originalPath)){ $language->link = str_replace($pathInUse, $originalPath, $language->link); } } else { if (isset($pathInUse) && isset($translatedPath)){ $language->link = str_replace($pathInUse, $translatedPath, $language->link); } } } } //default case else { //we can't remove default language in the link $uri->setVar('lang',$language->sef); $language->link = 'index.php?'.$uri->getQuery(); } } } else { $language->link = 'index.php'; } } return $languages; }
public function checkCondition($condition = null) { // Fetch the current language $language = JFactory::getLanguage(); // Fetch the languages $languages = FalangManager::getInstance()->getActiveLanguages(); if (!empty($languages)) { foreach ($languages as $l) { if ($language->getTag() == $l->code) { if (!empty($l->shortcode)) { $language_code = $l->shortcode; break; } else { if (!empty($l->sef)) { $language_code = $l->sef; break; } } } } } else { $language_code = JRequest::getCmd('lang'); } if ($condition == $language_code) { return true; } return false; }
/** * Testing if old installation is found and upgraded? * This method is rebuild and checks now for old JoomFish installations not MambelFish anymore! * @return int 0 := component not installed, 1 := installed but not upgraded, 2 := installed and upgraded */ private function _testOldInstall() { $db = JFactory::getDBO(); $oldInstall = 0; $db->setQuery("SHOW TABLES LIKE '%jf_%'"); $db->query(); $rows = $db->loadResultArray(); foreach ($rows as $row) { if (preg_match('/mbf_content/i', $row)) { $oldInstall = 1; break; } } $jfManager = FalangManager::getInstance(); if ($oldInstall == 1 && $jfManager->getCfg('mbfupgradeDone')) { $oldInstall = 2; } return $oldInstall; }
?> </a> <?php } ?> <?php } } ?> </td> </tr> <?php } else { // Special Params handling // if translated value is blank then we always copy across the original value $falangManager = FalangManager::getInstance(); if ($falangManager->getCfg('copyparams', 1) && $translationContent->value == "") { $translationContent->value = $field->originalValue; } ?> <tr class="<?php echo "row{$k}"; ?> "> <td colspan="3"> <input type="hidden" name="origValue_<?php echo $field->Name; ?> " value='<?php echo md5($field->originalValue); ?>
/** * This method tests for the content elements and their original/translation status * It will return an array listing all content element names including information about how may originals * * @param array $originalStatus array with original state values if exist * @param int $phase which phase of the status check * @param string $statecheck_i running row number starting with -1! * @param string $message system message * @param array $languages array of availabe languages * @return array with resulting rows */ function testOriginalStatus($originalStatus, &$phase, &$statecheck_i, &$message, $languages) { $db = JFactory::getDBO(); $jfManager = FalangManager::getInstance(); $tranFilters = array(); $filterHTML = array(); $sql = ''; switch ($phase) { case 1: $originalStatus = array(); $sql = "select distinct CONCAT('" . $db->getPrefix() . "',reference_table) from #__falang_content"; $db->setQuery($sql); $tablesWithTranslations = $db->loadResultArray(); $sql = "SHOW TABLES"; $db->setQuery($sql); $tables = $db->loadResultArray(); $allContentElements = $jfManager->getContentElements(); foreach ($allContentElements as $catid => $ce) { $ceInfo = array(); $ceInfo['name'] = $ce->Name; $ceInfo['catid'] = $catid; $ceInfo['total'] = '??'; $ceInfo['missing_table'] = false; $ceInfo['message'] = ''; $tablename = $db->getPrefix() . $ce->referenceInformation["tablename"]; if (in_array($tablename, $tables)) { // get total count of table entries $db->setQuery('SELECT COUNT(*) FROM ' . $tablename); $ceInfo['total'] = $db->loadResult(); if (in_array($tablename, $tablesWithTranslations)) { // get orphans $db->setQuery($ce->createOrphanSQL(-1, null, -1, -1, $tranFilters)); $rows = $db->loadObjectList(); if ($db->getErrorNum()) { $this->_message = $db->stderr(); return false; } $ceInfo['orphans'] = count($rows); // get number of valid translations $ceInfo['valid'] = 0; // get number of outdated translations $ceInfo['outdated'] = $ceInfo['total'] - $ceInfo['orphans'] - $ceInfo['valid']; } else { $ceInfo['orphans'] = '0'; } } elseif (!in_array($tablename, $tables)) { $ceInfo['missing_table'] = true; $ceInfo['message'] = JText::sprintf(TABLE_DOES_NOT_EXIST, $tablename); } $originalStatus[] = $ceInfo; } $message = JText::sprintf('ORIGINAL_PHASE1_CHECK', ''); $phase++; $statecheck_i = 0; break; case 2: if (is_array($originalStatus) && count($originalStatus) > 0) { if ($statecheck_i >= 0 && $statecheck_i < count($originalStatus)) { $stateRow = $originalStatus[$statecheck_i]; foreach ($languages as $lang) { $sql = "SELECT * FROM #__falang_content as jfc" . "\n WHERE jfc.language_id=" . $lang->id . "\n AND jfc.reference_table='" . $stateRow['catid'] . "'" . "\n AND jfc.published=1" . "\n\t GROUP BY reference_id"; $db->setQuery($sql); $rows = $db->loadRowList(); $key = 'langentry_' . $lang->getLanguageCode(); $stateRow[$key] = count($rows); } } if ($statecheck_i < count($originalStatus) - 1) { $statecheck_i++; $message = JText::sprintf('ORIGINAL_PHASE1_CHECK', ' (' . $originalStatus[$statecheck_i]['name'] . ')'); } else { $message = JText::_('ORIGINAL_PHASE2_CHECK'); $phase = 3; // exit } } else { $phase = 3; // exit $message = JText::_('ORIGINAL_PHASE2_CHECK'); } break; } return $originalStatus; }
/** * Loads the language by it's iso name * @param string $iso iso name of the language * @return any result from the database operation */ function createByISO($iso, $active = true) { $db = JFactory::getDBO(); if ($iso === null) { return false; } $lang = new TableJFLanguage($db); $jfm = FalangManager::getInstance(); $langdata = $jfm->getLanguageByCode($iso, $active); if (!$lang->bind($langdata)) { $lang = null; } return $lang; }
/** * Constructor */ function __construct() { $this->_falangManager = FalangManager::getInstance(); }
} // Access check. if (!JFactory::getUser()->authorise('core.manage', 'com_falang')) { return JError::raiseWarning(404, JText::_('JERROR_ALERTNOAUTHOR')); } jimport('joomla.filesystem.path'); // disable Zend php4 compatability mode - this causes problem with passing translations by reference // see http://forum.joomla.org/index.php/topic,80065.msg451560.html#msg451560 for details of problem // See http://uk.php.net/ini.core for description of the flag @ini_set("zend.ze1_compatibility_mode", "Off"); /** required standard extentions **/ require_once JPATH_SITE . DS . 'components' . DS . 'com_falang' . DS . 'helpers' . DS . 'defines.php'; JLoader::register('FalangManager', FALANG_ADMINPATH . DS . 'classes' . DS . 'FalangManager.class.php'); JLoader::register('FalangExtensionHelper', FALANG_ADMINPATH . DS . 'helpers' . DS . 'extensionHelper.php'); JLoader::register('FalangVersion', FALANG_ADMINPATH . DS . 'version.php'); $falangManager = FalangManager::getInstance(dirname(__FILE__)); $cmd = JRequest::getCmd('task', 'cpanel.show'); if (strpos($cmd, '.') != false) { // We have a defined controller/task pair -- lets split them out list($controllerName, $task) = explode('.', $cmd); // Define the controller name and path $controllerName = strtolower($controllerName); $controllerPath = FALANG_ADMINPATH . DS . 'controllers' . DS . $controllerName . '.php'; // If the controller file path exists, include it ... else lets die with a 500 error if (file_exists($controllerPath)) { require_once $controllerPath; } else { JError::raiseError(500, 'Invalid Controller'); } } else { // Base controller, just set the task
function getLangLongCode($lang_code = null) { static $codes; // Get current language code if (is_null($lang_code)) { $lang = JFactory::getLanguage(); return $lang->getTag(); } if (is_null($codes)) { $codes = array(); if (Mijosef::get('utility')->JoomfishInstalled() || Mijosef::get('utility')->FalangInstalled()) { if (Mijosef::get('utility')->JoomfishInstalled()) { $jfm = JoomfishManager::getInstance(); } else { $jfm = FalangManager::getInstance(); } $langs =& $jfm->getLanguages(false); if (!empty($langs)) { foreach ($langs as $lang) { $codes[$lang->shortcode] = $lang->code; } } } else { // Only one language $lang =& JFactory::getLanguage(); $tag = $lang->getTag(); $parts = explode('-', $tag); $iso = $parts[0]; $codes[$iso] = $tag; } } if (isset($codes[$lang_code])) { return $codes[$lang_code]; } return null; }
public function buildRule(&$router, &$uri) { $lang = $uri->getVar('lang'); $default_lang = JComponentHelper::getParams('com_languages')->get('site', 'en-GB'); //we build the route for category list article if ($lang != $default_lang && $uri->getVar('id') != null && $uri->getVar('catid') != null) { $fManager = FalangManager::getInstance(); $id_lang = $fManager->getLanguageID($lang); // Make sure we have the id and the alias if (strpos($uri->getVar('id'), ':') > 0) { list($tmp, $id) = explode(':', $uri->getVar('id'), 2); $db = JFactory::getDbo(); $dbQuery = $db->getQuery(true)->select('fc.value')->from('#__falang_content fc')->where('fc.reference_id = ' . (int) $tmp)->where('fc.language_id = ' . (int) $id_lang)->where('fc.reference_field = \'alias\'')->where('fc.reference_table = \'content\''); $db->setQuery($dbQuery); $alias = $db->loadResult(); if (isset($alias)) { $uri->setVar('id', $tmp . ':' . $alias); } } // Make sure we have the id and the alias if (strpos($uri->getVar('catid'), ':') > 0) { list($tmp2, $catid) = explode(':', $uri->getVar('catid'), 2); $db = JFactory::getDbo(); $dbQuery = $db->getQuery(true)->select('fc.value')->from('#__falang_content fc')->where('fc.reference_id = ' . (int) $tmp2)->where('fc.language_id = ' . (int) $id_lang)->where('fc.reference_field = \'alias\'')->where('fc.reference_table = \'categories\''); $db->setQuery($dbQuery); $alias = $db->loadResult(); if (isset($alias)) { $uri->setVar('catid', $tmp2 . ':' . $alias); } } } //fix canonical if sef plugin is enabled $sef_plugin = JPluginHelper::getPlugin('system', 'sef'); if (!empty($sef_plugin)) { if ($lang != $default_lang && $uri->getVar('id') != null && $uri->getVar('catid') != null) { $fManager = FalangManager::getInstance(); $id_lang = $fManager->getLanguageID($lang); // Make sure we have the id and the alias if (strpos($uri->getVar('id'), ':') === false) { //we use id in the query to be translated. $db = JFactory::getDbo(); $dbQuery = $db->getQuery(true)->select('alias,id')->from('#__content')->where('id=' . (int) $uri->getVar('id')); $db->setQuery($dbQuery); $alias = $db->loadResult(); if (isset($alias)) { $uri->setVar('id', $uri->getVar('id') . ':' . $alias); } } } } //build route for hikashop product if ($uri->getVar('option') == 'com_hikashop' && $uri->getVar('ctrl') == 'product' && $uri->getVar('task') == 'show') { // on native language look in falang table if ($default_lang != $lang) { $fManager = FalangManager::getInstance(); $id_lang = $fManager->getLanguageID($lang); $id = $uri->getVar('cid'); $db = JFactory::getDbo(); $dbQuery = $db->getQuery(true)->select('fc.value')->from('#__falang_content fc')->where('fc.reference_id = ' . (int) $id)->where('fc.language_id = ' . (int) $id_lang)->where('fc.reference_field = \'product_alias\'')->where('fc.reference_table = \'hikashop_product\''); $db->setQuery($dbQuery); $alias = $db->loadResult(); if (isset($alias)) { $uri->setVar('name', $alias); } } else { // translated languague look in native table $id = $uri->getVar('cid'); $db = JFactory::getDbo(); $dbQuery = $db->getQuery(true)->select('product_alias')->from('#__hikashop_product')->where('product_id = ' . (int) $id); $db->setQuery($dbQuery); $alias = $db->loadResult(); if (isset($alias)) { $uri->setVar('name', $alias); } } // } //build route for hikahsop category list if ($uri->getVar('option') == 'com_hikashop' && $uri->getVar('ctrl') == 'category' && $uri->getVar('task') == 'listing') { // on native language look in falang table if ($default_lang != $lang) { $fManager = FalangManager::getInstance(); $id_lang = $fManager->getLanguageID($lang); $id = $uri->getVar('cid'); $db = JFactory::getDbo(); $dbQuery = $db->getQuery(true)->select('fc.value')->from('#__falang_content fc')->where('fc.reference_id = ' . (int) $id)->where('fc.language_id = ' . (int) $id_lang)->where('fc.reference_field = \'category_alias\'')->where('fc.reference_table = \'hikashop_category\''); $db->setQuery($dbQuery); $alias = $db->loadResult(); if (isset($alias)) { $uri->setVar('name', $alias); } } else { // translated languague look in native table $id = $uri->getVar('cid'); $db = JFactory::getDbo(); $dbQuery = $db->getQuery(true)->select('category_alias')->from('#__hikashop_category')->where('category_id = ' . (int) $id); $db->setQuery($dbQuery); $alias = $db->loadResult(); if (isset($alias)) { $uri->setVar('name', $alias); } } } //build route for k2 category list if ($uri->getVar('option') == 'com_k2' && $uri->getVar('view') == 'item') { // on native language look in falang table if ($default_lang != $lang) { $fManager = FalangManager::getInstance(); $id_lang = $fManager->getLanguageID($lang); // Make sure we have the id and the alias if (strpos($uri->getVar('id'), ':') > 0) { list($tmp, $id) = explode(':', $uri->getVar('id'), 2); $db = JFactory::getDbo(); $dbQuery = $db->getQuery(true)->select('fc.value')->from('#__falang_content fc')->where('fc.reference_id = ' . (int) $tmp)->where('fc.language_id = ' . (int) $id_lang)->where('fc.reference_field = \'alias\'')->where('fc.reference_table = \'k2_items\''); $db->setQuery($dbQuery); $alias = $db->loadResult(); if (isset($alias)) { $uri->setVar('id', $tmp . ':' . $alias); } } } else { // translated languague look in native table $id = $uri->getVar('id'); list($tmp, $id) = explode(':', $uri->getVar('id'), 2); $db = JFactory::getDbo(); $dbQuery = $db->getQuery(true)->select('alias')->from('#__k2_items')->where('id = ' . (int) $tmp); $db->setQuery($dbQuery); $alias = $db->loadResult(); if (isset($alias)) { $uri->setVar('id', $tmp . ':' . $alias); } } } return array(); }
/** * render content state information */ function renderContentState() { $falangManager = FalangManager::getInstance(); $output = ''; $alertContent = false; if (array_key_exists('unpublished', $this->contentInfo) && is_array($this->contentInfo['unpublished'])) { $alertContent = true; } ob_start(); ?> <table class="adminlist"> <tr> <th><?php echo JText::_("UNPUBLISHED CONTENT ELEMENTS"); ?> </th> <th style="text-align: center;"><?php echo JText::_("Language"); ?> </th> <th style="text-align: center;"><?php echo JText::_("Publish"); ?> </th> </tr> <?php $k = 0; if ($alertContent) { $curReftable = ''; foreach ($this->contentInfo['unpublished'] as $ceInfo) { $contentElement = $falangManager->getContentElement($ceInfo['catid']); // Trap for content elements that may have been removed if (is_null($contentElement)) { $name = "<span style='font-style:italic'>" . JText::sprintf("CONTENT_ELEMENT_MISSING", $ceInfo["reference_table"]) . "</span>"; } else { $name = $contentElement->Name; } if ($ceInfo["reference_table"] != $curReftable) { $curReftable = $ceInfo["reference_table"]; $k = 0; ?> <tr><td colspan="3"><strong><?php echo $name; ?> </strong></td></tr> <?php } JLoader::import('models.ContentObject', FALANG_ADMINPATH); $contentObject = new ContentObject($ceInfo['language_id'], $contentElement); $contentObject->loadFromContentID($ceInfo['reference_id']); $link = 'index.php?option=com_falang&task=translate.edit&&catid=' . $ceInfo['catid'] . '&cid[]=0|' . $ceInfo['reference_id'] . '|' . $ceInfo['language_id']; $hrefEdit = "<a href='" . $link . "'>" . $contentObject->title . "</a>"; $link = 'index.php?option=com_falang&task=translate.publish&catid=' . $ceInfo['catid'] . '&cid[]=0|' . $ceInfo['reference_id'] . '|' . $ceInfo['language_id']; $hrefPublish = '<a href="' . $link . '"><img src="images/publish_x.png" width="12" height="12" border="0" alt="" /></a>'; ?> <tr class="row<?php echo $k; ?> "> <td align="left"><?php echo $hrefEdit; ?> </td> <td style="text-align: center;"><?php echo $ceInfo['language']; ?> </td> <td style="text-align: center;"><?php echo $hrefPublish; ?> </td> </tr> <?php $k = 1 - $k; } } else { ?> <tr class="row0"> <td colspan="3"><?php echo JText::_("No unpublished translations found"); ?> </td> </tr> <?php } ?> </table> <?php $output .= ob_get_clean(); return $output; }
/** * */ function checkstatus() { $type = JRequest::getString('type', ''); $phase = JRequest::getInt('phase', 1); $statecheck_i = JRequest::getInt('statecheck_i', -1); $htmlResult = JText::_('MANAGEMENT_INTRO'); $link = ''; // get the view $this->_view = $this->getView("statistics"); $this->_model = $this->getModel('statistics'); switch ($type) { case 'translation_status': $message = ''; $session = JFactory::getSession(); $translationStatus = $session->get('translationState', array()); $translationStatus = $this->_model->testTranslationStatus($translationStatus, $phase, $statecheck_i, $message); $session->set('translationState', $translationStatus); $htmlResult = $this->_view->renderTranslationStatusTable($translationStatus, $message); if ($phase <= 3) { $link = 'index.php?option=com_falang&task=statistics.check&type=translation_status&phase=' . $phase; if ($statecheck_i > -1) { $link .= '&statecheck_i=' . $statecheck_i; } } else { $session->set('translationState', null); } break; case 'original_status': $message = ''; $session = JFactory::getSession(); $originalStatus = $session->get('originalStatus', array()); $langCodes = array(); $jfManager = FalangManager::getInstance(); $languages = $jfManager->getLanguages(false); foreach ($languages as $lang) { $langCodes[] = $lang->getLanguageCode(); } $originalStatus = $this->_model->testOriginalStatus($originalStatus, $phase, $statecheck_i, $message, $languages); $session->set('originalStatus', $originalStatus); $htmlResult = $this->_view->renderOriginalStatusTable($originalStatus, $message, $langCodes); if ($phase <= 2) { $link = 'index.php?option=com_falang&task=statistics.check&type=original_status&phase=' . $phase; if ($statecheck_i > -1) { $link .= '&statecheck_i=' . $statecheck_i; } } else { $session->set('originalStatus', null); } break; } // Set the layout $this->_view->setLayout('result'); $this->_view->assignRef('htmlResult', $htmlResult); $this->_view->assignRef('reload', $link); $this->_view->display(); }
/** * Adds the translation toolbar button to the toolbar based on the * given parameters. * */ public function addToolbar() { //check if we are in backend $app = JFactory::getApplication(); if (!$app->isAdmin()) { return; } $doc = JFactory::getDocument(); $falangManager = FalangManager::getInstance(); $input = JFactory::getApplication()->input; $option = $input->get('option', false, 'cmd'); $view = $input->get('view', false, 'cmd'); $task = $input->get('task', false, 'cmd'); $layout = $input->get('layout', 'default', 'string'); if (!$option || !$view && !$task || !$layout) { return; } $mapping = $this->loadComponent(); if (!isset($mapping)) { return; } //GET KEY FROM CONTENT ELEMENT $id = $input->get($mapping[2], 0, 'int'); if (empty($id)) { return; } //Load ToolBar $bar = JToolBar::getInstance('toolbar'); //Load Language $languages = $this->getLanguages(); // @deprecated used for Joomla 2.5 //TODO use library ? $bar->addButtonPath(JPATH_PLUGINS . '/system/falangquickjump/toolbar/button/'); $buttontype = 'itrPopup'; $width = '95%'; $height = '99%'; //Add Stylesheet for button icons JHTML::_('stylesheet', 'administrator/components/com_falang/assets/css/falang.css', array(), false); //Add button by language foreach ($languages as $language) { //get Falang Object info $contentElement = $falangManager->getContentElement($mapping[1]); JLoader::import('models.ContentObject', FALANG_ADMINPATH); $actContentObject = new ContentObject($language->lang_id, $contentElement); $actContentObject->loadFromContentID($id); $class = "quickmodal "; //-1 not exist, 0 old , 1 uptodate switch ($actContentObject->state) { case 1: $class .= "uptodate"; break; case 0: $class .= "old"; break; case -1: $class .= "notexist"; break; default: $class .= "notexist"; break; } $publish = isset($actContentObject->published) && $actContentObject->published == 1 ? " icon-publish" : " icon-unpublish"; //free and paid mmust be on 1 line /* >>> [FREE] >>> */ $url = 'index.php?option=com_falang&task=translate.editfree&tmpl=component&direct=1'; /* <<< [FREE] <<< */ $bar->appendButton($buttontype, 'falang-quicktranslate-' . $language->lang_id, $language->title, $url, $width, $height, null, null, null, null, $language->image, $class, $publish); } }
/** * Overwritten insert function to enable storage of material created in non-default language. * Note that this creates a translation which is identical to the original - when we update * the original in the default language we then keep the translation (although it will appread out of date!). * * @param string table name * @param object instance with information to store * @param string primary key name of table * @param boolean debug info printed or not * @param boolean passthru without storing information in a translation table */ function updateObject($table, &$object, $keyName, $updateNulls = true, $passthru = false) { $params = JComponentHelper::getParams('com_falang'); //1.4.5 if fronEdition is set to off , keep previous system if ($params->get('frontEndEdition', 0) == 0) { return parent::updateObject($table, $object, $keyName, $updateNulls); } $pfunc = $this->_profile(); $falangManager = FalangManager::getInstance(); $current_lang = JFactory::getLanguage()->getTag(); //default site language $default_lang = JComponentHelper::getParams('com_languages')->get('site'); //we update if content language is set to all language or if content language is current_langauge // check if marked langage of content is the detaul language: if ($table == '#__content' && isset($object->id) && $object->id > 0) { $test = JTable::getInstance("Content"); $test->load($object->id); if ($test->language == '*') { if ($current_lang == $default_lang) { return parent::updateObject($table, $object, $keyName, $updateNulls); } } if ($test->language == $current_lang) { return parent::updateObject($table, $object, $keyName, $updateNulls); } } if (isset($falangManager) && $table != "#__falang_content") { $tableName = preg_replace('/^#__/', '', $table); $contentElement = $falangManager->getContentElement($tableName); if (isset($contentElement) && $contentElement->getFrontEdit() == 1) { include_once JPATH_ADMINISTRATOR . "/components/com_falang/models/ContentObject.php"; $actContentObject = new ContentObject($falangManager->getLanguageID($current_lang), $contentElement); $objectLanguague = isset($object->language) ? $object->language : null; //the object language must be a language tag $languageIsoList = array("*"); foreach ($falangManager->getLanguagesIndexedByCode(false) as $language) { $languageIsoList[] = $language->lang_code; } $validLanguage = in_array($objectLanguague, $languageIsoList); // 1 - si object * => objet joomla si langue cournate et langue en cours sont pareil // 2 - si object a une langue , alors object joolma si la langue de l'object = language en cours $joomlaObject = false; if ($objectLanguague == "*") { if ($current_lang == $default_lang) { $joomlaObject = true; } } if ($objectLanguague == $current_lang) { $joomlaObject = true; } //hikashop woraround // $lkeyName = method_exists($object, 'getKeyName') ? $object->getKeyName() : null; if (!empty($lkeyName) && $validLanguage && isset($objectLanguague) && !$joomlaObject) { $actContentObject->loadFromContentID($object->id); $actContentObject->updateMLContent($object); if (isset($object->state)) { $actContentObject->published = $object->state == 1 ? true : false; } else { if (isset($object->published)) { $actContentObject->published = $object->published == 1 ? true : false; } } $actContentObject->setPublished($actContentObject->published); $actContentObject->store(); return true; } else { //hikashop workaround this update hit. return parent::updateObject($table, $object, $keyName, $updateNulls); } } else { //content element not exist return parent::updateObject($table, $object, $keyName, $updateNulls); } } else { return parent::updateObject($table, $object, $keyName, $updateNulls); } }
/** * Overwritten insert function to enable storage of material created in non-default language. * Note that this creates a translation which is identical to the original - when we update * the original in the default language we then keep the translation (although it will appread out of date!). * * @param string table name * @param object instance with information to store * @param string primary key name of table * @param boolean debug info printed or not * @param boolean passthru without storing information in a translation table */ function updateObject($table, &$object, $keyName, $updateNulls = true, $passthru = false) { $params = JComponentHelper::getParams('com_falang'); $pfunc = $this->_profile(); $falangManager = FalangManager::getInstance(); $current_lang = JFactory::getLanguage()->getTag(); //default site language $default_lang = JComponentHelper::getParams('com_languages')->get('site'); //we update if content language is set to all language or if content language is current_langauge // check if marked langage of content is the detaul language: if ($table == '#__content' && isset($object->id) && $object->id > 0) { $test = JTable::getInstance("Content"); $test->load($object->id); if ($test->language == '*') { if ($current_lang == $default_lang) { return parent::updateObject($table, $object, $keyName, $updateNulls); } } if ($test->language == $current_lang) { return parent::updateObject($table, $object, $keyName, $updateNulls); } } if (isset($falangManager) && $table != "#__falang_content") { $tableName = preg_replace('/^#__/', '', $table); $contentElement = $falangManager->getContentElement($tableName); if (isset($contentElement)) { include_once JPATH_ADMINISTRATOR . "/components/com_falang/models/ContentObject.php"; $actContentObject = new ContentObject($falangManager->getLanguageID($current_lang), $contentElement); //hikashop woraround // $lkeyName = method_exists($object, 'getKeyName') ? $object->getKeyName() : null; if (!empty($lkeyName)) { $actContentObject->loadFromContentID($object->id); $actContentObject->updateMLContent($object); if (isset($object->state)) { $actContentObject->published = $object->state == 1 ? true : false; } else { if (isset($object->published)) { $actContentObject->published = $object->published == 1 ? true : false; } } //if ( $falangManager->getCfg("frontEndPublish")){ if ($params->get('frontEndEdition', 0) == 1) { $user = JFactory::getUser(); $access = new stdClass(); //$access->canPublish = $user->authorize('com_content', 'publish', 'content', 'all'); //if ($access->canPublish) $actContentObject->setPublished($actContentObject->published); $actContentObject->setPublished($actContentObject->published); } //if allow front-end translation if ($params->get('frontEndEdition', 0) == 1) { $actContentObject->store(); } else { $application = JFactory::getApplication(); $application->enqueueMessage(JText::_('PLG_SYSTEM_FALANGDRIVER_FRONT_UPDATE_NOT_AUTHORIZED'), 'notice'); return false; } } else { //hikashop workaround this update hit. return parent::updateObject($table, $object, $keyName, $updateNulls); } } //content element not exist $pfunc = $this->_profile($pfunc); //return parent::updateObject( $table, $object, $keyName, $updateNulls ); return true; } else { return parent::updateObject($table, $object, $keyName, $updateNulls); } }