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(); } } }
/** * 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; }
function publishTranslation() { $catid = $this->_catid; $publish = $this->_task == "publish" ? 1 : 0; $cid = JRequest::getVar('cid', array(0)); $model =& $this->view->getModel(); if (strpos($cid[0], '|') >= 0) { list($translation_id, $contentid, $language_id) = explode('|', $cid[0]); } foreach ($cid as $cid_row) { list($translation_id, $contentid, $language_id) = explode('|', $cid_row); $contentElement = $this->_joomfishManager->getContentElement($catid); JLoader::import('models.ContentObject', JOOMFISH_ADMINPATH); $actContentObject = new ContentObject($language_id, $contentElement); $actContentObject->loadFromContentID($contentid); if ($actContentObject->state >= 0) { $actContentObject->setPublished($publish); $actContentObject->store(); $model->setState('message', $publish ? JText::_('Translation published') : JText::_('Translation unpublished')); } } // redirect to overview $this->showTranslate(); }
/** * Overwritten update function to enable storage of translated information. * Based on the configuration in the content elements the automatic storage of * information is activated or not. It is important that this upgraded method will ensure * that all information will be written into the translation table. Only in the case that the * default language is choosen the information will be updated directly within the original tables. * To make sure that all other information will be written into the tables as expected the * statements will be manipulated as needed. * * @param string table name * @param object instance with information to store * @param string primary key name of table * @param boolean update fields with null or not * @param boolean passthru without storing information in a translation table */ function updateObject($table, &$object, $keyName, $updateNulls = true, $passthru = false) { $pfunc = $this->_profile(); global $_JOOMFISH_MANAGER; if (isset($_JOOMFISH_MANAGER)) { $this->_setLanguage($language); } $conf =& JFactory::getConfig(); $default_lang = $conf->getValue('config.defaultlang'); // if the currect language is the site default language the translations will not be updated! $passthru = $language == $default_lang; if (!$passthru && isset($_JOOMFISH_MANAGER)) { $actContentObject = null; if (isset($table) && $table != "") { $tableName = ereg_replace('^#__', '', $table); if ($table != "#__jf_content") { // *** QUESTION ***// // IS THIS TEST APPROPRIATE HERE - I THINK IT MEANS YOU CAN'T DO A FIRST TRANSLATION FOR A TABLE VIA THE FRONT END // ** TEST BEFORE 1.8 **// //if ($this->translatedContentAvailable($table)) { $contentElement = $_JOOMFISH_MANAGER->getContentElement($tableName); if (isset($contentElement)) { include_once JPATH_ADMINISTRATOR . "/components/com_joomfish/models/ContentObject.php"; $actContentObject = new ContentObject($_JOOMFISH_MANAGER->getLanguageID($language), $contentElement); if (isset($object->{$keyName})) { $actContentObject->loadFromContentID($object->{$keyName}); $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 ($_JOOMFISH_MANAGER->getCfg("frontEndPublish")) { $user =& JFactory::getUser(); $access = new stdClass(); $access->canPublish = $user->authorize('com_content', 'publish', 'content', 'all'); if ($access->canPublish) { $actContentObject->setPublished($actContentObject->published); } } $actContentObject->store(); if ($_JOOMFISH_MANAGER->getCfg("transcaching", 1)) { // clean the cache! $cache = $_JOOMFISH_MANAGER->getCache($language); $cache->clean(); } } } } //} } $pfunc = $this->_profile($pfunc); 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'); //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 update function to enable storage of translated information. * Based on the configuration in the content elements the automatic storage of * information is activated or not. It is important that this upgraded method will ensure * that all information will be written into the translation table. Only in the case that the * default language is choosen the information will be updated directly within the original tables. * To make sure that all other information will be written into the tables as expected the * statements will be manipulated as needed. * * @param string table name * @param object instance with information to store * @param string primary key name of table * @param boolean update fields with null or not * @param boolean passthru without storing information in a translation table */ function updateObject($table, &$object, $keyName, $updateNulls = true, $passthru = false) { global $mosConfig_lang, $mosConfig_defaultLang, $_JOOMFISH_MANAGER; // if the currect language is the site default language the translations will not be updated! $passthru = $mosConfig_lang == $mosConfig_defaultLang; if (!$passthru && isset($_JOOMFISH_MANAGER)) { $actContentObject = null; if (isset($table) && $table != "") { $tableName = ereg_replace('^#__', '', $table); // *** QUESTION ***// // IS THIS TEST APPROPRIATE HERE - I THINK IT MEANS YOU CAN'T DO A FIRST TRANSLATION FOR A TABLE VIA THE FRONT END // ** TEST BEFORE 1.8 **// //if ($this->translatedContentAvailable($table)) { $contentElement = $_JOOMFISH_MANAGER->getContentElement($tableName); if (isset($contentElement)) { $actContentObject = new ContentObject($_JOOMFISH_MANAGER->getLanguageID($mosConfig_lang), $contentElement); if (isset($object->{$keyName})) { $actContentObject->loadFromContentID($object->{$keyName}); $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 ($_JOOMFISH_MANAGER->getCfg("frontEndPublish")) { global $acl; $user =& JFactory::getUser(); $access = new stdClass(); $access->canPublish = $acl->acl_check('action', 'publish', 'users', $user->usertype, 'content', 'all'); if ($access->canPublish) { $actContentObject->setPublished($actContentObject->published); } } $actContentObject->store(); } } //} } return $this->_db->updateObject($table, $object, $keyName, $updateNulls); } else { return $this->_db->updateObject($table, $object, $keyName, $updateNulls); } }
/** * Overwritten update function to enable storage of translated information. * Based on the configuration in the content elements the automatic storage of * information is activated or not. It is important that this upgraded method will ensure * that all information will be written into the translation table. Only in the case that the * default language is choosen the information will be updated directly within the original tables. * To make sure that all other information will be written into the tables as expected the * statements will be manipulated as needed. * * @param string table name * @param object instance with information to store * @param string primary key name of table * @param boolean update fields with null or not * @param boolean passthru without storing information in a translation table */ function updateObject($table, &$object, $keyName, $updateNulls = true, $passthru = false) { $pfunc = $this->_profile(); $jfManager = JoomFishManager::getInstance(); if (isset($jfManager)) { $this->_setLanguage($language); } $conf = JFactory::getConfig(); $default_lang = $conf->getValue('config.defaultlang'); // 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) { jimport('joomla.html.parameter'); $testparams = new JParameter($test->attribs); $testlang = $testparams->get('language', false); if ($testlang == $language) { // no translation should be created $language = $default_lang; } } } // if the currect language is the site default language the translations will not be updated! $passthru = $language == $default_lang; if (!$passthru && isset($jfManager)) { $actContentObject = null; if (isset($table) && $table != "") { $tableName = preg_replace('/^#__/', '', $table); if ($table != "#__jf_content") { $contentElement = $jfManager->getContentElement($tableName); if (isset($contentElement)) { include_once JPATH_ADMINISTRATOR . "/components/com_joomfish/models/ContentObject.php"; $actContentObject = new ContentObject($jfManager->getLanguageID($language), $contentElement); if (isset($object->{$keyName})) { $actContentObject->loadFromContentID($object->{$keyName}); $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 ($jfManager->getCfg("frontEndPublish")) { $user = JFactory::getUser(); $access = new stdClass(); $access->canPublish = $user->authorize('com_content', 'publish', 'content', 'all'); if ($access->canPublish) { $actContentObject->setPublished($actContentObject->published); } } $actContentObject->store(); if ($jfManager->getCfg("transcaching", 1)) { // clean the cache! $cache = $jfManager->getCache($language); $cache->clean(); } } } } } $pfunc = $this->_profile($pfunc); 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); } }