Subversion Repositories cheapmusic

Rev

Blame | Last modification | View Log | RSS feed

<?php

/***************************************************************************
 *   Copyright (C) 2009-2011 by Geo Varghese(www.seopanel.in)              *
 *   sendtogeo@gmail.com                                                                                                   *
 *                                                                         *
 *   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.             *
 ***************************************************************************/

# class defines all themes controller functions
class ThemesController extends Controller{
    
    var $tableName = "themes";
    var $layout = "ajax";

        # func to get all  tools
        function __getAllThemes(){
                $sql = "select * from $this->tableName order by id";
                $themeList = $this->db->select($sql);
                return $themeList;
        }

        # func to list  tools
        function listThemes($msg='', $error=false){             
                
                if(empty($msg)) $this->__updateAllThemes();             
                
                $userId = isLoggedIn();
                $this->set('msg', $msg);
                $this->set('error', $error);
                
                $sql = "select * from $this->tableName order by id";
                
                # pagination setup              
                $this->db->query($sql, true);
                $this->paging->setDivClass('pagingdiv');
                $this->paging->loadPaging($this->db->noRows, SP_PAGINGNO);
                $pagingDiv = $this->paging->printPages('themes-manager.php?');          
                $this->set('pagingDiv', $pagingDiv);
                $sql .= " limit ".$this->paging->start .",". $this->paging->per_page;
                
                $themeList = $this->db->select($sql);
                $this->set('pageNo', $_GET['pageno']);
                $this->set('list', $themeList);
                $this->render('theme/listthemes');
        }

        # function to activate theme
        function activateTheme($themeId){               
                $themeId = intval($themeId);
                                
                // inactivate all themes and then activate current theme
                $sql = "update $this->tableName set status=0";
                $this->db->query($sql);
                $sql = "update $this->tableName set status=1 where id=$themeId";
                $this->db->query($sql);
        }
        
        #function to change installed status of themes
        function __changeInstallStatus($themeId, $status){
                
                $themeId = intval($themeId);
                $sql = "update $this->tableName set installed=$status where id=$themeId";
                $this->db->query($sql);
        }
        
        # func to get  theme info
        function __getThemeInfo($val, $col='id') {
                $sql = "select * from $this->tableName where $col='$val'";
                $themeInfo = $this->db->select($sql, true);
                return $themeInfo;
        }
        
        # func to get active theme info
        function __getActiveTheme() {
                $themeInfo = $this->dbHelper->getRow($this->tableName, "status=1");
                return $themeInfo;
        }
        
        # func to list  theme info
        function listThemeInfo($themeId){
            $themeId = intval($themeId);                
                $this->set('themeInfo', $this->__getThemeInfo($themeId));       
                $this->set('pageNo', $_GET['pageno']);  
                $this->render('theme/listthemeinfo');
        }
        
        function updateThemeInfo($themeId, $themeInfo){
                
                $themeId = intval($themeId);
                $sql = "update $this->tableName set
                                        name='".addslashes($themeInfo['name'])."',
                                        author='".addslashes($themeInfo['author'])."',
                                        description='".addslashes($themeInfo['description'])."',
                                        version='{$themeInfo['version']}',
                                        website='{$themeInfo['website']}'
                                        where id=$themeId";
                $this->db->query($sql);
        }
        
        # func to upgrade  theme
        function upgradeTheme($themeId){
                $themeInfo = $this->__getThemeInfo($themeId);
                
                if (file_exists(SP_THEMEPATH."/".$themeInfo['folder'])) {
                        
                        # parse theme info
                        $themeInfo = $this->parseThemeInfoFile($themeInfo['folder']);
                        $this->updateThemeInfo($themeId, $themeInfo);           
                        
                        $this->__changeInstallStatus($themeId, 1);
                        $this->listThemes("Theme <b>{$themeInfo['name']} {$themeInfo['version']}</b> upgraded successfully!");
                } else {
                        $this->__changeInstallStatus($themeId, 0);
                        $this->listThemes("Theme <b>{$themeInfo['name']} {$themeInfo['version']}</b> upgrade failed!", true);
                }
        }
        
        # func to re install the  theme
        function reInstallTheme($themeId){
                $themeInfo = $this->__getThemeInfo($themeId);
                
                if(file_exists(SP_THEMEPATH."/".$themeInfo['folder'])){
        
                        # parse theme info
                        $themeInfo = $this->parseThemeInfoFile($themeInfo['name']);
                        $this->updateThemeInfo($themeId, $themeInfo);
                        
                        $this->__changeInstallStatus($themeId, 1);
                        $this->listThemes("Theme <b>{$themeInfo['name']} {$themeInfo['version']}</b> re-installed successfully!");
                }else{
                        $this->__changeInstallStatus($themeId, 0);
                        $this->listThemes("Theme <b>{$themeInfo['name']} {$themeInfo['version']}</b> re-installation failed!", true);
                }               
        }

        # to check whether the directory is theme
        function isThemeDirectory($file){
                if ( ($file != ".") && ($file != "..") && ($file != ".svn") &&  is_dir(SP_THEMEPATH."/".$file) ) {
                        if(!preg_match('/^\./', $file)){
                                return true;
                        }
                }
                return false;
        }
        
        # func to update themes in db
        function __updateAllThemes(){
                $sql = "update themes set installed=0";
                $this->db->query($sql);
                
                if ($handle = opendir(SP_THEMEPATH)) {
                        while (false !== ($file = readdir($handle))) {
                                if ( $this->isThemeDirectory($file) ) {
                                        $themeName = $file;
                                        $themeInfo = $this->__getThemeInfo($themeName, 'name');
                                        if(empty($themeInfo['id'])){
                                                
                                                // parse theme info and save details
                                                $themeInfo = $this->parseThemeInfoFile($file);
                                                $sql = "insert into $this->tableName(name,folder,author,description,version,website,status,installed) 
                                                                values('".addslashes($themeInfo['name'])."', '".addslashes($themeName)."','".addslashes($themeInfo['author'])."','".addslashes($themeInfo['description'])."','{$themeInfo['version']}','{$themeInfo['website']}',0,1)";
                                                $this->db->query($sql);                                         
                                                
                                        }else{
                                                $this->__changeInstallStatus($themeInfo['id'], 1);
                                        }
                                }
                        }
                        closedir($handle);
                }
        }
        
        # func to parse theme info file
        function parseThemeInfoFile($file) {
                $themeInfo = array();
                $themeInfoFile = SP_THEMEPATH."/".$file."/".SP_THEMEINFOFILE;
                if(file_exists($themeInfoFile)){
                        $xml = new XMLParser;
                $pInfo = $xml->parse($themeInfoFile);
                if(!empty($pInfo[0]['child'])){
                        foreach($pInfo[0]['child'] as $info){
                                $infoCol = strtolower($info['name']);
                                $themeInfo[$infoCol] = $info['content'];
                        }
                }                       
                }               
                
                $themeInfo['name'] = empty($themeInfo['name']) ? $file : $themeInfo['name'];
                $themeInfo['version'] = empty($themeInfo['version']) ? '1.0.0' : $themeInfo['version'];
                $themeInfo['author'] = empty($themeInfo['author']) ? 'Seo Panel': $themeInfo['author'];
                $themeInfo['website'] = empty($themeInfo['website']) ? SP_THEMESITE : $themeInfo['website'];            
                return $themeInfo;               
        }
        
}
?>