Beispiel #1
0
 /**
  * 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;
 }
Beispiel #2
0
 /**
  * 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;
 }
Beispiel #3
0
 /** 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 );
 }