_modelName; } /** * 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 * * @access protected * @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 */ function testTranslationStatus( $translationStatus, &$phase, &$statecheck_i, &$message ) { $db =& JFactory::getDBO(); $jfManager = JoomFishManager::getInstance(); $sql = ''; switch ($phase) { case 1: $sql = "SELECT jfc.reference_table, jfc.language_id, jfl.name AS language" . "\n FROM #__jf_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 = $jfManager->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 #__jf_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; $isetQuery($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_igetContentElement( $stateRow['catid'] ); $filters = array(); // trap missing content element files if (is_null($contentElement)){ $message = JText::_('TRANSLATION_PHASE3_STATECHECK'); $stateRow['state_valid'] = 0; $stateRow['state_unvalid'] = 0; $stateRow['state_missing'] = 0; $statecheck_i ++; break; } // 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; $ireadFromRow( $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_igetPrefix()."',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['missing_table'] = false; $ceInfo['message'] = ''; $tablename = $db->getPrefix().$ce->referenceInformation["tablename"]; if (in_array($tablename,$tables)){ // get total count of table entries $db->setQuery( 'SELECT COUNT(*) FROM ' .$tablename ); $ceInfo['total'] = $db->loadResult(); if( in_array($tablename,$tablesWithTranslations) ) { // get orphans $db->setQuery( $ce->createOrphanSQL( -1, null, -1, -1,$tranFilters ) ); $rows = $db->loadObjectList(); if ($db->getErrorNum()) { $this->_message = $db->stderr(); return false; } $ceInfo['orphans'] = count($rows); // get number of valid translations $ceInfo['valid'] = 0; // get number of outdated translations $ceInfo['outdated'] = $ceInfo['total'] - $ceInfo['orphans'] - $ceInfo['valid']; }else { $ceInfo['orphans'] = '0'; } } elseif (!in_array($tablename, $tables)) { $ceInfo['missing_table'] = true; $ceInfo['message'] = JText::sprintf(TABLE_DOES_NOT_EXIST, $tablename ); } $originalStatus[] = $ceInfo; } $message = JText::sprintf('ORIGINAL_PHASE1_CHECK', ''); $phase ++; $statecheck_i = 0; break; case 2: if( is_array($originalStatus) && count ($originalStatus)>0 ) { if( $statecheck_i>=0 && $statecheck_isetQuery($sql); $rows = $db->loadRowList(); $key = 'langentry_' .$lang->getLanguageCode(); $stateRow[$key] = count($rows); } } if ($statecheck_i