Your IP : 216.73.216.74


Current Path : /home/bonneesp/www/administrator/components/com_tabulizer/models/
Upload File :
Current File : /home/bonneesp/www/administrator/components/com_tabulizer/models/rulesetarchive.php

<?php
/**
 * @version		6.5.0 tabulizer $
 * @package		tabulizer
 * @copyright	Copyright © 2011 - All rights reserved.
 * @license		GNU/GPL
 * @author		Dimitrios Mourloukos
 * @author mail	info@alterora.gr
 * @website		www.tabulizer.com
 * 
 */


// no direct access
defined('_JEXEC') or die('Restricted access');

jimport( 'joomla.application.component.model' );

TabulizerPath::requireLib('ruleset','admin');

class tabulizerModelRulesetarchive extends JModelLegacy {
	var $archive_filename = null;
	var $ruleset_archive = null;
	var $ruleset_name = null;	
	var $css = null;
	var $limit = null;
	var $limitstart = null;	
	var $total_count = null;
	
	function __construct(){
		parent::__construct();		
	}	
	
	function loadRulesetArchive($filename, $limit=0, $limitstart=0) {											
		$this->archive_filename = $filename;
		$ruleset = new Ruleset();		
		$ruleset_archive = $ruleset->getRulesets($this->archive_filename,$limit,$limitstart,$total_count);	
		if (!empty($ruleset_archive)) {
			$this->ruleset_archive = $ruleset_archive;									
			$this->ruleset_archive['filename'] = $this->archive_filename;			
			$this->limit = $limit;
			$this->limitstart = $limitstart;
			$this->total_count = $total_count;
		}								
		
		return $this->ruleset_archive;
	}		
	
	function getRulesetArchive() {
		if (empty($this->ruleset_archive)) {
			$this->loadRulesetArchive($this->archive_filename);
		}
		
		return $this->ruleset_archive;
	}
	
	function getPagination() {
		$pagination = null;
		if (!empty($this->limit) && !empty($this->total_count)) {
			if ($this->total_count > $this->limit) {
				jimport('joomla.html.pagination');
				$pagination = new JPagination($this->total_count, $this->limitstart, $this->limit );
			}	
		}
		return $pagination;
	}
	
	function getReturnURLs(&$urls) {
        $jinput = JFactory::getApplication()->input;
		$option = $jinput->getCmd('option');
		
		$urls = array();
		$url = $jinput->getString('archives_return_url','');
		$urls['archives'] = empty($url)?str_replace('&amp;','&',JRoute::_('index.php?option='.$option.'&task=viewrulesetarchives')):urldecode($url);
		$url = str_replace('&amp;','&',JRoute::_('index.php?option='.$option.'&task=viewrulesetarchive&archive_filename='.$this->archive_filename.'&limit='.$this->limit.'&limitstart='.$this->limitstart));
		$urls['archive'] = $url;			
	}
	
	function saveRulesetArchive($ruleset_archive) {
		$ruleset = new Ruleset();		
		return $ruleset->saveRulesetArchive($ruleset_archive);		
	}	
	
	function deleteRulesetArchive($ruleset_files) {			
		$ruleset = new Ruleset();
		return $ruleset->deleteRulesetArchive($ruleset_files);
	}		
	
	function getAllRulesetArchiveNames($exclude_archive_names = array()) {
		$ruleset = new Ruleset();		
		return $ruleset->getAllRulesetArchiveNames($exclude_archive_names);
	}
	
	function getAllRulesetArchiveFilenames($exclude_archive_filenames = array()) {
		$ruleset = new Ruleset();		
		return $ruleset->getAllRulesetArchiveFilenames($exclude_archive_filenames);
	}	
		
	function getAllRulesetNames($exclude_ruleset_names = array()) {
		$ruleset = new Ruleset();		
		return $ruleset->getAllRulesetNames($exclude_ruleset_names);
	}
	
	function getAllRulesetTitles($exclude_ruleset_titles = array()) {
		$ruleset = new Ruleset();		
		return $ruleset->getAllRulesetTitles($exclude_ruleset_titles);
	}
	
