_modelName;
}
/**
* Get a list of panel state information
*/
function getPanelStates() {
$panelStates = array();
$systemState = $this->_checkSystemState();
$panelStates['directory_state'] = $systemState['directory_state'];
$panelStates['directory'] = $systemState['directory'];
$panelStates['extension_state'] = $systemState['extension_state'];
$panelStates['extension'] = $systemState['extension'];
//$panelStates['mbfInstall'] = $this->_testOldInstall();
$panelStates['system'] = $this->_getSystemInfo();
return $panelStates;
}
/**
* Get a list of content informations
*/
function getContentInfo() {
$contentInfo = array();
$contentInfo['unpublished'] = $this->_testUnpublisedTranslations();
return $contentInfo;
}
/**
* Get a list of performance information for optimal installation
*/
function getPerformanceInfo() {
$performanceInfo = array();
// DB Driver
$db =& JFactory::getDBO();
$performanceInfo['driver'] = array();
$performanceInfo['driver']["current"] = $db->name;
$performanceInfo['driver']["best"] = function_exists("mysqli_connect")?"mysqli":"mysql";
if ($performanceInfo['driver']["best"]=="mysqli" && $performanceInfo['driver']["best"]!=$performanceInfo['driver']["current"]){
$performanceInfo['driver']["optimal"]=false;
}
else {
$performanceInfo['driver']["optimal"]=true;
}
// Translation Caching
if (version_compare(phpversion(),"5.0.0",">=")){
$jfm =& JoomFishManager::getInstance();
$performanceInfo['cache']["best"]=JText::_("on");
if ($jfm->getCfg("transcaching",1)){
$performanceInfo['cache']["optimal"]=true;
$performanceInfo['cache']["current"]=JText::_("on");
}
else {
$performanceInfo['cache']["optimal"]=false;
$performanceInfo['cache']["current"]=JText::_("off");
}
}
else {
$performanceInfo['cache']["best"]=JText::_("n/a");
$performanceInfo['cache']["optimal"]=false;
$performanceInfo['cache']["current"]=JText::_("off");
}
return $performanceInfo;
}
/**
* Get the list of published tabs, based on the ID
*/
function getPublishedTabs() {
$tabs = array();
$pane = new stdClass();
$pane->title = 'Information';
$pane->name = 'Information';
$pane->alert = false;
$tabs[] = $pane;
// Validating other tabs based on extension configuration
$params = JComponentHelper::getParams('com_joomfish');
if( $params->get('showPanelNews', 1) ) {
$pane = new stdClass();
$pane->title = 'News';
$pane->name = 'JFNews';
$pane->alert = false;
$tabs[] = $pane;
}
if( $params->get('showPanelUnpublished', 1) ) {
$pane = new stdClass();
$pane->title = 'TITLE_UNPUBLISHED';
$pane->name = 'ContentState';
$pane->alert = false;
$tabs[] = $pane;
}
if( $params->get('showPanelState', 1) ) {
$pane = new stdClass();
$pane->title = 'System State';
$pane->name = 'SystemState';
$pane->alert = false;
$tabs[] = $pane;
}
if( $params->get('PerformanceInfo', 1) ) {
$pane = new stdClass();
$pane->title = 'Performance Information';
$pane->name = 'PerformanceInfo';
$pane->alert = false;
$tabs[] = $pane;
}
return $tabs;
}
/**
* This method checks the different system states based on the definition in the component XML file.
* @return array with rows of the different component states
*
*/
function _checkSystemState() {
$db =& JFactory::getDBO();
require_once( JPATH_SITE . "/includes/domit/xml_domit_lite_include.php" );
$checkResult = array();
// Read the file to see if it's a valid template XML file
$xmlDoc =& new DOMIT_Lite_Document();
$xmlDoc->resolveErrors( true );
$xmlfile = JOOMFISH_ADMINPATH .DS. 'manifest.xml';
if (!$xmlDoc->loadXML( $xmlfile, false, true )) {
return $checkResult;
}
$element = &$xmlDoc->documentElement;
// Joomla 1.5 uses install
if ($element->getTagName() != 'install') {
return $checkResult;
}
if ($element->getAttribute( "type" ) != "component") {
return $checkResult;
}
$checkElements = $xmlDoc->getElementsByPath('check', 1);
if (!isset($checkElements) || !$checkElements->hasChildNodes()){
return $checkResult;
}
// Default values of different master states
$checkResult['directory_state'] = true;
$checkResult['extension_state'] = true;
foreach ($checkElements->childNodes as $child){
$type = $child->nodeName;
$check = new stdClass();
switch ($type) {
case "directory":
$check->description = $child->getText();
$check->result = is_writable(JPATH_SITE .DS. $check->description) ? true : false;
$check->resultText = $check->result ? JText::_('writable') : JText::_('not writable');
$check->link = '';
$checkResult[$type][] = $check;
$checkResult[$type. '_state'] = $checkResult[$type. '_state'] & $check->result;
break;
case "extension":
$check->description = JText::_($child->getAttribute('name'));
$table = $child->getAttribute('type');
$field = $child->getAttribute('field');
$value = $child->getAttribute('value');
$name = $child->getAttribute('name');
$condition = $child->getText();
if ($field=="ordering"){
$sql = "SELECT id, element, ordering FROM #__$table WHERE $condition ORDER BY ordering";
$db->setQuery($sql);
$resultValues = $db->loadObjectList();
if (array_key_exists($value,$resultValues) && $resultValues[$value]->element==$name){
$check->result = true ;
$check->resultText = JText::_($field);
$check->link = JURI::root().'administrator/index2.php?option=com_'.$table.'&client=&task=editA&hidemainmenu=1&id='.$resultValues[$value]->id;
}
else {
$sql = "SELECT $field, id FROM #__$table WHERE $condition";
$db->setQuery($sql);
$resultValue = $db->loadRow();
$check->result = false;
$check->resultText = JText::_('un'.$field);
$check->link = JURI::root().'administrator/index2.php?option=com_'.$table.'&client=&task=editA&hidemainmenu=1&id='.$resultValue[1];
}
}
else {
$sql = "SELECT $field, id FROM #__$table WHERE $condition";
$db->setQuery($sql);
$resultValue = $db->loadRow();
if( $resultValue != null ) {
$check->result = ($value == $resultValue[0]) ? true : false;
$check->resultText = $check->result ? JText::_($field) : JText::_('un'.$field);
$check->link = JURI::root().'administrator/index2.php?option=com_'.$table.'&client=&task=editA&hidemainmenu=1&id='.$resultValue[1];
} else {
$check->result = false;
$check->resultText = JText::_('not installed');
$check->link = '';
}
}
$checkResult[$type][] = $check;
$checkResult[$type. '_state'] = $checkResult[$type. '_state'] & $check->result;
break;
}
}
return $checkResult;
}
/**
* Testing if old installation is found and upgraded?
* @return int 0 := component not installed, 1 := installed but not upgraded, 2 := installed and upgraded
*/
function _testOldInstall()
{
$db =& JFactory::getDBO();
$oldInstall = 0;
$db->setQuery( "SHOW TABLES LIKE '%mbf_%'" );
$db->query();
$rows = $db->loadResultArray();
foreach ($rows as $row) {
if( ereg( 'mbf_content', $row ) ) {
$oldInstall = 1;
break;
}
}
$jfManager = JoomFishManager::getInstance();
if( $oldInstall == 1 && $jfManager->getCfg( 'mbfupgradeDone' ) ) {
$oldInstall = 2;
}
return $oldInstall;
}
/**
* This method gethers certain information of the system which can be used for presenting
* @return array with inforation about the system
*/
function _getSystemInfo() {
$db =& JFactory::getDBO();
$db->setQuery( 'SELECT count(DISTINCT reference_id, reference_table) FROM #__jf_content');
$db->query();
$translations = $db->loadResult();
$res = array( 'translations' => $translations );
return $res;
}
/**
* Start of a function to obtain overview summary of orphan translations
*
* @return array of orphan tables or nothing if no orphans found
*/
function _testOrphans( ) {
global $mainframe;
$config =& JFactory::getConfig();
$dbprefix = $config->get("dbprefix");
$db =& JFactory::getDBO();
$orphans = array();
$tranFilters=array();
$filterHTML=array();
$query = "select distinct CONCAT('".$dbprefix."',reference_table) from #__jf_content";
$db->setQuery( $query );
$tablesWithTranslations = $db->loadResultArray();
$query = "SHOW TABLES";
$db->setQuery( $query );
$tables = $db->loadResultArray();
$allContentElements = $this->_joomfishManager->getContentElements();
foreach ($allContentElements as $catid=>$ce){
$tablename = $dbprefix.$ce->referenceInformation["tablename"];
if (in_array($tablename,$tables) &&
in_array($tablename,$tablesWithTranslations)){
$db->setQuery( $ce->createOrphanSQL( -1, null, -1, -1,$tranFilters ) );
$rows = $db->loadObjectList();
if ($db->getErrorNum()) {
$this->_message = $db->stderr();
return false;
}
$total = count($rows);
if ($total>0) {
$orphans[] = array( 'catid' => $catid, 'name' => $ce->Name, 'total' => $total);
}
}
}
foreach ($tablesWithTranslations as $twv) {
if (!in_array($twv,$tables)) {
$this->_message = "Translations exists for table $twv which is no longer in the database
";
}
}
return $orphans;
}
/**
* 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) {
$dbprefix = $config->get("dbprefix");
$db =& JFactory::getDBO();
$tranFilters=array();
$filterHTML=array();
$sql = '';
switch ($phase) {
case 1:
$originalStatus = array();
$sql = "select distinct CONCAT('".$dbprefix."',reference_table) from #__jf_content";
$db->setQuery( $sql );
$tablesWithTranslations = $db->loadResultArray();
$sql = "SHOW TABLES";
$db->setQuery( $sql );
$tables = $db->loadResultArray();
$allContentElements = $this->_joomfishManager->getContentElements();
foreach ($allContentElements as $catid=>$ce){
$ceInfo = array();
$ceInfo['name'] = $ce->Name;
$ceInfo['catid'] = $catid;
$ceInfo['total'] = '??';
$ceInfo['missing_table'] = false;
$ceInfo['message'] = '';
$tablename = $dbprefix.$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_isetQuery($sql);
$rows = $db->loadObjectList();
$translationStatus = array();
if( is_array($rows) && count($rows)>0 ) {
foreach ($rows as $row) {
$status = array();
$contentElement = $this->_joomfishManager->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_i_joomfishManager->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; $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_isetQuery($sql);
if( $rows = $db->loadObjectList() ) {
foreach ($rows as $row) {
$unpublished = array();
$unpublished['reference_table'] = $row->reference_table;
$unpublished['catid'] = $row->reference_table;
$unpublished['reference_id'] = $row->reference_id;
$unpublished['language_id'] = $row->language_id;
$unpublished['language'] = $row->language;
$unpublishedTranslations[] = $unpublished;
}
}
return $unpublishedTranslations;
}
}
?>