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; } }
/** * Constructor for the tasker * * @return joomfishTasker */ public 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->_joomfishManager = JoomFishManager::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 global $mainframe; $this->_catid = $mainframe->getUserStateFromRequest('selected_catid', 'catid', ''); $this->_select_language_id = $mainframe->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); }
/** * Loads the entire menu table into memory. * * @return array */ public function load() { // @Todo cache this $jlanguage = JFactory::getConfig()->getValue('language'); if (isset(self::$_menuitems[$jlanguage])) { $this->_items = self::$_menuitems[$jlanguage]; return; } // Initialise variables. $db = JFactory::getDbo(); $app = JApplication::getInstance('site'); $query = $db->getQuery(true); $query->select('m.id, m.menutype, m.title, m.alias, m.note, m.path AS route, m.link, m.type, m.level, m.language'); $query->select('m.browserNav, m.access, m.params, m.home, m.img, m.template_style_id, m.component_id, m.parent_id'); $query->select('e.element as component'); $query->from('#__menu AS m'); $query->leftJoin('#__extensions AS e ON m.component_id = e.extension_id'); $query->where('m.published = 1'); $query->where('m.parent_id > 0'); $query->where('m.client_id = 0'); $query->order('m.lft'); // Set the query $db->setQuery($query); if (!($this->_items = $db->loadObjectList('id'))) { JError::raiseWarning(500, JText::sprintf('JERROR_LOADING_MENUS', $db->getErrorMsg())); return false; } foreach ($this->_items as &$item) { // Get parent information. $parent_tree = array(); if (isset($this->_items[$item->parent_id])) { $parent_tree = $this->_items[$item->parent_id]->tree; } // Create tree. $parent_tree[] = $item->id; $item->tree = $parent_tree; // Create the query array. $url = str_replace('index.php?', '', $item->link); $url = str_replace('&', '&', $url); parse_str($url, $item->query); } // @Todo move this to plugin JFRoute::getInstance()->fixMenuItemRoutes($this->_items, null); // throw away everything that is not * or default as the rest is there only for translations $deflang = JoomFishManager::getInstance()->getDefaultLanguage(); foreach ($this->_items as &$item) { if ($item->language != '*' && $item->language != $deflang) { unset($this->_items[(string) $item->id]); } else { if ($item->language == $deflang) { $item->language = '*'; // either this or override JRouterSite line 222 that has * hardcoded } } } self::$_menuitems[$jlanguage] = $this->_items; }
/** * Method to get the field options for content languages. * * @return array The field option objects. * * @since 11.1 */ protected function getOptions() { $basicoptions = JHtml::_('contentlanguage.existing'); // set default if (!isset($this->value) || empty($this->value) || $this->value == '*') { $jfManager = JoomFishManager::getInstance(); $this->value = $jfManager->getDefaultLanguage(); } return $basicoptions; }
public static function getComponentMapping($modulParam) { $retVal = array(); $jfm = JoomFishManager::getInstance(); $contentElements = $jfm->getContentElements(); foreach ($contentElements as $element) { $componentinfo = $element->getComponentInformation(); $retVal = array_merge($retVal, $componentinfo); } return $retVal; }
function jflanguagesType() { $this->values = array(); if (@(include_once JPATH_SITE . DS . 'components' . DS . 'com_joomfish' . DS . 'helpers' . DS . 'defines.php')) { include_once JOOMFISH_ADMINPATH . DS . 'classes' . DS . 'JoomfishManager.class.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); } } }
function jfGetOtherLanguages() { // inspired by modules/mod_jflanguageselection $jfManager = JoomFishManager::getInstance(); $jfrouter = JFRoute::getInstance(); $curLang = jfGetCurrentLanguage(); $languages = array(); foreach ($jfManager->getActiveLanguages(true) as $lang) { if ($lang->lang_code != $curLang->lang_code) { $code = $lang->getLanguageCode(); $languages[$code] = $jfrouter->rerouteCurrentUrl($code); } } return $languages; }
/** * Method to get the field options. * * @return array The field option objects. * * @since 11.1 */ protected function getOptions() { // Initialize some field attributes. $client = (string) $this->element['client']; if ($client != 'site' && $client != 'administrator') { $client = 'site'; } // set default if (!isset($this->value) || empty($this->value) || $this->value == '*') { $jfManager = JoomFishManager::getInstance(); $this->value = $jfManager->getDefaultLanguage(); } // Merge any additional options in the XML definition. $options = JLanguageHelper::createLanguageList($this->value, constant('JPATH_' . strtoupper($client)), true, true); return $options; }
function onAfterInitialise() { $mainframe =& JFactory::getApplication(); JFactory::getConfig()->set('sef_suffix', 0); // Store J! router for later use $router =& $mainframe->getRouter(); $mainframe->set('mijosef.global.jrouter', $router); // Activate MijoSEF router $mijosef_router = new JRouterMijosef(); $router->attachParseRule(array($mijosef_router, 'parse')); $router->attachBuildRule(array($mijosef_router, 'build')); // Instantiate JoomFishManager before JFDatabase loading to prevent infinity loop... if (Mijosef::get('utility')->JoomFishInstalled() && class_exists('JoomFishManager')) { JoomFishManager::getInstance(); } // Post varsa yönlendirme $post = JRequest::get('post'); if (is_array($post) && !empty($post)) { return; } // Ajax durumunda yönlendirme yapma $tmpl = JRequest::getCmd('tmpl'); $format = JRequest::getCmd('format'); if ($tmpl == 'component' || $format == 'raw') { return; } // www settings $uri =& JFactory::getURI(); $host =& $uri->getHost(); $redirect = false; $wwwredirect = $this->MijosefConfig->redirect_to_www; if ($wwwredirect != 0) { if ($wwwredirect == 1 && strpos($host, 'www') !== 0) { $redirect = true; $uri->setHost('www.' . $host); } elseif ($wwwredirect == 2 && strpos($host, 'www') === 0) { $redirect = true; $uri->setHost(substr($host, 4, strlen($host))); } } if ($redirect === true) { $mainframe->redirect($uri->toString()); $mainframe->close(); } }
/** * PHP 4 constructor for the tasker * * @return joomfishTasker */ 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->_joomfishManager =& JoomFishManager::getInstance(); $this->registerTask('overview', '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'); // Populate data used by controller global $mainframe; $this->_catid = $mainframe->getUserStateFromRequest('selected_catid', 'catid', ''); $this->_select_language_id = $mainframe->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); }
function JreviewsParseRoute($segments) { $vars = array(); # Load own uri to overcome Joomla encoding issues with Greek params $uri = cmsFramework::_getUri(); // Fix for Joomfish. Remove the language segment from the url if (class_exists('JoomFishManager')) { $lang = JFactory::getLanguage(); $language = $lang->getTag(); $jfm = JoomFishManager::getInstance(); $lang_shortcode = $jfm->getLanguageCode($language); if (strstr($uri, '/' . $lang_shortcode . '/')) { $uri = str_replace('/' . $lang_shortcode . '/', '/', $uri); } } $new_segments = cmsFramework::_parseSefRoute($uri); if (end($new_segments) == 'index.php') { $new_segments = $segments; } // Remove Joomla language segment from url if (isset($_GET['language']) && $_GET['language'] != '' && strlen($new_segments[0]) == 2) { $new_segments[0] = 'index.php'; } # Fix for sef without mod rewrite. Without it the sort urls don't work. // Remove the Itemid related segments when mod rewrite is disabled and Itemid exists if ($new_segments[0] == 'index.php' && $new_segments[1] != 'component') { foreach ($new_segments as $key => $segment) { if (!in_array(str_replace(' ', '+', $segment), $segments) && !in_array(JreviewsStrReplaceOnce('-', ':', urlencode($segment)), $segments)) { unset($new_segments[$key]); } } } if (count($new_segments) >= 3 && isset($new_segments[0]) && $new_segments[0] == 'index.php' && isset($new_segments[1]) && $new_segments[1] == 'component' && isset($new_segments[2]) && $new_segments[2] == 'jreviews') { array_shift($new_segments); array_shift($new_segments); array_shift($new_segments); } $vars['url'] = implode('/', $new_segments); return $vars; }
/** * 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 = JoomFishManager::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.JFContent', JOOMFISH_ADMINPATH); $translation = new jfContent($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 #__jf_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; }
function _plgListingAfterSave(&$model) { // Limit running this for new/edited listings. Not deletion of images or other listing actions. if ($this->c->name == 'listings' && in_array($this->c->action, array('_save'))) { include_once PATH_ROOT . 'administrator' . DS . 'components' . DS . 'com_joomfish' . DS . 'models' . DS . 'ContentObject.php'; $lang =& JFactory::getLanguage(); $language = $lang->getTag(); $jfm =& JoomFishManager::getInstance(); $contentElement = $jfm->getContentElement('content'); $actContentObject = new ContentObject($jfm->getLanguageID($language), $contentElement); $object = (object) $model->data['Listing']; $actContentObject->loadFromContentID($object->id); $actContentObject->copyContentToTranslation($object, $object); $actContentObject->setPublished($this->autoPublishTranslation); //Automatically publishes the translations $actContentObject->store(); if ($jfm->getCfg("transcaching", 1)) { // clean the cache! $cache = $jfm->getCache($language); $cache->clean(); } } }
/** * 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 ) */ function _setupContentElementCache() { $db =& JFactory::getDBO(); // Make usre table exists otherwise create it. $db->setQuery("CREATE TABLE IF NOT EXISTS `#__jf_tableinfo` ( `id` int(11) NOT NULL auto_increment, `joomlatablename` varchar(100) NOT NULL default '', `tablepkID` varchar(100) NOT NULL default '', PRIMARY KEY (`id`)) TYPE=MyISAM"); $db->query(); // clear out existing data $db->setQuery("DELETE FROM `#__jf_tableinfo`"); $db->query(); $joomfishManager =& JoomFishManager::getInstance(); $contentElements = $joomfishManager->getContentElements(true); $sql = "INSERT INTO `#__jf_tableinfo` (joomlatablename,tablepkID) VALUES "; $firstTime = true; foreach ($contentElements as $contentElement) { $tablename = $contentElement->getTableName(); $refId = $contentElement->getReferenceID(); $sql .= $firstTime ? "" : ","; $sql .= " ('" . $tablename . "', '" . $refId . "')"; $firstTime = false; } $db->setQuery($sql); $db->query(); }
public function getInput() { if (JPath::find(JPATH_SITE . DS . 'components' . DS . 'com_joomfish' . DS . 'helpers', 'defines.php')) { require_once JPATH_SITE . DS . 'components' . DS . 'com_joomfish' . DS . 'helpers' . DS . 'defines.php'; jimport('joomfish.manager'); } else { JError::raiseNotice('no_jf_component', JText::_('Joom!Fish component not installed correctly. Plugin not executed')); } $jfm = JoomFishManager::getInstance(); $activeLanguages = $jfm->getLanguagesIndexedById(); $value = $this->value; if (!is_array($value)) { $default = ""; $value = array(); foreach ($activeLanguages as $key => $val) { $value[$key] = $val->lang_id . "::" . $default . $val->sef; } } $indexedvalues = array(); foreach ($value as $val) { list($key, $val) = explode("::", $val, 2); $indexedvalues[$key] = $val; } $html = "<fieldset style='clear:left'><table>"; $html .= "<tr style='font-weight:bold;'><td>" . JText::_('JFIELD_LANGUAGE_LABEL') . "</td><td>" . JText::_('JFIELD_LANGUAGE_LABEL') . "</td></tr>"; foreach ($activeLanguages as $key => $val) { $html .= "<tr>"; $html .= '<td>' . $val->name . '</td><td>'; $prefix = array_key_exists($val->lang_id, $indexedvalues) ? $indexedvalues[$val->lang_id] : "lang-" . $val->sef; $idprefix = $val->lang_id . "::" . $prefix; $html .= "<input type='text' length='10' maxlength='50' id='sefprefix" . $val->lang_id . "' onblur='document.getElementById(\"hiddensefprefix" . $val->lang_id . "\").value=\"" . $val->lang_id . "::\"+this.value;' value='" . $prefix . "' />"; $html .= "<input type='hidden' id='hiddensefprefix" . $val->lang_id . "' name='" . $this->name . "[]' value='" . $idprefix . "' />"; $html .= "</td></tr>"; } $html .= "</table></fieldset>"; return $html; }
function fetchElement($name, $value, &$node, $control_name) { if (JPath::find(JPATH_SITE . DS . 'components' . DS . 'com_joomfish' . DS . 'helpers', 'defines.php')) { require_once JPATH_SITE . DS . 'components' . DS . 'com_joomfish' . DS . 'helpers' . DS . 'defines.php'; require_once JPATH_ADMINISTRATOR . DS . 'components' . DS . 'com_joomfish' . DS . 'classes' . DS . 'JoomfishManager.class.php'; } else { JError::raiseNotice('no_jf_component', JText::_('Joom!Fish component not installed correctly. Plugin not executed')); } $jfm = JoomFishManager::getInstance(); $activeLanguages = $jfm->getLanguagesIndexedById(); if (!is_array($value)) { $default = ""; $value = array(); foreach ($activeLanguages as $key => $val) { $value[$key] = $val->id . "::" . $default . $val->shortcode; } } $indexedvalues = array(); foreach ($value as $val) { list($key, $val) = split("::", $val, 2); $indexedvalues[$key] = $val; } $html = "<fieldset><table>"; $html .= "<tr style='font-weight:bold;'><td>" . JText::_("Language") . "</td><td>" . JText::_("Prefix") . "</td></tr>"; foreach ($activeLanguages as $key => $val) { $html .= "<tr>"; $html .= '<td>' . $val->name . '</td><td>'; $prefix = array_key_exists($val->id, $indexedvalues) ? $indexedvalues[$val->id] : "lang-" . $val->shortcode; $idprefix = $val->id . "::" . $prefix; $html .= "<input type='text' length='10' maxlength='50' id='sefprefix" . $val->id . "' onblur='document.getElementById(\"hiddensefprefix" . $val->id . "\").value=\"" . $val->id . "::\"+this.value;' value='" . $prefix . "' />"; $html .= "<input type='hidden' id='hiddensefprefix" . $val->id . "' name='" . $control_name . '[' . $name . '][]' . "' value='" . $idprefix . "' />"; $html .= "</td></tr>"; } $html .= "</table></fieldset>"; return $html; }
function setRefTables() { $pfunc = $this->_profile(); if ($this->_cursor === true || $this->_cursor === false) { $pfunc = $this->_profile($pfunc); return; } // Before joomfish manager is created since we can't translate so skip this anaylsis $jfManager = JoomFishManager::getInstance(); if (!$jfManager) { return; } // only needed for selects at present - possibly add for inserts/updates later $tempsql = $this->_sql; if (strpos(strtoupper(trim($tempsql)), "SELECT") !== 0) { $pfunc = $this->_profile($pfunc); return; } $config = JFactory::getConfig(); // get column metadata $fields = $this->_getFieldCount(); if ($fields <= 0) { $pfunc = $this->_profile($pfunc); return; } $this->_refTables = array(); $this->_refTables["fieldTablePairs"] = array(); $this->_refTables["tableAliases"] = array(); $this->_refTables["reverseTableAliases"] = array(); $this->_refTables["fieldAliases"] = array(); $this->_refTables["fieldTableAliasData"] = array(); $this->_refTables["fieldCount"] = $fields; // Do not store sql in _reftables it will disable the cache a lot of the time $tableAliases = array(); for ($i = 0; $i < $fields; ++$i) { $meta = $this->_getFieldMetaData($i); if (!$meta) { echo JText::_("No information available<br />\n"); } else { $tempTable = $meta->table; // if I have already found the table alias no need to do it again! if (array_key_exists($tempTable, $tableAliases)) { $value = $tableAliases[$tempTable]; } else { if (isset($meta->orgtable)) { $value = $meta->orgtable; if (isset($this->_table_prefix) && strlen($this->_table_prefix) > 0 && strpos($meta->orgtable, $this->_table_prefix) === 0) { $value = substr($meta->orgtable, strlen($this->_table_prefix)); } $tableAliases[$tempTable] = $value; } else { continue; } } if (!($value == "session" || strpos($value, "jf_") === 0) && $this->translatedContentAvailable($value)) { /// ARGH !!! I must also look for aliases for fieldname !! if (isset($meta->orgname)) { $nameValue = $meta->orgname; } else { $nameValue = $meta->name; } if (!array_key_exists($value, $this->_refTables["tableAliases"])) { $this->_refTables["tableAliases"][$value] = $meta->table; } if (!array_key_exists($meta->table, $this->_refTables["reverseTableAliases"])) { $this->_refTables["reverseTableAliases"][$meta->table] = $value; } // I can't use the field name as the key since it may not be unique! if (!in_array($value, $this->_refTables["fieldTablePairs"])) { $this->_refTables["fieldTablePairs"][] = $value; } if (!array_key_exists($nameValue, $this->_refTables["fieldAliases"])) { $this->_refTables["fieldAliases"][$meta->name] = $nameValue; } // Put all the mapping data together so that everything is in sync and I can check fields vs aliases vs tables in one place $this->_refTables["fieldTableAliasData"][$i] = array("fieldNameAlias" => $meta->name, "fieldName" => $nameValue, "tableNameAlias" => $meta->table, "tableName" => $value); } } } $pfunc = $this->_profile($pfunc); }
/** * This method creates an overview of unpublished translations independed of the content element * @return array of unpublished translations or null */ private function _testUnpublisedTranslations() { $db = JFactory::getDBO(); $unpublishedTranslations = null; $sql = "select jfc.reference_table, jfc.reference_id, jfc.language_id, jfl.title as language" . "\n from #__jf_content as jfc, #__languages as jfl" . "\n where jfc.published=0 and jfc.language_id = jfl.lang_id" . "\n group by jfc.reference_table, jfc.reference_id, jfc.language_id" . "\n limit 0, 50"; $db->setQuery($sql); if ($rows = $db->loadObjectList()) { foreach ($rows as $row) { $unpublished = array(); $unpublished['reference_table'] = $row->reference_table; $unpublished['catid'] = $row->reference_table; $unpublished['reference_id'] = $row->reference_id; $unpublished['language_id'] = $row->language_id; $unpublished['language'] = $row->language; $unpublishedTranslations[] = $unpublished; } } $sqlnative = $db->getQuery(true); $sqlnative->select('jfc.reference_table, jfc.reference_id, jfc.translation_id, jfc.language AS langcode, jfl.title AS language, jfl.lang_id AS language_id'); $sqlnative->from('#__jf_translationmap AS jfc'); $sqlnative->join('', '#__languages AS jfl ON jfc.language = jfl.lang_code'); $celements = JoomFishManager::getInstance()->getContentElements(); $where = array(); foreach ($celements as $contentElement) { if ($contentElement->getTarget() == "native") { $sqlnative->leftJoin('#__' . $contentElement->getTableName() . ' AS jf' . $contentElement->getTableName() . ' ON jfc.reference_table=\'' . $contentElement->getTableName() . '\'' . ' AND jf' . $contentElement->getTableName() . '.' . $contentElement->getReferenceId() . '= jfc.translation_id' . ' AND jf' . $contentElement->getTableName() . '.' . $contentElement->getPublishedField() . '=0'); $where[] = 'jf' . $contentElement->getTableName() . '.' . $contentElement->getPublishedField() . '=0'; $sqlnative->select('jf' . $contentElement->getTableName() . '.' . $contentElement->getPublishedField() . ' AS published'); } } $where = implode(' OR ', $where); $sqlnative->where($where); $db->setQuery($sqlnative); if ($rowsnative = $db->loadObjectList()) { foreach ($rowsnative as $row) { $unpublished = array(); $unpublished['reference_table'] = $row->reference_table; $unpublished['catid'] = $row->reference_table; $unpublished['reference_id'] = $row->reference_id; $unpublished['language_id'] = $row->language_id; $unpublished['language'] = $row->language; $unpublishedTranslations[] = $unpublished; } } return $unpublishedTranslations; }
function _determineLanguage($getLang = null, $redir = false, $useMainLang = false) { // set the language for JoomFish if (SEFTools::JoomFishInstalled()) { $sefConfig =& SEFConfig::getConfig(); $registry =& JFactory::getConfig(); // Check if the Jfrouter is enabled $jfrouterEnabled = JPluginHelper::isEnabled('system', 'jfrouter'); // save the default language of the site if needed if (!$jfrouterEnabled) { $locale = $registry->getValue('config.language'); $GLOBALS['mosConfig_defaultLang'] = $locale; $registry->setValue("config.defaultlang", $locale); } // get instance of JoomFishManager to obtain active language list and config values $jfm =& JoomFishManager::getInstance(); // Get language from request if (!empty($getLang)) { $lang = $getLang; } // Try to get language code from JF cookie if ($sefConfig->jfLangCookie) { $jfCookie = JRequest::getVar('jfcookie', null, 'COOKIE'); if (isset($jfCookie['lang'])) { $cookieCode = $jfCookie['lang']; } } // Try to find language from browser settings if ($sefConfig->jfBrowserLang && isset($_SERVER['HTTP_ACCEPT_LANGUAGE']) && !empty($_SERVER['HTTP_ACCEPT_LANGUAGE'])) { $active_iso = array(); $active_isocountry = array(); $active_code = array(); $activeLanguages = $jfm->getActiveLanguages(); if (count($activeLanguages) > 0) { foreach ($activeLanguages as $alang) { $active_iso[] = $alang->iso; if (preg_match('/[_-]/i', $alang->iso)) { $iso = str_replace('_', '-', $alang->iso); $isocountry = explode('-', $iso); $active_isocountry[] = $isocountry[0]; } $active_code[] = $alang->shortcode; } // figure out which language to use - browser languages are based on ISO codes $browserLang = explode(',', $_SERVER["HTTP_ACCEPT_LANGUAGE"]); foreach ($browserLang as $blang) { if (in_array($blang, $active_iso)) { $client_lang = $blang; break; } $shortLang = substr($blang, 0, 2); if (in_array($shortLang, $active_isocountry)) { $client_lang = $shortLang; break; } // compare with code if (in_array($shortLang, $active_code)) { $client_lang = $shortLang; break; } } if (!empty($client_lang)) { if (strlen($client_lang) == 2) { $browserCode = SEFTools::getLangLongCode($client_lang); } else { $browserCode = $client_lang; } } } } if (!$jfrouterEnabled && $redir && $sefConfig->langPlacement != _COM_SEF_LANG_DOMAIN && (isset($cookieCode) || isset($browserCode)) && $sefConfig->mainLanguage != '0') { if (isset($cookieCode)) { $sc = SEFTools::getLangCode($cookieCode); } else { $sc = SEFTools::getLangCode($browserCode); } // Check the referer to see if we should redirect $shouldRedir = false; if (isset($_SERVER['HTTP_REFERER'])) { $refUri = new JURI($_SERVER['HTTP_REFERER']); $uri = JURI::getInstance(); $refHost = $refUri->getHost(); $host = $uri->getHost(); if ($refHost != $host) { $shouldRedir = true; } } else { $shouldRedir = true; } if ($shouldRedir) { if (!empty($lang) && $sc != $lang || empty($lang) && $sc != $sefConfig->mainLanguage) { // Redirect to correct site $mainframe =& JFactory::getApplication(); $href = JRoute::_('index.php?lang=' . $sc, false); $mainframe->redirect($href); exit; } } } // Check if language is selected if (empty($lang) && !$jfrouterEnabled) { // If route and query string are empty, use the main language // note: removed && $redir - it was not possible to switch language to main language // on other page than homepage (let's see if it causes any other problem) // note: added $useMainLang - now it should work for both the VM checkout and using // main language with component's own router if ($useMainLang && (empty($code) || !JLanguage::exists($code))) { if ($sefConfig->mainLanguage != '0') { $code = SEFTools::GetLangLongCode($sefConfig->mainLanguage); } } // Try to get language code from JF cookie if (empty($code) || !JLanguage::exists($code)) { if (isset($cookieCode)) { $code = $cookieCode; } } // Try to get language from browser if needed if (empty($code) || !JLanguage::exists($code)) { if (isset($browserCode)) { $code = $browserCode; } } // Get language from configuration if needed if (empty($code) || !JLanguage::exists($code)) { if ($sefConfig->mainLanguage != '0') { $code = SEFTools::GetLangLongCode($sefConfig->mainLanguage); } } // Get default language if needed if (empty($code) || !JLanguage::exists($code)) { $code = $registry->getValue('config.language'); } } // get language long code if needed if (empty($code)) { if (empty($lang)) { return; } $code = SEFTools::getLangLongCode($lang); } if (!empty($code)) { $jfrparams = $registry->getValue('jfrouter.params'); // set the site language $resetLang = false; if ($code != SEFTools::getLangLongCode()) { if (!$jfrouterEnabled || $jfrouterEnabled && $jfrparams->get('sefordomain', 'sefprefix') == 'sefprefix') { $language =& JFactory::getLanguage(); $language->setLanguage($code); $language->load(); // set the backward compatible language $backLang = $language->getBackwardLang(); $GLOBALS['mosConfig_lang'] = $backLang; $registry->setValue("config.lang", $backLang); $resetLang = true; } } // set joomfish language if needed if ($resetLang || !$jfrouterEnabled) { $jfLang = TableJFLanguage::createByJoomla($code); $registry->setValue("joomfish.language", $jfLang); // set some more variables $mainframe =& JFactory::getApplication(); $registry->setValue("config.multilingual_support", true); $mainframe->setUserState('application.lang', $jfLang->code); $registry->setValue("config.jflang", $jfLang->code); $registry->setValue("config.lang_site", $jfLang->code); $registry->setValue("config.language", $jfLang->code); $registry->setValue("joomfish.language", $jfLang); // overwrite global config with values from $jfLang if set to in JoomFish $jfparams = JComponentHelper::getParams("com_joomfish"); $overwriteGlobalConfig = $jfparams->get('overwriteGlobalConfig', 0); if ($overwriteGlobalConfig) { // We should overwrite additional global variables based on the language parameter configuration $langParams = new JParameter($jfLang->params); $paramarray = $langParams->toArray(); foreach ($paramarray as $key => $val) { $registry->setValue("config." . $key, $val); if (defined("_JLEGACY")) { $name = 'mosConfig_' . $key; $GLOBALS[$name] = $val; } } } // set the cookie with language if (!$jfrouterEnabled && $sefConfig->jfLangCookie || $jfrouterEnabled && $jfrparams->get('enableCookie', 1)) { setcookie("lang", "", time() - 1800, "/"); setcookie("jfcookie", "", time() - 1800, "/"); setcookie("jfcookie[lang]", $code, time() + 24 * 3600, '/'); } } } } }
/** * */ 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 = 'index3.php?option=com_joomfish&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 = JoomFishManager::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 = 'index3.php?option=com_joomfish&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(); }
/** * 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 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 = JoomFishManager::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->getValue("config.jflang"); include_once JPATH_ADMINISTRATOR . DS . "components" . DS . "com_joomfish" . '/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]; }
function shSetJfLanguage($requestlang) { if (empty($requestlang)) { return; } // get instance of JoomFishManager to obtain active language list and config values $jfm =& JoomFishManager::getInstance(); $activeLanguages = $jfm->getActiveLanguages(); // get the name of the language file for joomla $jfLang = TableJFLanguage::createByShortcode($requestlang, true); // set Joomfish stuff // Get the global configuration object global $mainframe; $registry =& JFactory::getConfig(); $params = $registry->getValue("jfrouter.params"); $enableCookie = empty($params) ? 1 : $params->get('enableCookie', 1); if ($enableCookie) { setcookie("lang", "", time() - 1800, "/"); setcookie("jfcookie", "", time() - 1800, "/"); setcookie("jfcookie[lang]", $jfLang->shortcode, time() + 24 * 3600, '/'); } $GLOBALS['iso_client_lang'] = $jfLang->shortcode; $GLOBALS['mosConfig_lang'] = $jfLang->code; $mainframe->setUserState('application.lang', $jfLang->code); $registry->setValue("config.jflang", $jfLang->code); $registry->setValue("config.lang_site", $jfLang->code); $registry->setValue("config.language", $jfLang->code); $registry->setValue("joomfish.language", $jfLang); // Force factory static instance to be updated if necessary $lang =& JFactory::getLanguage(); if ($jfLang->code != $lang->getTag()) { $lang = JFactory::_createLanguage(); } $lang16 =& shjlang16Helper::getLanguage(); if ($jfLang->code != $lang16->getTag()) { $lang16 = Jlanguage16::createLanguage(); } // overwrite with the valued from $jfLang $params = new JParameter($jfLang->params); $paramarray = $params->toArray(); foreach ($paramarray as $key => $val) { $registry->setValue("config." . $key, $val); if (defined("_JLEGACY")) { $name = 'mosConfig_' . $key; $GLOBALS[$name] = $val; } } // set our own data $GLOBALS['shMosConfig_lang'] = $lang->get('backwardlang', 'english'); $GLOBALS['shMosConfig_locale'] = $jfLang->code; $GLOBALS['shMosConfig_shortcode'] = $jfLang->shortcode; }
/** * 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 = JoomFishManager::getInstance(); if ($oldInstall == 1 && $jfManager->getCfg('mbfupgradeDone')) { $oldInstall = 2; } return $oldInstall; }
/** * Constructor */ function __construct() { //jimport('JoomfishManager.class'); $this->_joomfishManager =& JoomFishManager::getInstance(); }
/** * 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 = JoomFishManager::getInstance(); $sql = ''; switch ($phase) { case 1: $original2languageInfo = array(); $sql = "select distinct CONCAT('" . $db->getPrefix() . "',reference_table) from #__jf_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; }
/** 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 JoomFishManager - use these if possible $jfManager = JoomFishManager::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->name; $this->_contentElement = $contentElement; }
','clear');"><span class="icon-32-delete"></span><?php echo JText::_('Delete'); ?> </a> <?php } } ?> </td> </tr> <?php } else { // Special Params handling // if translated value is blank then we always copy across the original value $joomFishManager =& JoomFishManager::getInstance(); if ($joomFishManager->getCfg('copyparams', 1) && $translationContent->value == "") { $translationContent->value = $field->originalValue; } ?> <tr class="<?php echo "row{$k}"; ?> "> <td colspan="3"> <table class='translateparams'> <tr> <td valign="top" style="text-align:center!important"><?php echo JText::_('ORIGINAL'); ?> </td>
/** * Method to initialize the language depended image (flag) browser * The browser is initialized with the default root path based on the Joomfish configuration * @param $tpl */ public function filebrowser($tpl = null) { $document = JFactory::getDocument(); $livesite = JURI::base(); $document->addStyleSheet($livesite . 'components/com_joomfish/assets/css/joomfish.css'); $document->addStyleSheet(JURI::root(true) . '/media/media/css/popup-imagelist.css'); JHtml::_('behavior.modal'); JHTML::script('com_joomfish/joomfish.mootools.js', true, true); $jfManager = JoomFishManager::getInstance(); $root = $jfManager->getCfg('directory_flags'); $current = JRequest::getVar('current', ''); if ($current != '') { $root = dirname($current); } // remove leading / in case it exists $root = preg_replace('/^\\/(.*)/', "\$1", $root); $flagField = JRequest::getVar('flagField', ''); $folder = JRequest::getVar('folder', $root, 'default', 'path'); $type = JRequest::getCmd('type', 'image'); if (JString::trim($folder) == "") { $path = JPATH_SITE . DS . JPath::clean('/'); } else { $path = JPATH_SITE . DS . JPath::clean($folder); } JPath::check($path); $title = JText::_('BROWSE_LANGUAGE_FLAGS'); $filter = '.jpg|png|gif|xcf|odg|bmp|jpeg'; if (JFolder::exists($path)) { $folderList = JFolder::folders($path); $filesList = JFolder::files($path, $filter); } if (!empty($folder)) { $parent = substr($folder, 0, strrpos($folder, '/')); } else { $parent = ''; } $this->assignRef('folders', $folderList); $this->assignRef('files', $filesList); $this->assignRef('parent', $parent); $this->assignRef('path', $folder); $this->assignRef('type', $type); $this->assignRef('title', $title); $this->assignRef('flagField', $flagField); parent::display($tpl); }
if (!JoomfishExtensionHelper::isJoomFishActive()) { return; } $db = JFactory::getDBO(); $db->_profile("langmod", true); // Include the helper functions only once JLoader::import('helper', dirname(__FILE__), 'jfmodule'); JLoader::register('JoomFishVersion', JOOMFISH_ADMINPATH . DS . 'version.php'); $type = trim($params->get('type', 'rawimages')); $layout = JModuleHelper::getLayoutPath('mod_jflanguageselection', $type); $inc_jf_css = intval($params->get('inc_jf_css', 1)); $type = trim($params->get('type', 'dropdown')); $show_active = intval($params->get('show_active', 1)); $spacer = trim($params->get('spacer', ' ')); jimport('joomla.filesystem.file'); $jfManager = JoomFishManager::getInstance(); $langActive = $jfManager->getActiveLanguages(true); // setup Joomfish plugins $dispatcher = JDispatcher::getInstance(); JPluginHelper::importPlugin('joomfish'); $dispatcher->trigger('onAfterModuleActiveLanguages', array(&$langActive)); $outString = ''; if (!isset($langActive) || count($langActive) == 0) { // No active languages => nothing to show :-( return; } // check for unauthorised access to inactive language $curLanguage = JFactory::getLanguage(); if (!array_key_exists($curLanguage->getTag(), $langActive)) { reset($langActive); //$currentlang = current($langActive);
/** * Description * * @access public * @return int The number of rows returned from the most recent query. */ function getNumRows($cur = null, $translate = true, $language = null) { $count = parent::getNumRows($cur); if (!$translate) { return $count; } // setup Joomfish plugins $dispatcher =& JDispatcher::getInstance(); JPluginHelper::importPlugin('joomfish'); // must allow fall back for contnent table localisation to work $allowfallback = true; $refTablePrimaryKey = ""; $reference_table = ""; $ids = ""; $jfm =& JoomFishManager::getInstance(); $this->_setLanguage($language); $registry =& JFactory::getConfig(); $defaultLang = $registry->getValue("config.defaultlang"); if ($defaultLang == $language) { $rows = array($count); $dispatcher->trigger('onBeforeTranslation', array(&$rows, $ids, $reference_table, $language, $refTablePrimaryKey, $this->_getRefTables(), $this->_sql, $allowfallback)); $count = $rows[0]; return $count; } $rows = array($count); $dispatcher->trigger('onBeforeTranslation', array(&$rows, $ids, $reference_table, $language, $refTablePrimaryKey, $this->_getRefTables(), $this->_sql, $allowfallback)); $dispatcher->trigger('onAfterTranslation', array(&$rows, $ids, $reference_table, $language, $refTablePrimaryKey, $this->_getRefTables(), $this->_sql, $allowfallback)); $count = $rows[0]; return $count; }