	function getRecommendedName($seed = '') {
        $recommended_ruleset_name = '';

        $filename = $this->ruleset_archive['filename'];
        $rulesets = $this->ruleset_archive['rulesets'];
        $basename = 'ruleset';
        $dot = stripos($filename, '.xml');
        if ($dot !== false) {
            $basename_clean = strtolower(str_replace(array('-','.','_',' '), array('_','_','_',''), substr($filename,0,$dot)));
            if ($basename_clean != '') $basename = $basename_clean;

        }
        if (empty($rulesets)) {
            $recommended_ruleset_name = $basename . '_1';
        } else {
            $num_of_rulesets = count($rulesets)+1;
            for ($i=1;$i<=$num_of_rulesets;$i++) {
                $recommended_ruleset_name = $basename . '_' . $i;
                if (isset($rulesets[$recommended_ruleset_name])) continue;
                else break;
            }
        }

        return $recommended_ruleset_name;
	}
	
	function loadCSSFile($css_filename, $archive_filename, $ruleset_name) {
		$this->css = array();
		
		$this->css['css_filename'] = $css_filename;
		$css_path = TabulizerPath::getFilePath($css_filename, 'css');
		$this->css['css_filepath'] = $css_path;
		if (file_exists($css_path)) {			
			$this->css['new'] = false;
			$this->css['css_contents'] = file_get_contents($css_path);
		} else {
			$this->css['new'] = true;
			$this->css['css_contents'] = '';						
		}
		
		$this->css['archive_filename'] = $archive_filename;
		$this->css['ruleset_name'] = $ruleset_name;
		
		$rules_path = TabulizerPath::getFilePath($archive_filename, 'rules');
		if (file_exists($rules_path)) {
			$this->css['rulesets'] = $this->loadRulesetArchive($archive_filename);
		}
		
		$this->css['css_skeleton'] = '';
		if (!empty($this->css['rulesets']['rulesets'])) {
			if (!empty($ruleset_name)) {
				$skeleton_rulesets = array($ruleset_name => $this->css['rulesets']['rulesets'][$ruleset_name]);
			} else {
				$skeleton_rulesets = $this->css['rulesets']['rulesets'];
			}	
			$this->css['css_skeleton'] = $this->generateCSSSkeleton($skeleton_rulesets);
		}
				
	}
	
	function generateCSSSkeleton($rulesets) {
		$css_code = '';
		$suffix_sep = '-';
		$css_lines = array();				
		
		foreach ($rulesets as $ruleset_name => $ruleset) {			
			$css_code .= "'\\n'+'\\n'+'/* {$ruleset_name} */'+'\\n'+'\\n'+\n";
		
			$table_selector = trim('table.tabtable'.$suffix_sep.$ruleset['suffix']);
			$tr_selectors = array('tr.tabrow');
			$td_selectors = array('td.tabcol');
			
			$css_line = "'{$table_selector} {}'+'\\n'+\n";
			if (!in_array($css_line, $css_lines)) { $css_code .= $css_line; $css_lines[] = $css_line; }											
			
			foreach ($ruleset['rules'] as $rule) {
                if (empty($rule['style'])) continue;
				if ($rule['element'] == 'row') {
					$selector = trim('tr.'.$rule['style']);
					if (!in_array($selector, $tr_selectors)) {
						$tr_selectors[] = $selector;
					}	
				} else {
					$selector = trim('td.'.$rule['style']);
					if (!in_array($selector, $td_selectors)) $td_selectors[] = $selector;
				}
			}
												
			foreach ($tr_selectors as $tr_selector) {			
				$css_line = "'{$table_selector} {$tr_selector} {}'+'\\n'+\n";
				if (!in_array($css_line, $css_lines)) { $css_code .= $css_line; $css_lines[] = $css_line; }								
			
				foreach ($td_selectors as $td_selector) {
					$css_line = "'{$table_selector} {$tr_selector} {$td_selector} {}'+'\\n'+\n";
					if (!in_array($css_line, $css_lines)) { $css_code .= $css_line; $css_lines[] = $css_line; }								
				}
			}			
			
		}
		
		if (!empty($css_code)) $css_code .= "'';\n";
		
		return $css_code;
	}
	
	function getCSSFile() {
		return $this->css;
	}
	
	function saveCSSFile($css_filename, $css_contents) {
		$css_path = TabulizerPath::getFilePath($css_filename, 'css');
		return file_put_contents($css_path, $css_contents);
	}

} 
?>