/** * This method checks the translation status * The process follows goes through out all existing translations and checks their individual status. * The output is a summary information based grouped by content element files and the languages * * @param array $translationStatus array with translation state values * @param int $phase which phase of the status check * @param string $statecheck_i running row number starting with -1! * @param string $message system message */ private function _testTranslationStatus($translationStatus, &$phase, &$statecheck_i, &$message) { $db = JFactory::getDBO(); $sql = ''; switch ($phase) { case 1: $sql = "SELECT jfc.reference_table, jfc.language_id, jfl.name AS language" . "\n FROM #__falang_content AS jfc" . "\n JOIN #__languages AS jfl ON jfc.language_id = jfl.id" . "\n GROUP BY jfc.reference_table, jfc.language_id"; $db->setQuery($sql); $rows = $db->loadObjectList(); $translationStatus = array(); if (is_array($rows) && count($rows) > 0) { foreach ($rows as $row) { $status = array(); $contentElement = $this->_falangManager->getContentElement($row->reference_table); $status['content'] = $contentElement->Name; $status['catid'] = $row->reference_table; $status['language_id'] = $row->language_id; $status['language'] = $row->language; $status['total'] = ''; $status['state_valid'] = ''; $status['state_unvalid'] = ''; $status['state_missing'] = ''; $status['state'] = ''; $status['published'] = ''; $sql = "SELECT * FROM #__falang_content" . "\n WHERE reference_table='" . $row->reference_table . "'" . "\n AND language_id=" . $row->language_id . "\n GROUP BY reference_id"; $db->setQuery($sql); $totalrows = $db->loadRowList(); if ($totalrows = $db->loadRowList()) { $status['total'] = count($totalrows); } $translationStatus[] = $status; } $message = JText::_('TRANSLATION_PHASE1_GENERALCHECK'); $phase++; } else { $message = JText::_('No Translation available'); $phase = 4; // exit } break; case 2: if (is_array($translationStatus) && count($translationStatus) > 0) { for ($i = 0; $i < count($translationStatus); $i++) { $stateRow = $translationStatus[$i]; $sql = "select *" . "\n from #__falang_content as jfc" . "\n where published=1" . "\n and reference_table='" . $stateRow['catid'] . "'" . "\n and language_id=" . $stateRow['language_id'] . "\n group by reference_ID"; $db->setQuery($sql); if ($rows = $db->loadRowList()) { $stateRow['published'] = count($rows); } else { $stateRow['published'] = 0; } } } $message = JText::sprintf('TRANSLATION_PHASE2_PUBLISHEDCHECK', ''); $phase++; break; case 3: if (is_array($translationStatus) && count($translationStatus) > 0) { if ($statecheck_i >= 0 && $statecheck_i < count($translationStatus)) { $stateRow = $translationStatus[$statecheck_i]; $contentElement = $this->_falangManager->getContentElement($stateRow['catid']); $filters = array(); // we need to find an end, thats why the filter is at 10.000! $db->setQuery($contentElement->createContentSQL($stateRow['language_id'], null, 0, 10000, $filters)); if ($rows = $db->loadObjectList()) { $stateRow['state_valid'] = 0; $stateRow['state_unvalid'] = 0; $stateRow['state_missing'] = 0; for ($i = 0; $i < count($rows); $i++) { $contentObject = new ContentObject($stateRow['language_id'], $contentElement); $contentObject->readFromRow($rows[$i]); $rows[$i] = $contentObject; switch ($contentObject->state) { case 1: $stateRow['state_valid']++; break; case 0: $stateRow['state_unvalid']++; break; case -1: default: $stateRow['state_missing']++; break; } } } } if ($statecheck_i < count($translationStatus) - 1) { $statecheck_i++; $message = JText::sprintf('TRANSLATION_PHASE2_PUBLISHEDCHECK', ' (' . $translationStatus[$statecheck_i]['content'] . '/' . $translationStatus[$statecheck_i]['language'] . ')'); } else { $message = JText::_('TRANSLATION_PHASE3_STATECHECK'); $phase = 4; // exit } } else { $message = JText::_('TRANSLATION_PHASE3_STATECHECK'); $phase = 4; // exit } break; } return $translationStatus; }
/** * 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; }
/** Presentation of the content's that must be translated */ function showTranslationOverview($language_id, $catid) { $db =& JFactory::getDBO(); global $mainframe; $limit = $mainframe->getUserStateFromRequest('global.list.limit', 'limit', $mainframe->getCfg('list_limit'), 'int'); $limitstart = $mainframe->getUserStateFromRequest("view{com_joomfish}limitstart", 'limitstart', 0); $search = $mainframe->getUserStateFromRequest("search{com_joomfish}", 'search', ''); $search = $db->getEscaped(trim(strtolower($search))); // Build up the rows for the table $rows = null; $total = 0; $filterHTML = array(); if ($language_id != -1 && isset($catid) && $catid != "") { $contentElement = $this->_joomfishManager->getContentElement($catid); if (!$contentElement) { $catid = "content"; $contentElement = $this->_joomfishManager->getContentElement($catid); } JLoader::import('models.TranslationFilter', JOOMFISH_ADMINPATH); $tranFilters = getTranslationFilters($catid, $contentElement); $total = $contentElement->countReferences($language_id, $tranFilters); if ($total < $limitstart) { $limitstart = 0; } $db->setQuery($contentElement->createContentSQL($language_id, null, $limitstart, $limit, $tranFilters)); $rows = $db->loadObjectList(); if ($db->getErrorNum()) { echo $db->stderr(); // should not stop the page here otherwise there is no way for the user to recover $rows = array(); } // Manipulation of result based on further information for ($i = 0; $i < count($rows); $i++) { JLoader::import('models.ContentObject', JOOMFISH_ADMINPATH); $contentObject = new ContentObject($language_id, $contentElement); $contentObject->readFromRow($rows[$i]); $rows[$i] = $contentObject; } foreach ($tranFilters as $tranFilter) { $afilterHTML = $tranFilter->_createFilterHTML(); if (isset($afilterHTML)) { $filterHTML[$tranFilter->filterType] = $afilterHTML; } } } // Create the pagination object jimport('joomla.html.pagination'); $pageNav = new JPagination($total, $limitstart, $limit); // get list of element names $elementNames[] = JHTML::_('select.option', '', JText::_('Please select')); //$elementNames[] = JHTML::_('select.option', '-1', '- All Content elements' ); // force reload to make sure we get them all $elements = $this->_joomfishManager->getContentElements(true); foreach ($elements as $key => $element) { $elementNames[] = JHTML::_('select.option', $key, $element->Name); } $clist = JHTML::_('select.genericlist', $elementNames, 'catid', 'class="inputbox" size="1" onchange="if(document.getElementById(\'select_language_id\').value>=0) document.adminForm.submit();"', 'value', 'text', $catid); // get the view $this->view =& $this->getView("translate", "html"); // Set the layout $this->view->setLayout('default'); // Assign data for view - should really do this as I go along $this->view->assignRef('rows', $rows); $this->view->assignRef('search', $search); $this->view->assignRef('pageNav', $pageNav); $this->view->assignRef('clist', $clist); $this->view->assignRef('language_id', $language_id); $this->view->assignRef('filterlist', $filterHTML); $this->view->assignRef('language_id', $language_id); $this->view->display(); //TranslateViewTranslate::showTranslationOverview( $rows, $search, $pageNav, $langlist, $clist, $catid ,$language_id,$filterHTML ); }