| Server IP : 195.130.67.5 / Your IP : 216.73.217.154 Web Server : Microsoft-IIS/10.0 System : Windows NT WEBSERVER1 10.0 build 17763 (Windows Server 2016) i586 User : IUSR ( 0) PHP Version : 7.4.19 Disable Function : NONE MySQL : OFF | cURL : ON | WGET : OFF | Perl : OFF | Python : OFF | Sudo : OFF | Pkexec : OFF Directory : /inetpub/wwwroot/icd/administrator/components/com_joomfish/models/ |
Upload File : |
<?php
/**
* Joom!Fish - Multi Lingual extention and translation manager for Joomla!
* Copyright (C) 2003-2009 Think Network GmbH, Munich
*
* All rights reserved. The Joom!Fish project is a set of extentions for
* the content management system Joomla!. It enables Joomla!
* to manage multi lingual sites especially in all dynamic information
* which are stored in the database.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,USA.
*
* The "GNU General Public License" (GPL) is available at
* http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
* -----------------------------------------------------------------------------
* $Id: statistics.php 1344 2009-06-18 11:50:09Z akede $
* @package joomfish
* @subpackage Models
*
*/
// Check to ensure this file is included in Joomla!
defined('_JEXEC') or die();
jimport( 'joomla.application.component.model' );
/**
* @package Joom!Fish
* @subpackage Model.statistics
*/
class StatisticsModelStatistics extends JModel
{
var $_modelName = 'statistics';
/**
* return the model name
*/
function getName() {
return $this->_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; $i<count($translationStatus); $i++) {
$stateRow =& $translationStatus[$i];
$sql = "select *" .
"\n from #__jf_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 = $jfManager->getContentElement( $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; $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 tests for the content elements and their original/translation status
* It will return an array listing all content element names including information about how may originals
*
* @param array $originalStatus array with original state values if exist
* @param int $phase which phase of the status check
* @param string $statecheck_i running row number starting with -1!
* @param string $message system message
* @param array $languages array of availabe languages
* @return array with resulting rows
*/
function testOriginalStatus($originalStatus, &$phase, &$statecheck_i, &$message, $languages) {
$db =& JFactory::getDBO();
$jfManager =& JoomFishManager::getInstance();
$tranFilters=array();
$filterHTML=array();
$sql = '';
switch ($phase) {
case 1:
$originalStatus = 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['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_i<count($originalStatus)) {
$stateRow =& $originalStatus[$statecheck_i];
foreach ($languages as $lang) {
$sql = "SELECT * FROM #__jf_content as jfc" .
"\n WHERE jfc.language_id=" .$lang->id .
"\n AND jfc.reference_table='" .$stateRow['catid'] ."'".
"\n AND jfc.published=1" .
"\n GROUP BY reference_id";
$db->setQuery($sql);
$rows = $db->loadRowList();
$key = 'langentry_' .$lang->getLanguageCode();
$stateRow[$key] = count($rows);
}
}
if ($statecheck_i<count($originalStatus)-1) {
$statecheck_i ++;
$message = JText::sprintf('ORIGINAL_PHASE1_CHECK', ' ('. $originalStatus[$statecheck_i]['name'] .')');
} else {
$message = JText::_('ORIGINAL_PHASE2_CHECK');
$phase = 3; // exit
}
} else {
$phase = 3; // exit
$message = JText::_('ORIGINAL_PHASE2_CHECK');
}
break;
}
return $originalStatus;
}
}
?>