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(); } } }
/** * show original value in an IFrame - for form safety * */ function originalValue() { $cid = trim(JRequest::getVar('cid', "")); $language_id = JRequest::getInt('lang', 0); if ($cid == "") { echo JText::_("Invalid paramaters"); return; } $translation_id = 0; $contentid = intval($cid); $catid = $this->_catid; global $mainframe; $user =& JFactory::getUser(); $db =& JFactory::getDBO(); $actContentObject = null; if (isset($catid) && $catid != "") { $contentElement = $this->_joomfishManager->getContentElement($catid); JLoader::import('models.ContentObject', JOOMFISH_ADMINPATH); $actContentObject = new ContentObject($language_id, $contentElement); $actContentObject->loadFromContentID($contentid); } $fieldname = JRequest::getString('field', ''); // get the view $this->view =& $this->getView('translate'); // Set the layout $this->view->setLayout('originalvalue'); // Assign data for view - should really do this as I go along $this->view->assignRef('actContentObject', $actContentObject); $this->view->assignRef('field', $fieldname); $this->view->display(); }
/** * 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); } }
/** * render content state information */ function renderContentState() { $joomFishManager = JoomFishManager::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 = $joomFishManager->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', JOOMFISH_ADMINPATH); $contentObject = new ContentObject($ceInfo['language_id'], $contentElement); $contentObject->loadFromContentID($ceInfo['reference_id']); $link = 'index2.php?option=com_joomfish&task=translate.edit&&catid=' . $ceInfo['catid'] . '&cid[]=0|' . $ceInfo['reference_id'] . '|' . $ceInfo['language_id']; $hrefEdit = "<a href='" . $link . "'>" . $contentObject->title . "</a>"; $link = 'index2.php?option=com_joomfish&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; }
/** * 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 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); } }