Seditio Source
Root |
./othercms/elxis_5.3_atlas_rev2452/components/com_extmanager/models/extmanager.model.php
<?php
/**
* @version        $Id: extmanager.model.php 2423 2021-09-25 19:10:27Z IOS $
* @package        Elxis
* @subpackage    Component Extensions Manager
* @copyright    Copyright (c) 2006-2021 Elxis CMS (https://www.elxis.org). All rights reserved.
* @license        Elxis Public License ( https://www.elxis.org/elxis-public-license.html )
* @author        Elxis Team ( https://www.elxis.org )
* @description     Elxis CMS is free software. Read the license for copyright notices and details
*/

defined('_ELXIS_') or die ('Direct access to this location is not allowed');


class
extmanagerModel {

    private
$db;


   
/*********************/
    /* MAGIC CONSTRUCTOR */
    /*********************/
   
public function __construct() {
       
$this->db = eFactory::getDB();
    }


   
/**************************/
    /* GET TEMPLATE POSITIONS */
    /**************************/
   
public function getPositions() {
       
$sql = "SELECT ".$this->db->quoteId('position')." FROM ".$this->db->quoteId('#__template_positions')." ORDER BY ".$this->db->quoteId('position')." ASC";
       
$stmt = $this->db->prepare($sql);
       
$stmt->execute();
        return
$stmt->fetchCol(0);
    }


   
/*****************/
    /* COUNT MODULES */
    /*****************/
   
public function countModules($options) {
       
$wheres = array();
       
$pdo_binds = array();

        if (isset(
$options['section']) && ($options['section'] != '')) {
           
$wheres[] = $this->db->quoteId('section').' = :xsect';
           
$pdo_binds[':xsect'] = array($options['section'], PDO::PARAM_STR);
        }

        if (isset(
$options['position']) && ($options['position'] != '')) {
           
$wheres[] = $this->db->quoteId('position').' = :xpos';
           
$pdo_binds[':xpos'] = array($options['position'], PDO::PARAM_STR);
        }

        if (isset(
$options['key']) && ($options['key'] != '')) {
           
$v = '%'.$options['key'].'%';
           
$wheres[] = '('.$this->db->quoteId('title').' LIKE :xkey OR '.$this->db->quoteId('module').' LIKE :xkey OR '.$this->db->quoteId('position').' LIKE :xkey)';
           
$pdo_binds[':xkey'] = array($v, PDO::PARAM_STR);
        }

       
$sql = "SELECT COUNT(id) FROM ".$this->db->quoteId('#__modules');
        if (
count($wheres) > 0) {
           
$sql .= ' WHERE '.implode(' AND ', $wheres);
           
$stmt = $this->db->prepare($sql);
            if (
count($pdo_binds) > 0) {
                foreach (
$pdo_binds as $key => $parr) {
                   
$stmt->bindParam($key, $parr[0], $parr[1]);
                }
            }
        } else {
           
$stmt = $this->db->prepare($sql);
        }
       
$stmt->execute();
        return (int)
$stmt->fetchResult();
    }


   
/*****************************/
    /* GET MODULES FROM DATABASE */
    /*****************************/
   
public function getModules($options) {
       
$wheres = array();
       
$pdo_binds = array();

        if (isset(
$options['section']) && ($options['section'] != '')) {
           
$wheres[] = $this->db->quoteId('section').' = :xsect';
           
$pdo_binds[':xsect'] = array($options['section'], PDO::PARAM_STR);
        }

        if (isset(
$options['position']) && ($options['position'] != '')) {
           
$wheres[] = $this->db->quoteId('position').' = :xpos';
           
$pdo_binds[':xpos'] = array($options['position'], PDO::PARAM_STR);
        }

        if (isset(
$options['key']) && ($options['key'] != '')) {
           
$v = '%'.$options['key'].'%';
           
$wheres[] = '('.$this->db->quoteId('title').' LIKE :xkey OR '.$this->db->quoteId('module').' LIKE :xkey OR '.$this->db->quoteId('position').' LIKE :xkey)';
           
$pdo_binds[':xkey'] = array($v, PDO::PARAM_STR);
        }

        if (
$options['sn'] == 'position') {
           
$orderby = $this->db->quoteId('position').' '.strtoupper($options['so']).', '.$this->db->quoteId('ordering').' '.strtoupper($options['so']);
        } else {
           
$orderby = $this->db->quoteId($options['sn']).' '.strtoupper($options['so']);
        }

       
$sql = "SELECT * FROM ".$this->db->quoteId('#__modules');
        if (
count($wheres) > 0) {
           
$sql .= ' WHERE '.implode(' AND ', $wheres);
           
$sql .= ' ORDER BY '.$orderby;
           
$stmt = $this->db->prepareLimit($sql, $options['limitstart'], $options['limit']);
            if (
count($pdo_binds) > 0) {
                foreach (
$pdo_binds as $key => $parr) {
                   
$stmt->bindParam($key, $parr[0], $parr[1]);
                }
            }
        } else {
           
$sql .= ' ORDER BY '.$orderby;
           
$stmt = $this->db->prepareLimit($sql, $options['limitstart'], $options['limit']);
        }

       
$stmt->execute();
       
$rows = $stmt->fetchAll(PDO::FETCH_OBJ);
        return
$rows;
    }


   
/***********************************/
    /* PUBLISH/UNPUBLISH/TOGGLE MODULE */
    /***********************************/
   
public function publishModule($id, $publish=-1) {
       
$response = array('success' => false, 'message' => 'Unknown error', 'newpublished' => -1);
        if (
$id < 1) { $response['message'] = 'Module not found!'; return $response; } //just in case

       
if ($publish == -1) { //toggle status
           
$sql = "SELECT ".$this->db->quoteId('published')." FROM ".$this->db->quoteId('#__modules')
            .
"\n WHERE ".$this->db->quoteId('id')." = :xid";
           
$stmt = $this->db->prepareLimit($sql, 0, 1);
           
$stmt->bindParam(':xid', $id, PDO::PARAM_INT);
           
$stmt->execute();
           
$publish = ((int)$stmt->fetchResult() == 1) ? 0 : 1;
        }

       
$pubdate = '2014-01-01 00:00:00';
       
$unpubdate = '2060-01-01 00:00:00';

       
$sql = "UPDATE ".$this->db->quoteId('#__modules')." SET ".$this->db->quoteId('published')." = :xpub, ".$this->db->quoteId('pubdate')." = :xpdt, ".$this->db->quoteId('unpubdate')." = :xupdt"
       
."\n WHERE ".$this->db->quoteId('id')." = :xid";
       
$stmt = $this->db->prepare($sql);
       
$stmt->bindParam(':xpub', $publish, PDO::PARAM_INT);
       
$stmt->bindParam(':xpdt', $pubdate, PDO::PARAM_STR);
       
$stmt->bindParam(':xupdt', $unpubdate, PDO::PARAM_STR);
       
$stmt->bindParam(':xid', $id, PDO::PARAM_INT);
       
$ok = $stmt->execute();
        if (
$ok) {
           
$response['newpublished'] = $publish;
           
$response['success'] = true;
           
$response['message'] = 'Success';
        } else {
           
$response['message'] = $stmt->getErrorMsg();
        }
        return
$response;
    }


   
/*********************/
    /* COPY MODULE'S ACL */
    /*********************/
   
public function copyModuleACL($module, $source_id, $newid) {
       
$newid = (int)$newid;
        if (
$newid < 1) { return false; } //just in case

       
$ctg = 'module';
       
$sql = "SELECT * FROM ".$this->db->quoteId('#__acl')." WHERE ".$this->db->quoteId('category')." = :xcat"
       
."\n AND ".$this->db->quoteId('element')." = :xelem AND ".$this->db->quoteId('identity')." = :xident";
       
$stmt = $this->db->prepare($sql);
       
$stmt->bindParam(':xcat', $ctg, PDO::PARAM_STR);
       
$stmt->bindParam(':xelem', $module, PDO::PARAM_STR);
       
$stmt->bindParam(':xident', $source_id, PDO::PARAM_INT);
       
$stmt->execute();
       
$rows = $stmt->fetchAll(PDO::FETCH_OBJ);
        if (!
$rows) { return true; } //nothing to copy

       
$sql = "INSERT INTO ".$this->db->quoteId('#__acl')
        .
"\n (".$this->db->quoteId('id').", ".$this->db->quoteId('category').", ".$this->db->quoteId('element').", ".$this->db->quoteId('identity').", "
       
.$this->db->quoteId('action').", ".$this->db->quoteId('minlevel').", ".$this->db->quoteId('gid').", ".$this->db->quoteId('uid').", ".$this->db->quoteId('aclvalue').")"
       
."\n VALUES (NULL, :xcol2, :xcol3, :xcol4, :xcol5, :xcol6, :xcol7, :xcol8, :xcol9)";
       
$stmt = $this->db->prepare($sql);
        foreach (
$rows as $row) {
           
$stmt->bindParam(':xcol2', $row->category, PDO::PARAM_STR);
           
$stmt->bindParam(':xcol3', $row->element, PDO::PARAM_STR);
           
$stmt->bindParam(':xcol4', $newid, PDO::PARAM_INT);
           
$stmt->bindParam(':xcol5', $row->action, PDO::PARAM_STR);
           
$stmt->bindParam(':xcol6', $row->minlevel, PDO::PARAM_INT);
           
$stmt->bindParam(':xcol7', $row->gid, PDO::PARAM_INT);
           
$stmt->bindParam(':xcol8', $row->uid, PDO::PARAM_INT);
           
$stmt->bindParam(':xcol9', $row->aclvalue, PDO::PARAM_INT);
           
$stmt->execute();
        }
        return
true;
    }


   
/******************************/
    /* COPY MODULE'S TRANSLATIONS */
    /******************************/
   
public function copyModuleTranslations($source_id, $newid) {
       
$newid = (int)$newid;
        if (
$newid < 1) { return false; } //just in case

       
$ctg = 'module';
       
$sql = "SELECT * FROM ".$this->db->quoteId('#__translations')." WHERE ".$this->db->quoteId('category')." = :xcat"
       
."\n AND ".$this->db->quoteId('elid')." = :xid";
       
$stmt = $this->db->prepare($sql);
       
$stmt->bindParam(':xcat', $ctg, PDO::PARAM_STR);
       
$stmt->bindParam(':xid', $source_id, PDO::PARAM_INT);
       
$stmt->execute();
       
$rows = $stmt->fetchAll(PDO::FETCH_OBJ);
        if (!
$rows) { return true; } //nothing to copy

       
$sql = "INSERT INTO ".$this->db->quoteId('#__translations')
        .
"\n (".$this->db->quoteId('trid').", ".$this->db->quoteId('category').", ".$this->db->quoteId('element').", ".$this->db->quoteId('language').", "
       
.$this->db->quoteId('elid').", ".$this->db->quoteId('translation').")"
       
."\n VALUES (NULL, :xcol2, :xcol3, :xcol4, :xcol5, :xcol6)";
       
$stmt = $this->db->prepare($sql);
        foreach (
$rows as $row) {
           
$stmt->bindParam(':xcol2', $row->category, PDO::PARAM_STR);
           
$stmt->bindParam(':xcol3', $row->element, PDO::PARAM_STR);
           
$stmt->bindParam(':xcol4', $row->language, PDO::PARAM_STR);
           
$stmt->bindParam(':xcol5', $newid, PDO::PARAM_INT);
           
$stmt->bindParam(':xcol6', $row->translation, PDO::PARAM_LOB);
           
$stmt->execute();
        }
        return
true;
    }


   
/**************************/
    /* COUNT MODULE INSTANCES */
    /**************************/
   
public function countModuleInstances($module) {
       
$sql = "SELECT COUNT(id) FROM ".$this->db->quoteId('#__modules')." WHERE ".$this->db->quoteId('module')." = :xmod";
       
$stmt = $this->db->prepare($sql);
       
$stmt->bindParam(':xmod', $module, PDO::PARAM_STR);
       
$stmt->execute();
        return (int)
$stmt->fetchResult();
    }


   
/*********************************************/
    /* DELETE MODULE (USED FOR MODULE INSTANCES) */
    /*********************************************/
   
public function deleteModule($id, $module) {
       
$id = (int)$id;
        if (
$id < 1) { return false; }

       
$stmt = $this->db->prepare("DELETE FROM ".$this->db->quoteId('#__modules')." WHERE ".$this->db->quoteId('id')." = :xid");
       
$stmt->bindParam(':xid', $id, PDO::PARAM_INT);
       
$stmt->execute();

       
$stmt = $this->db->prepare("DELETE FROM ".$this->db->quoteId('#__modules_menu')." WHERE ".$this->db->quoteId('moduleid')." = :xid");
       
$stmt->bindParam(':xid', $id, PDO::PARAM_INT);
       
$stmt->execute();

       
$ctg = 'module';
       
$sql = "DELETE FROM ".$this->db->quoteId('#__acl')
        .
"\n WHERE ".$this->db->quoteId('category')." = :xcat AND ".$this->db->quoteId('element')." = :xelem AND ".$this->db->quoteId('identity')." = :xident";
       
$stmt = $this->db->prepare($sql);
       
$stmt->bindParam(':xcat', $ctg, PDO::PARAM_STR);
       
$stmt->bindParam(':xelem', $module, PDO::PARAM_STR);
       
$stmt->bindParam(':xident', $id, PDO::PARAM_INT);
       
$stmt->execute();

       
$sql = "DELETE FROM ".$this->db->quoteId('#__translations')
        .
"\n WHERE ".$this->db->quoteId('category')." = :xcat AND ".$this->db->quoteId('elid')." = :xelid";
       
$stmt = $this->db->prepare($sql);
       
$stmt->bindParam(':xcat', $ctg, PDO::PARAM_STR);
       
$stmt->bindParam(':xelid', $id, PDO::PARAM_INT);
       
$stmt->execute();

        return
true;
    }


   
/****************************************/
    /* GET MODULES ACL PERMISSIONS FOR VIEW */
    /****************************************/
   
public function getModulesViewACL($ids) {
       
$ctg = 'module';
       
$act = 'view';
       
$sql = "SELECT * FROM ".$this->db->quoteId('#__acl')." WHERE ".$this->db->quoteId('category')." = :xcat AND ".$this->db->quoteId('action')." = :xact"
       
."\n AND ".$this->db->quoteId('identity')." IN (".implode(', ', $ids).")";
       
$stmt = $this->db->prepare($sql);
       
$stmt->bindParam(':xcat', $ctg, PDO::PARAM_STR);
       
$stmt->bindParam(':xact', $act, PDO::PARAM_STR);
       
$stmt->execute();
       
$rows = $stmt->fetchAll(PDO::FETCH_ASSOC);
       
       
$final = array();
        if (
$rows) {
            foreach (
$rows as $row) {
               
$id = $row['identity'];
               
$num = (isset($final[$id])) ? $final[$id]['num'] : 0;
               
$num++;
               
$final[$id] = array(
                   
'minlevel' => $row['minlevel'],
                   
'gid' => $row['gid'],
                   
'uid' => $row['uid'],
                   
'aclvalue' => $row['aclvalue'],
                   
'num' => $num
               
);
            }
        }

        unset(
$rows);
        return
$final;
    }


   
/************************************/
    /* GET USER GROUPS AND THEIR LEVELS */
    /************************************/
   
public function getGroups($orderby='level', $orderdir='ASC') {
        if (
$orderby == '') { $orderby == 'level'; }
        if (
$orderdir == '') { $orderdir = 'ASC'; }
       
$sql = "SELECT * FROM ".$this->db->quoteId('#__groups')." ORDER BY ".$this->db->quoteId($orderby)." ".$orderdir;
       
$stmt = $this->db->prepare($sql);
       
$stmt->execute();
       
$rows = $stmt->fetchAll(PDO::FETCH_ASSOC);
        return
$rows;
    }


   
/*****************************************/
    /* GET ACL ROWS THAT MATCH WHERE CLAUSES */
    /*****************************************/
   
public function queryACL($wheres) {
       
$ands = array();
       
$binds = array();
        if (
$wheres) {
           
$i = 0;
            foreach (
$wheres as $col => $val) {
                switch (
$col) {
                    case
'id': case 'identity': case 'minlevel': case 'gid': case 'uid': case 'aclvalue':
                       
$i++;
                       
$ands[] = $this->db->quoteId($col).' = :xcol'.$i;
                       
$binds[] = array(':xcol'.$i, intval($val), PDO::PARAM_INT);
                    break;
                    case
'category': case 'element': case 'action':
                       
$i++;
                       
$ands[] = $this->db->quoteId($col).' = :xcol'.$i;
                       
$binds[] = array(':xcol'.$i, $val, PDO::PARAM_STR);
                    break;
                    default: break;
                }
            }
        }

       
$sql = "SELECT * FROM ".$this->db->quoteId('#__acl');
        if (
$ands) { $sql .= "\n WHERE ".implode(' AND ', $ands); }
       
$sql .= "\n ORDER BY ".$this->db->quoteId('category')." ASC, ".$this->db->quoteId('element')." ASC, ".$this->db->quoteId('action')." ASC";
       
$stmt = $this->db->prepare($sql);
        if (
$binds) {
            foreach (
$binds as $bind) {
               
$stmt->bindParam($bind[0], $bind[1], $bind[2]);
            }
        }
       
$stmt->execute();
        return
$stmt->fetchAll(PDO::FETCH_OBJ);
    }


   
/***************************/
    /* GET MODULES BY POSITION */
    /***************************/
   
public function getModsByPosition($position) {
       
$sql = "SELECT ".$this->db->quoteId('id').", ".$this->db->quoteId('title').", ".$this->db->quoteId('ordering')
        .
"\n FROM ".$this->db->quoteId('#__modules')." WHERE ".$this->db->quoteId('position')." = :xpos"
       
."\n ORDER BY ".$this->db->quoteId('ordering')." ASC";
       
$stmt = $this->db->prepare($sql);
       
$stmt->bindParam(':xpos', $position, PDO::PARAM_STR);
       
$stmt->execute();
        return
$stmt->fetchAll(PDO::FETCH_OBJ);
    }


   
/***************/
    /* COUNT USERS */
    /***************/
   
public function countUsers() {
       
$sql = "SELECT COUNT(uid) FROM ".$this->db->quoteId('#__users');
       
$stmt = $this->db->prepare($sql);
       
$stmt->execute();
        return (int)
$stmt->fetchResult();
    }


   
/***************************/
    /* GET USERS FROM DATABASE */
    /***************************/
   
public function getUsers() {
       
$orderby = (eFactory::getElxis()->getConfig('REALNAME') == 1) ? 'firstname' : 'uname';
       
$sql = "SELECT ".$this->db->quoteId('uid').", ".$this->db->quoteId('firstname').", ".$this->db->quoteId('lastname').", ".$this->db->quoteId('uname')
        .
"\n FROM ".$this->db->quoteId('#__users')." ORDER BY ".$this->db->quoteId($orderby)." ASC";
       
$stmt = $this->db->prepare($sql);
       
$stmt->execute();
       
$rows = $stmt->fetchAll(PDO::FETCH_ASSOC);
        return
$rows;
    }


   
/******************/
    /* GET MENU ITEMS */
    /******************/
   
public function getMenuItems($section) {
       
$xlin = 'link';
       
$xwra = 'wrapper';
       
$sql = "SELECT ".$this->db->quoteId('menu_id').", ".$this->db->quoteId('title').", ".$this->db->quoteId('collection')
        .
"\n FROM ".$this->db->quoteId('#__menu')
        .
"\n WHERE ".$this->db->quoteId('section')." = :xsec AND (".$this->db->quoteId('menu_type')." = :xlin OR ".$this->db->quoteId('menu_type')." = :xwra)"
       
."\n ORDER BY ".$this->db->quoteId('collection')." ASC, ".$this->db->quoteId('parent_id')." ASC, ".$this->db->quoteId('ordering')." ASC";
       
$stmt = $this->db->prepare($sql);
       
$stmt->bindParam(':xsec', $section, PDO::PARAM_STR);
       
$stmt->bindParam(':xlin', $xlin, PDO::PARAM_STR);
       
$stmt->bindParam(':xwra', $xwra, PDO::PARAM_STR);
       
$stmt->execute();
       
$rows = $stmt->fetchAll(PDO::FETCH_ASSOC);
        return
$rows;
    }


   
/*************************/
    /* GET MODULE MENU ITEMS */
    /*************************/
   
public function getModMenuItems($moduleid) {
       
$xlin = 'link';
       
$xwra = 'wrapper';
       
$sql = "SELECT ".$this->db->quoteId('menuid')." FROM ".$this->db->quoteId('#__modules_menu')
        .
"\n WHERE ".$this->db->quoteId('moduleid')." = :xmod";
       
$stmt = $this->db->prepare($sql);
       
$stmt->bindParam(':xmod', $moduleid, PDO::PARAM_INT);
       
$stmt->execute();
        return
$stmt->fetchCol();
    }


   
/****************************/
    /* DELETE MODULE MENU ITEMS */
    /****************************/
   
public function deleteModMenus($moduleid, $mitems) {
        if (!
$mitems) { return; }
       
$sql = "DELETE FROM ".$this->db->quoteId('#__modules_menu')
        .
"\n WHERE ".$this->db->quoteId('moduleid')." = :xmod AND ".$this->db->quoteId('menuid')." = :xmen";
       
$stmt = $this->db->prepare($sql);
        foreach (
$mitems as $menuid) {
           
$stmt->bindParam(':xmod', $moduleid, PDO::PARAM_INT);
           
$stmt->bindParam(':xmen', $menuid, PDO::PARAM_INT);
           
$stmt->execute();
        }
    }


   
/****************************/
    /* INSERT MODULE MENU ITEMS */
    /****************************/
   
public function insertModMenus($moduleid, $mitems) {
        if (!
$mitems) { return; }
       
$sql = "INSERT INTO ".$this->db->quoteId('#__modules_menu')
        .
"\n (".$this->db->quoteId('mmid').", ".$this->db->quoteId('moduleid').", ".$this->db->quoteId('menuid').")"
       
."\n VALUES (NULL, :xmod, :xmen)";
       
$stmt = $this->db->prepare($sql);
        foreach (
$mitems as $menuid) {
           
$stmt->bindParam(':xmod', $moduleid, PDO::PARAM_INT);
           
$stmt->bindParam(':xmen', $menuid, PDO::PARAM_INT);
           
$stmt->execute();
        }
    }


   
/********************/
    /* COUNT COMPONENTS */
    /********************/
   
public function countComponents($options) {
       
$wheres = array();
       
$pdo_binds = array();

        if (isset(
$options['key']) && ($options['key'] != '')) {
           
$v = '%'.$options['key'].'%';
           
$wheres[] = '('.$this->db->quoteId('name').' LIKE :xkey OR '.$this->db->quoteId('component').' LIKE :xkey)';
           
$pdo_binds[':xkey'] = array($v, PDO::PARAM_STR);
        }

       
$sql = "SELECT COUNT(id) FROM ".$this->db->quoteId('#__components');
        if (
count($wheres) > 0) {
           
$sql .= ' WHERE '.implode(' AND ', $wheres);
           
$stmt = $this->db->prepare($sql);
            if (
count($pdo_binds) > 0) {
                foreach (
$pdo_binds as $key => $parr) {
                   
$stmt->bindParam($key, $parr[0], $parr[1]);
                }
            }
        } else {
           
$stmt = $this->db->prepare($sql);
        }
       
$stmt->execute();
        return (int)
$stmt->fetchResult();
    }


   
/********************************/
    /* GET COMPONENTS FROM DATABASE */
    /********************************/
   
public function getComponents($options) {
       
$wheres = array();
       
$pdo_binds = array();

        if (isset(
$options['key']) && ($options['key'] != '')) {
           
$v = '%'.$options['key'].'%';
           
$wheres[] = '('.$this->db->quoteId('name').' LIKE :xkey OR '.$this->db->quoteId('component').' LIKE :xkey)';
           
$pdo_binds[':xkey'] = array($v, PDO::PARAM_STR);
        }

       
$sql = "SELECT * FROM ".$this->db->quoteId('#__components');
        if (
count($wheres) > 0) {
           
$sql .= ' WHERE '.implode(' AND ', $wheres);
        }
       
$sql .= "\n ORDER BY ".$this->db->quoteId($options['sn']).' '.strtoupper($options['so']);
       
$stmt = $this->db->prepareLimit($sql, $options['limitstart'], $options['limit']);
        if (
count($pdo_binds) > 0) {
            foreach (
$pdo_binds as $key => $parr) {
               
$stmt->bindParam($key, $parr[0], $parr[1]);
            }
        }
       
$stmt->execute();
       
$rows = $stmt->fetchAll(PDO::FETCH_OBJ);
        return
$rows;
    }


   
/*******************/
    /* COUNT TEMPLATES */
    /*******************/
   
public function countTemplates($options) {
       
$wheres = array();
       
$pdo_binds = array();

        if (isset(
$options['section'])) {
           
$section = trim($options['section']);
            if (
$section != '') {
               
$wheres[] = $this->db->quoteId('section').' = :sect';
               
$pdo_binds[':sect'] = array($section, PDO::PARAM_STR);
            }
        }

        if (isset(
$options['key']) && ($options['key'] != '')) {
           
$v = '%'.$options['key'].'%';
           
$wheres[] = '('.$this->db->quoteId('title').' LIKE :xkey OR '.$this->db->quoteId('template').' LIKE :xkey)';
           
$pdo_binds[':xkey'] = array($v, PDO::PARAM_STR);
        }

       
$sql = "SELECT COUNT(id) FROM ".$this->db->quoteId('#__templates');
        if (
count($wheres) > 0) {
           
$sql .= ' WHERE '.implode(' AND ', $wheres);
        }
       
$stmt = $this->db->prepare($sql);
        if (
count($pdo_binds) > 0) {
            foreach (
$pdo_binds as $key => $parr) {
               
$stmt->bindParam($key, $parr[0], $parr[1]);
            }
        }
       
$stmt->execute();
        return (int)
$stmt->fetchResult();
    }


   
/*******************************/
    /* GET TEMPLATES FROM DATABASE */
    /*******************************/
   
public function getTemplates($options) {
       
$wheres = array();
       
$pdo_binds = array();

        if (isset(
$options['section'])) {
           
$section = trim($options['section']);
            if (
$section != '') {
               
$wheres[] = $this->db->quoteId('section').' = :sect';
               
$pdo_binds[':sect'] = array($section, PDO::PARAM_STR);
            }
        }

        if (isset(
$options['key']) && ($options['key'] != '')) {
           
$v = '%'.$options['key'].'%';
           
$wheres[] = '('.$this->db->quoteId('title').' LIKE :xkey OR '.$this->db->quoteId('template').' LIKE :xkey)';
           
$pdo_binds[':xkey'] = array($v, PDO::PARAM_STR);
        }

       
$sql = "SELECT * FROM ".$this->db->quoteId('#__templates');
        if (
count($wheres) > 0) {
           
$sql .= ' WHERE '.implode(' AND ', $wheres);
        }
       
$sql .= ' ORDER BY '.$this->db->quoteId($options['sn']).' '.strtoupper($options['so']);
       
$stmt = $this->db->prepareLimit($sql, $options['limitstart'], $options['limit']);
        if (
count($pdo_binds) > 0) {
            foreach (
$pdo_binds as $key => $parr) {
               
$stmt->bindParam($key, $parr[0], $parr[1]);
            }
        }
       
$stmt->execute();
       
$rows = $stmt->fetchAll(PDO::FETCH_OBJ);
        return
$rows;
    }


   
/*******************/
    /* COUNT POSITIONS */
    /*******************/
   
public function countPositions() {
       
$sql = "SELECT COUNT(id) FROM ".$this->db->quoteId('#__template_positions');
       
$stmt = $this->db->prepare($sql);
       
$stmt->execute();
        return (int)
$stmt->fetchResult();
    }


   
/****************************************/
    /* GET TEMPLATE POSITIONS FROM DATABASE */
    /****************************************/
   
public function getFullPositions($options) {
       
$section = 'frontend';

       
$sql = "SELECT p.*, (SELECT COUNT(m.id) FROM ".$this->db->quoteId('#__modules')." m WHERE m.section = :xsec AND m.position= p.position) AS modules "
       
."\n FROM ".$this->db->quoteId('#__template_positions')." p"
       
."\n ORDER BY ".$this->db->quoteId($options['sn']).' '.strtoupper($options['so']);
       
$stmt = $this->db->prepareLimit($sql, $options['limitstart'], $options['limit']);
       
$stmt->bindParam(':xsec', $section, PDO::PARAM_STR);
       
$stmt->execute();
       
$rows = $stmt->fetchAll(PDO::FETCH_OBJ);

        return
$rows;
    }


   
/**********************************************/
    /* COUNT ROWS HAVING A SPECIFIC POSITION NAME */
    /**********************************************/
   
public function countPositionName($position) {
       
$sql = "SELECT COUNT(id) FROM ".$this->db->quoteId('#__template_positions');
       
$sql .= "\n WHERE ".$this->db->quoteId('position')." = :xpos";
       
$stmt = $this->db->prepare($sql);
       
$stmt->bindParam(':xpos', $position, PDO::PARAM_STR);
       
$stmt->execute();
        return (int)
$stmt->fetchResult();
    }


   
/*****************************************************/
    /* UPDATE MODULES POSITIONS (DUE TO POSITION RENAME) */
    /*****************************************************/
   
public function updateModulesPositions($oldname, $newposition) {
       
$section = 'frontend';
       
$sql = "UPDATE ".$this->db->quoteId('#__modules')." SET ".$this->db->quoteId('position')." = :newpos"
       
."\n WHERE ".$this->db->quoteId('position')." = :oldpos AND ".$this->db->quoteId('section')." = :xsec";
       
$stmt = $this->db->prepare($sql);
       
$stmt->bindParam(':newpos', $newposition, PDO::PARAM_STR);
       
$stmt->bindParam(':oldpos', $oldname, PDO::PARAM_STR);
       
$stmt->bindParam(':xsec', $section, PDO::PARAM_STR);
       
$stmt->execute();
    }


   
/*****************/
    /* COUNT ENGINES */
    /*****************/
   
public function countEngines($options) {
       
$wheres = array();
       
$pdo_binds = array();

        if (isset(
$options['key']) && ($options['key'] != '')) {
           
$v = '%'.$options['key'].'%';
           
$wheres[] = '('.$this->db->quoteId('title').' LIKE :xkey OR '.$this->db->quoteId('engine').' LIKE :xkey)';
           
$pdo_binds[':xkey'] = array($v, PDO::PARAM_STR);
        }

       
$sql = "SELECT COUNT(id) FROM ".$this->db->quoteId('#__engines');
        if (
count($wheres) > 0) {
           
$sql .= ' WHERE '.implode(' AND ', $wheres);
        }
       
$stmt = $this->db->prepare($sql);
        if (
count($pdo_binds) > 0) {
            foreach (
$pdo_binds as $key => $parr) {
               
$stmt->bindParam($key, $parr[0], $parr[1]);
            }
        }
       
$stmt->execute();
        return (int)
$stmt->fetchResult();
    }


   
/*****************************/
    /* GET ENGINES FROM DATABASE */
    /*****************************/
   
public function getEngines($options) {
       
$wheres = array();
       
$pdo_binds = array();

        if (isset(
$options['key']) && ($options['key'] != '')) {
           
$v = '%'.$options['key'].'%';
           
$wheres[] = '('.$this->db->quoteId('title').' LIKE :xkey OR '.$this->db->quoteId('engine').' LIKE :xkey)';
           
$pdo_binds[':xkey'] = array($v, PDO::PARAM_STR);
        }

       
$sql = "SELECT * FROM ".$this->db->quoteId('#__engines');
        if (
count($wheres) > 0) {
           
$sql .= ' WHERE '.implode(' AND ', $wheres);
        }
       
$sql .= ' ORDER BY '.$this->db->quoteId($options['sn']).' '.strtoupper($options['so']);
       
$stmt = $this->db->prepareLimit($sql, $options['limitstart'], $options['limit']);
        if (
count($pdo_binds) > 0) {
            foreach (
$pdo_binds as $key => $parr) {
               
$stmt->bindParam($key, $parr[0], $parr[1]);
            }
        }
       
$stmt->execute();
       
$rows = $stmt->fetchAll(PDO::FETCH_OBJ);
        return
$rows;
    }


   
/***********************************/
    /* PUBLISH/UNPUBLISH/TOGGLE ENGINE */
    /***********************************/
   
public function publishEngine($id, $publish=-1) {
       
$response = array('success' => false, 'message' => 'Unknown error', 'newpublished' => -1);
        if (
$id < 1) { $response['message'] = 'Engine not found!'; return $response; }
        if (
$publish == -1) { //toggle status
           
$sql = "SELECT ".$this->db->quoteId('published')." FROM ".$this->db->quoteId('#__engines')
            .
"\n WHERE ".$this->db->quoteId('id')." = :xid";
           
$stmt = $this->db->prepareLimit($sql, 0, 1);
           
$stmt->bindParam(':xid', $id, PDO::PARAM_INT);
           
$stmt->execute();
           
$publish = ((int)$stmt->fetchResult() == 1) ? 0 : 1;
        }

       
$sql = "UPDATE ".$this->db->quoteId('#__engines')." SET ".$this->db->quoteId('published')." = :xpub"
       
."\n WHERE ".$this->db->quoteId('id')." = :xid";
       
$stmt = $this->db->prepare($sql);
       
$stmt->bindParam(':xpub', $publish, PDO::PARAM_INT);
       
$stmt->bindParam(':xid', $id, PDO::PARAM_INT);
       
$ok = $stmt->execute();
        if (
$ok) {
           
$response['success'] = true;
           
$response['message'] = 'Success';
           
$response['newpublished'] = $publish;
        } else {
           
$response['message'] = $stmt->getErrorMsg();
        }
        return
$response;
    }


   
/*******************************/
    /* GET ALL ENGINES BY ORDERING */
    /*******************************/
   
public function getAllEngines() {
       
$sql = "SELECT ".$this->db->quoteId('id').", ".$this->db->quoteId('title').", ".$this->db->quoteId('ordering')
        .
"\n FROM ".$this->db->quoteId('#__engines')." ORDER BY ".$this->db->quoteId('ordering')." ASC";
       
$stmt = $this->db->prepare($sql);
       
$stmt->execute();
        return
$stmt->fetchAll(PDO::FETCH_OBJ);
    }


   
/***********************/
    /* MAKE ENGINE DEFAULT */
    /***********************/
   
public function setDefaultEngine($id) {
       
$response = array('success' => false, 'message' => 'Unknown error');
        if (
$id < 1) { $response['message'] = 'Engine not found!'; return $response; }

       
$sql = "SELECT ".$this->db->quoteId('id').", ".$this->db->quoteId('published')." FROM ".$this->db->quoteId('#__engines')
        .
"\n WHERE ".$this->db->quoteId('id')." = :xid";
       
$stmt = $this->db->prepareLimit($sql, 0, 1);
       
$stmt->bindParam(':xid', $id, PDO::PARAM_INT);
       
$stmt->execute();
       
$row = $stmt->fetch(PDO::FETCH_ASSOC);
        if (!
$row) { $response['message'] = 'Engine not found!'; return $response; }

        if (
$row['published'] == 0) { $response['message'] = eFactory::getLang()->get('DEF_ENGINE_PUB'); return $response; }

       
$sql = "UPDATE ".$this->db->quoteId('#__engines')." SET ".$this->db->quoteId('defengine')." = 0 WHERE ".$this->db->quoteId('id')." <> :xid";
       
$stmt = $this->db->prepare($sql);
       
$stmt->bindParam(':xid', $id, PDO::PARAM_INT);
       
$stmt->execute();

       
$sql = "UPDATE ".$this->db->quoteId('#__engines')." SET ".$this->db->quoteId('defengine')." = 1 WHERE ".$this->db->quoteId('id')." = :xid";
       
$stmt = $this->db->prepare($sql);
       
$stmt->bindParam(':xid', $id, PDO::PARAM_INT);
       
$ok = $stmt->execute();
        if (
$ok) {
           
$response['success'] = true;
           
$response['message'] = 'Success';
        } else {
           
$response['message'] = $stmt->getErrorMsg();
        }
        return
$response;
    }


   
/**********************/
    /* COUNT AUTH METHODS */
    /**********************/
   
public function countAuthMethods($options) {
       
$wheres = array();
       
$pdo_binds = array();
        if (isset(
$options['key']) && ($options['key'] != '')) {
           
$v = '%'.$options['key'].'%';
           
$wheres[] = '('.$this->db->quoteId('title').' LIKE :xkey OR '.$this->db->quoteId('auth').' LIKE :xkey)';
           
$pdo_binds[':xkey'] = array($v, PDO::PARAM_STR);
        }

       
$sql = "SELECT COUNT(id) FROM ".$this->db->quoteId('#__authentication');
        if (
count($wheres) > 0) {
           
$sql .= ' WHERE '.implode(' AND ', $wheres);
        }
       
$stmt = $this->db->prepare($sql);
        if (
count($pdo_binds) > 0) {
            foreach (
$pdo_binds as $key => $parr) {
               
$stmt->bindParam($key, $parr[0], $parr[1]);
            }
        }
       
$stmt->execute();
        return (int)
$stmt->fetchResult();
    }


   
/**********************************/
    /* GET AUTH METHODS FROM DATABASE */
    /**********************************/
   
public function getAuthMethods($options) {
       
$wheres = array();
       
$pdo_binds = array();
        if (isset(
$options['key']) && ($options['key'] != '')) {
           
$v = '%'.$options['key'].'%';
           
$wheres[] = '('.$this->db->quoteId('title').' LIKE :xkey OR '.$this->db->quoteId('auth').' LIKE :xkey)';
           
$pdo_binds[':xkey'] = array($v, PDO::PARAM_STR);
        }

       
$sql = "SELECT * FROM ".$this->db->quoteId('#__authentication');
        if (
count($wheres) > 0) {
           
$sql .= ' WHERE '.implode(' AND ', $wheres);
        }
       
$sql .= ' ORDER BY '.$this->db->quoteId($options['sn']).' '.strtoupper($options['so']);
       
$stmt = $this->db->prepareLimit($sql, $options['limitstart'], $options['limit']);
        if (
count($pdo_binds) > 0) {
            foreach (
$pdo_binds as $key => $parr) {
               
$stmt->bindParam($key, $parr[0], $parr[1]);
            }
        }
       
$stmt->execute();
       
$rows = $stmt->fetchAll(PDO::FETCH_OBJ);
        return
$rows;
    }


   
/****************************************/
    /* PUBLISH/UNPUBLISH/TOGGLE AUTH METHOD */
    /****************************************/
   
public function publishAuth($id, $publish=-1) {
       
$response = array('success' => false, 'message' => 'Unknown error', 'newpublished' => -1);
        if (
$id < 1) { $response['message'] = 'Authentication method not found!'; return $response; }
        if (
$publish == -1) { //toggle status
           
$sql = "SELECT ".$this->db->quoteId('published')." FROM ".$this->db->quoteId('#__authentication')
            .
"\n WHERE ".$this->db->quoteId('id')." = :xid";
           
$stmt = $this->db->prepareLimit($sql, 0, 1);
           
$stmt->bindParam(':xid', $id, PDO::PARAM_INT);
           
$stmt->execute();
           
$publish = ((int)$stmt->fetchResult() == 1) ? 0 : 1;
        }

       
$sql = "UPDATE ".$this->db->quoteId('#__authentication')." SET ".$this->db->quoteId('published')." = :xpub"
       
."\n WHERE ".$this->db->quoteId('id')." = :xid";
       
$stmt = $this->db->prepare($sql);
       
$stmt->bindParam(':xpub', $publish, PDO::PARAM_INT);
       
$stmt->bindParam(':xid', $id, PDO::PARAM_INT);
       
$ok = $stmt->execute();
        if (
$ok) {
           
$response['newpublished'] = $publish;
           
$response['success'] = true;
           
$response['message'] = 'Success';
        } else {
           
$response['message'] = $stmt->getErrorMsg();
        }
        return
$response;
    }


   
/**********************************************/
    /* GET ALL AUTHENTICATION METHODS BY ORDERING */
    /**********************************************/
   
public function getAllAuths() {
       
$sql = "SELECT ".$this->db->quoteId('id').", ".$this->db->quoteId('title').", ".$this->db->quoteId('ordering')
        .
"\n FROM ".$this->db->quoteId('#__authentication')." ORDER BY ".$this->db->quoteId('ordering')." ASC";
       
$stmt = $this->db->prepare($sql);
       
$stmt->execute();
        return
$stmt->fetchAll(PDO::FETCH_OBJ);
    }


   
/*****************/
    /* COUNT PLUGINS */
    /*****************/
   
public function countPlugins($options) {
       
$wheres = array();
       
$pdo_binds = array();
        if (isset(
$options['key']) && ($options['key'] != '')) {
           
$v = '%'.$options['key'].'%';
           
$wheres[] = '('.$this->db->quoteId('title').' LIKE :xkey OR '.$this->db->quoteId('plugin').' LIKE :xkey)';
           
$pdo_binds[':xkey'] = array($v, PDO::PARAM_STR);
        }

       
$sql = "SELECT COUNT(id) FROM ".$this->db->quoteId('#__plugins');
        if (
count($wheres) > 0) {
           
$sql .= ' WHERE '.implode(' AND ', $wheres);
        }
       
$stmt = $this->db->prepare($sql);
        if (
count($pdo_binds) > 0) {
            foreach (
$pdo_binds as $key => $parr) {
               
$stmt->bindParam($key, $parr[0], $parr[1]);
            }
        }
       
$stmt->execute();
        return (int)
$stmt->fetchResult();
    }


   
/*****************************/
    /* GET PLUGINS FROM DATABASE */
    /*****************************/
   
public function getPlugins($options) {
       
$wheres = array();
       
$pdo_binds = array();
        if (isset(
$options['key']) && ($options['key'] != '')) {
           
$v = '%'.$options['key'].'%';
           
$wheres[] = '('.$this->db->quoteId('title').' LIKE :xkey OR '.$this->db->quoteId('plugin').' LIKE :xkey)';
           
$pdo_binds[':xkey'] = array($v, PDO::PARAM_STR);
        }

       
$sql = "SELECT * FROM ".$this->db->quoteId('#__plugins');
        if (
count($wheres) > 0) {
           
$sql .= ' WHERE '.implode(' AND ', $wheres);
        }
       
$sql .= ' ORDER BY '.$this->db->quoteId($options['sn']).' '.strtoupper($options['so']);
       
$stmt = $this->db->prepareLimit($sql, $options['limitstart'], $options['limit']);
        if (
count($pdo_binds) > 0) {
            foreach (
$pdo_binds as $key => $parr) {
               
$stmt->bindParam($key, $parr[0], $parr[1]);
            }
        }
       
$stmt->execute();
       
$rows = $stmt->fetchAll(PDO::FETCH_OBJ);
        return
$rows;
    }


   
/***********************************/
    /* PUBLISH/UNPUBLISH/TOGGLE PLUGIN */
    /***********************************/
   
public function publishPlugin($id, $publish=-1) {
       
$response = array('success' => false, 'message' => 'Unknown error', 'newpublished' => -1);
        if (
$id < 1) { $response['message'] = 'Plugin not found!'; return $response; }
        if (
$publish == -1) { //toggle status
           
$sql = "SELECT ".$this->db->quoteId('published')." FROM ".$this->db->quoteId('#__plugins')
            .
"\n WHERE ".$this->db->quoteId('id')." = :xid";
           
$stmt = $this->db->prepareLimit($sql, 0, 1);
           
$stmt->bindParam(':xid', $id, PDO::PARAM_INT);
           
$stmt->execute();
           
$publish = ((int)$stmt->fetchResult() == 1) ? 0 : 1;
        }

       
$sql = "UPDATE ".$this->db->quoteId('#__plugins')." SET ".$this->db->quoteId('published')." = :xpub"
       
."\n WHERE ".$this->db->quoteId('id')." = :xid";
       
$stmt = $this->db->prepare($sql);
       
$stmt->bindParam(':xpub', $publish, PDO::PARAM_INT);
       
$stmt->bindParam(':xid', $id, PDO::PARAM_INT);
       
$ok = $stmt->execute();
        if (
$ok) {
           
$response['newpublished'] = $publish;
           
$response['success'] = true;
           
$response['message'] = 'Success';
        } else {
           
$response['message'] = $stmt->getErrorMsg();
        }
        return
$response;
    }


   
/*******************************/
    /* GET ALL PLUGINS BY ORDERING */
    /*******************************/
   
public function getAllPlugins() {
       
$sql = "SELECT ".$this->db->quoteId('id').", ".$this->db->quoteId('title').", ".$this->db->quoteId('ordering')
        .
"\n FROM ".$this->db->quoteId('#__plugins')." ORDER BY ".$this->db->quoteId('ordering')." ASC";
       
$stmt = $this->db->prepare($sql);
       
$stmt->execute();
        return
$stmt->fetchAll(PDO::FETCH_OBJ);
    }


   
/****************************/
    /* GET COMPONENT PARAMETERS */
    /****************************/
   
public function componentParams() {
       
$sql = "SELECT ".$this->db->quoteId('params')." FROM ".$this->db->quoteId('#__components')
        .
"\n WHERE ".$this->db->quoteId('component')." = ".$this->db->quote('com_extmanager');
       
$stmt = $this->db->prepareLimit($sql, 0, 1);
       
$stmt->execute();
        return (string)
$stmt->fetchResult();
    }


   
/************************************/
    /* SAVE COMPONENT PARAMETERS STRING */
    /************************************/
   
public function saveComponentParams($str) {
       
$comp = 'com_extmanager';
       
$sql = "UPDATE ".$this->db->quoteId('#__components')." SET  ".$this->db->quoteId('params')." = :xpar"
       
."\n WHERE ".$this->db->quoteId('component')." = :xcomp";
       
$stmt = $this->db->prepare($sql);
       
$stmt->bindParam(':xpar', $str, PDO::PARAM_STR);
       
$stmt->bindParam(':xcomp', $comp, PDO::PARAM_STR);
       
$ok = $stmt->execute();
        return
$ok;
    }


   
/****************************************/
    /* GET INSTALLED THIRD PARTY EXTENSIONS */
    /****************************************/
   
public function getThirdExtensions() {
       
$sql = "SELECT ".$this->db->quoteId('auth')." FROM ".$this->db->quoteId('#__authentication')." WHERE ".$this->db->quoteId('iscore').' = 0';
       
$stmt = $this->db->prepare($sql);
       
$stmt->execute();
       
$auths = $stmt->fetchCol();
       
       
$sql = "SELECT ".$this->db->quoteId('component')." FROM ".$this->db->quoteId('#__components')." WHERE ".$this->db->quoteId('iscore').' = 0';
       
$stmt = $this->db->prepare($sql);
       
$stmt->execute();
       
$components = $stmt->fetchCol();
       
       
$sql = "SELECT ".$this->db->quoteId('engine')." FROM ".$this->db->quoteId('#__engines')." WHERE ".$this->db->quoteId('iscore').' = 0';
       
$stmt = $this->db->prepare($sql);
       
$stmt->execute();
       
$engines = $stmt->fetchCol();

       
$sql = "SELECT ".$this->db->quoteId('module')." FROM ".$this->db->quoteId('#__modules')." WHERE ".$this->db->quoteId('iscore').' = 0 GROUP BY '.$this->db->quoteId('module');
       
$stmt = $this->db->prepare($sql);
       
$stmt->execute();
       
$modules = $stmt->fetchCol();

       
$sql = "SELECT ".$this->db->quoteId('plugin')." FROM ".$this->db->quoteId('#__plugins')." WHERE ".$this->db->quoteId('iscore').' = 0';
       
$stmt = $this->db->prepare($sql);
       
$stmt->execute();
       
$plugins = $stmt->fetchCol();

       
$sql = "SELECT ".$this->db->quoteId('template')." FROM ".$this->db->quoteId('#__templates')." WHERE ".$this->db->quoteId('iscore').' = 0';
       
$stmt = $this->db->prepare($sql);
       
$stmt->execute();
       
$templates = $stmt->fetchCol();

       
$extensions = array();
        if (
$auths) {
            foreach (
$auths as $auth) {
               
$extensions[] = array('type' => 'auth', 'name' => $auth);
            }
        }
        if (
$components) {
            foreach (
$components as $component) {
               
$extensions[] = array('type' => 'component', 'name' => $component);
            }
        }
        if (
$engines) {
            foreach (
$engines as $engine) {
               
$extensions[] = array('type' => 'engine', 'name' => $engine);
            }
        }
        if (
$modules) {
            foreach (
$modules as $module) {
               
$extensions[] = array('type' => 'module', 'name' => $module);
            }
        }
        if (
$plugins) {
            foreach (
$plugins as $plugin) {
               
$extensions[] = array('type' => 'plugin', 'name' => $plugin);
            }
        }
        if (
$templates) {
            foreach (
$templates as $template) {
               
$extensions[] = array('type' => 'template', 'name' => $template);
            }
        }

        return
$extensions;
    }


   
/***********************************/
    /* CHECK IF DATABASE IS UP-TO-DATE */
    /***********************************/
   
public function dbisUptodate() {
       
$elxis = eFactory::getElxis();
       
$db = eFactory::getDB();

       
//Elxis 5.0
       
$sql = "SHOW COLUMNS FROM ".$db->quoteId('#__messages');
       
$stmt = $db->prepare($sql);
       
$stmt->execute();
       
$columns = $stmt->fetchCol();
        if (!
in_array('delbyto', $columns)) { return false; }//normally this should never happen

       
return true;
    }


   
/*************************/
    /* UPDATE ELXIS DATABASE */
    /*************************/
   
public function updateDatabase() {
       
$elxis = eFactory::getElxis();
       
$db = eFactory::getDB();

       
$elxis50_ok = false;
       
$sql = "SHOW COLUMNS FROM ".$db->quoteId('#__messages');
       
$stmt = $db->prepare($sql);
       
$stmt->execute();
       
$columns = $stmt->fetchCol();
        if (
in_array('delbyto', $columns)) { $elxis50_ok = true; }

        if (!
$elxis50_ok) {//normally this should never happen
           
if ($elxis->getConfig('DB_TYPE') == 'pgsql') {
               
$sql = "ALTER TABLE ".$db->quoteId('#__users')." ADD COLUMN ".$db->quoteId('lastclicks')." TEXT NULL";
            } else {
               
$sql = "ALTER TABLE ".$db->quoteId('#__users')." ADD COLUMN ".$db->quoteId('lastclicks')." TEXT";
            }
           
$stmt = $db->prepare($sql);
           
$stmt->execute();

           
$eFiles = eFactory::getFiles();

           
//Create admin template position "adminside"
           
$pos = 'adminside';
           
$desc = 'Administration - Side column';
           
$sql = "INSERT INTO ".$db->quoteId('#__template_positions')." VALUES (NULL, :xpos, :xdesc)";
           
$stmt = $db->prepare($sql);
           
$stmt->bindParam(':xpos', $pos, PDO::PARAM_STR);
           
$stmt->bindParam(':xdesc', $desc, PDO::PARAM_STR);
           
$stmt->execute();

           
//Update module adminprofile
           
if (file_exists(ELXIS_PATH.'/modules/mod_adminprofile/css/')) {
               
$eFiles->deleteFolder('modules/mod_adminprofile/css/');
               
$eFiles->deleteFile('modules/mod_adminprofile/logo.png');
            }

           
//Set module "adminprofile" to position "adminside"
           
$pos = 'adminside';
           
$mod = 'mod_adminprofile';
           
$sql = "UPDATE ".$db->quoteId('#__modules')." SET ".$db->quoteId('ordering')." = 1, ".$db->quoteId('position')." = :xpos, ".$db->quoteId('published')." = 1"
           
."\n WHERE ".$db->quoteId('module')." = :xmod";
           
$stmt = $db->prepare($sql);
           
$stmt->bindParam(':xpos', $pos, PDO::PARAM_STR);
           
$stmt->bindParam(':xmod', $mod, PDO::PARAM_STR);
           
$stmt->execute();

           
//Uninstall component "Languages"
           
$eFiles->deleteFolder('components/com_languages/');

           
$comp = 'com_languages';
           
$sql = "DELETE FROM ".$db->quoteId('#__components')." WHERE ".$db->quoteId('component')." = :xcomp";
           
$stmt = $db->prepare($sql);
           
$stmt->bindParam(':xcomp', $comp, PDO::PARAM_STR);
           
$stmt->execute();

           
$sql = "DELETE FROM ".$db->quoteId('#__acl')." WHERE ".$db->quoteId('element')." = :xcomp";
           
$stmt = $db->prepare($sql);
           
$stmt->bindParam(':xcomp', $comp, PDO::PARAM_STR);
           
$stmt->execute();

           
//Uninstall module "mod_mobilefront", resmobile from frontpage and mobile template positions
           
$eFiles->deleteFolder('modules/mod_mobilefront/');

           
$mod = 'mod_mobilefront';
           
$sql = "DELETE FROM ".$db->quoteId('#__modules')." WHERE ".$db->quoteId('module')." = :xmod";
           
$stmt = $db->prepare($sql);
           
$stmt->bindParam(':xmod', $mod, PDO::PARAM_STR);
           
$stmt->execute();
           
$sql = "DELETE FROM ".$db->quoteId('#__acl')." WHERE ".$db->quoteId('element')." = :xmod";
           
$stmt = $db->prepare($sql);
           
$stmt->bindParam(':xmod', $mod, PDO::PARAM_STR);
           
$stmt->execute();
           
$v = 'resmobile';
           
$sql = "DELETE FROM ".$db->quoteId('#__frontpage')." WHERE ".$db->quoteId('pname')." = :xv";
           
$stmt = $db->prepare($sql);
           
$stmt->bindParam(':xv', $v, PDO::PARAM_STR);
           
$stmt->execute();
           
$v = 'mobilefront';
           
$sql = "DELETE FROM ".$db->quoteId('#__template_positions')." WHERE ".$db->quoteId('position')." = :xv";
           
$stmt = $db->prepare($sql);
           
$stmt->bindParam(':xv', $v, PDO::PARAM_STR);
           
$stmt->execute();
           
$v = 'mobiletop';
           
$stmt->bindParam(':xv', $v, PDO::PARAM_STR);
           
$stmt->execute();
           
$v = 'mobilebottom';
           
$stmt->bindParam(':xv', $v, PDO::PARAM_STR);
           
$stmt->execute();

            if (
$elxis->getConfig('DB_TYPE') == 'pgsql') {
               
$sql = "ALTER TABLE ".$db->quoteId('#__menu')." ADD COLUMN ".$db->quoteId('iconfont')." VARCHAR(40) NULL";
            } else {
               
$sql = "ALTER TABLE ".$db->quoteId('#__menu')." ADD COLUMN ".$db->quoteId('iconfont')." VARCHAR(40) DEFAULT NULL";
            }
           
$stmt = $db->prepare($sql);
           
$stmt->execute();

           
//Update personal messages
           
if ($elxis->getConfig('DB_TYPE') == 'pgsql') {
               
$sql = "ALTER TABLE ".$db->quoteId('#__messages')." ADD COLUMN ".$db->quoteId('replyto')." SMALLINT NOT NULL DEFAULT 0";
               
$sql2 = "ALTER TABLE ".$db->quoteId('#__messages')." ADD COLUMN ".$db->quoteId('delbyfrom')." INTEGER NOT NULL DEFAULT 0";
               
$sql3 = "ALTER TABLE ".$db->quoteId('#__messages')." ADD COLUMN ".$db->quoteId('delbyto')." INTEGER NOT NULL DEFAULT 0";
            } else {
               
$sql = "ALTER TABLE ".$db->quoteId('#__messages')." ADD COLUMN ".$db->quoteId('replyto')." INT(10) UNSIGNED NOT NULL DEFAULT '0'";
               
$sql2 = "ALTER TABLE ".$db->quoteId('#__messages')." ADD COLUMN ".$db->quoteId('delbyfrom')." TINYINT(2) UNSIGNED NOT NULL DEFAULT '0'";
               
$sql3 = "ALTER TABLE ".$db->quoteId('#__messages')." ADD COLUMN ".$db->quoteId('delbyto')." TINYINT(2) UNSIGNED NOT NULL DEFAULT '0'";
            }
           
$stmt = $db->prepare($sql);
           
$stmt->execute();
           
$stmt = $db->prepare($sql2);
           
$stmt->execute();
           
$stmt = $db->prepare($sql3);
           
$stmt->execute();

           
//Make past default templates not core in order to be able to be uninstalled
           
$templates = array('flex', 'delta', 'aiolos');
           
$sql = "UPDATE ".$db->quoteId('#__templates')." SET ".$db->quoteId('iscore')." = 0 WHERE ".$db->quoteId('template')." = :xtpl";
           
$stmt = $db->prepare($sql);
            foreach (
$templates as $tpl) {
               
$stmt->bindParam(':xtpl', $tpl, PDO::PARAM_STR);
               
$stmt->execute();                
            }

            if (
file_exists(ELXIS_PATH.'/templates/five/index.php')) { //Install template Five
               
$tpl = 'five';
               
$sql = "SELECT COUNT(id) FROM ".$db->quoteId('#__templates')." WHERE ".$db->quoteId('template')." = :xtpl";
               
$stmt = $db->prepare($sql);
               
$stmt->bindParam(':xtpl', $tpl, PDO::PARAM_STR);
               
$stmt->execute();
               
$n = (int)$stmt->fetchResult();
                if (
$n < 1) {
                   
$title = 'Five';
                   
$section = 'frontend';
                   
$core = 1;
                   
$sql = "INSERT INTO ".$db->quoteId('#__templates')." VALUES (NULL, :xtitle, :xtpl, :xsec, :xcore, NULL)";
                   
$stmt = $db->prepare($sql);
                   
$stmt->bindParam(':xtitle', $title, PDO::PARAM_STR);
                   
$stmt->bindParam(':xtpl', $tpl, PDO::PARAM_STR);
                   
$stmt->bindParam(':xsec', $section, PDO::PARAM_STR);
                   
$stmt->bindParam(':xcore', $core, PDO::PARAM_INT);
                   
$stmt->execute();
                }
            }

           
//Switch admin template to Onyx
           
if (file_exists(ELXIS_PATH.'/templates/admin/onyx/index.php')) {
               
$tpl = 'onyx';
               
$sql = "SELECT COUNT(id) FROM ".$db->quoteId('#__templates')." WHERE ".$db->quoteId('template')." = :xtpl";
               
$stmt = $db->prepare($sql);
               
$stmt->bindParam(':xtpl', $tpl, PDO::PARAM_STR);
               
$stmt->execute();
               
$n = (int)$stmt->fetchResult();
                if (
$n < 1) {
                   
$title = 'Onyx';
                   
$section = 'backend';
                   
$core = 1;
                   
$sql = "INSERT INTO ".$db->quoteId('#__templates')." VALUES (NULL, :xtitle, :xtpl, :xsec, :xcore, NULL)";
                   
$stmt = $db->prepare($sql);
                   
$stmt->bindParam(':xtitle', $title, PDO::PARAM_STR);
                   
$stmt->bindParam(':xtpl', $tpl, PDO::PARAM_STR);
                   
$stmt->bindParam(':xsec', $section, PDO::PARAM_STR);
                   
$stmt->bindParam(':xcore', $core, PDO::PARAM_INT);
                   
$stmt->execute();
                }
               
//remove all previous templates
               
$sql = "DELETE FROM ".$db->quoteId('#__templates')
                .
"\n WHERE ".$db->quoteId('section')." = ".$db->quote('backend')." AND ".$db->quoteId('template')." <> ".$db->quote('onyx');
               
$stmt = $db->prepare($sql);
               
$stmt->execute();

               
$configfile = 'configuration.php';
                if (
defined('ELXIS_MULTISITE')) { $configfile = 'config'.ELXIS_MULTISITE.'.php'; }
               
$handle = @fopen(ELXIS_PATH.'/'.$configfile, 'r');
                if (
$handle) {
                   
$newdata = '';
                    while ((
$line = fgets($handle)) !== false) {
                        if (
strpos($line, 'private $ATEMPLATE') !== false) {
                           
$newdata .= "\t".'private $ATEMPLATE = \'onyx\';'._LEND;
                        } else {
                           
$newdata .= $line;
                        }
                    }
                   
fclose($handle);
                   
$configfile = 'configuration.php';
                    if (
defined('ELXIS_MULTISITE')) { $configfile = 'config'.ELXIS_MULTISITE.'.php'; }
                   
$eFiles->createFile($configfile, $newdata);
                    unset(
$newdata);
                   
$eFiles->deleteFolder('templates/admin/iris/');
                }
                unset(
$handle);
            }
        }
//Elxis 5.0 end
   
}


   
/*************************/
    /* COUNT SCHEDULED ITEMS */
    /*************************/
   
public function countScheduledItems() {
       
$pubdate = '2014-01-01 00:00:00';
       
$unpubdate = '2060-01-01 00:00:00';

       
$sql = "SELECT COUNT(id) FROM ".$this->db->quoteId('#__modules')
        .
"\n WHERE (".$this->db->quoteId('published')." = 0 AND ".$this->db->quoteId('pubdate')." != :xpub) OR"
       
."\n (".$this->db->quoteId('published')." = 1 AND ".$this->db->quoteId('unpubdate')." != :xupub)";
       
$stmt = $this->db->prepare($sql);
       
$stmt->bindParam(':xpub', $pubdate, PDO::PARAM_STR);
       
$stmt->bindParam(':xupub', $unpubdate, PDO::PARAM_STR);
       
$stmt->execute();
        return (int)
$stmt->fetchResult();
    }


   
/********************/
    /* GET PLUGIN USAGE */
    /********************/
   
public function getPluginUsage($qsyntax) {
       
$q = '%'.$qsyntax.'%';

       
//com_content
       
$sql = "SELECT ".$this->db->quoteId('id').", ".$this->db->quoteId('title')." FROM ".$this->db->quoteId('#__content')
        .
"\n WHERE ".$this->db->quoteId('introtext')." LIKE :qtxt OR ".$this->db->quoteId('maintext')." LIKE :qtxt ORDER BY ".$this->db->quoteId('created')." DESC";
       
$stmt = $this->db->prepare($sql);
       
$stmt->bindParam(':qtxt', $q, PDO::PARAM_STR);
       
$stmt->execute();
       
$rows = $stmt->fetchPairs();

       
$category = 'com_content';
       
$element1 = 'introtext';
       
$element2 = 'maintext';
       
$sql = "SELECT ".$this->db->quoteId('elid')." FROM ".$this->db->quoteId('#__translations')
        .
"\n WHERE ".$this->db->quoteId('category')." = :xctg AND (".$this->db->quoteId('element')." = :xelem1 OR ".$this->db->quoteId('element')." = :xelem2)"
       
."\n AND ".$this->db->quoteId('translation')." LIKE :qtxt";
       
$stmt = $this->db->prepare($sql);
       
$stmt->bindParam(':xctg', $category, PDO::PARAM_STR);
       
$stmt->bindParam(':xelem1', $element1, PDO::PARAM_STR);
       
$stmt->bindParam(':xelem2', $element2, PDO::PARAM_STR);
       
$stmt->bindParam(':qtxt', $q, PDO::PARAM_STR);
       
$stmt->execute();
       
$trans = $stmt->fetchCol();

       
$articles = array();
        if (
$rows) { $articles = $rows; }
        unset(
$rows);
        if (
$trans) {
            foreach (
$trans as $elid) {
                if (!isset(
$articles[$elid])) { $articles[$elid] = 'Article '.$elid.' translation'; }
            }
        }
        unset(
$trans);

       
//modules
       
$module = 'mod_content';
       
$sql = "SELECT ".$this->db->quoteId('id').", ".$this->db->quoteId('title')." FROM ".$this->db->quoteId('#__modules')
        .
"\n WHERE ".$this->db->quoteId('module')." = :xmod AND ".$this->db->quoteId('content')." LIKE :qtxt";
       
$stmt = $this->db->prepare($sql);
       
$stmt->bindParam(':xmod', $module, PDO::PARAM_STR);
       
$stmt->bindParam(':qtxt', $q, PDO::PARAM_STR);
       
$stmt->execute();
       
$modules = $stmt->fetchPairs();

       
$products = array();
       
//com_shop
       
if (file_exists(ELXIS_PATH.'/components/com_shop/shop.php')) {
           
$sql = "SELECT ".$this->db->quoteId('id').", ".$this->db->quoteId('title')." FROM ".$this->db->quoteId('#__shop_products')
            .
"\n WHERE ".$this->db->quoteId('description')." LIKE :qtxt";
           
$stmt = $this->db->prepare($sql);
           
$stmt->bindParam(':qtxt', $q, PDO::PARAM_STR);
           
$stmt->execute();
           
$rows = $stmt->fetchPairs();

           
$category = 'com_shop';
           
$element = 'proddescr';
           
$sql = "SELECT ".$this->db->quoteId('elid')." FROM ".$this->db->quoteId('#__translations')
            .
"\n WHERE ".$this->db->quoteId('category')." = :xctg AND ".$this->db->quoteId('element')." = :xelem AND ".$this->db->quoteId('translation')." LIKE :qtxt";
           
$stmt = $this->db->prepare($sql);
           
$stmt->bindParam(':xctg', $category, PDO::PARAM_STR);
           
$stmt->bindParam(':xelem', $element, PDO::PARAM_STR);
           
$stmt->bindParam(':qtxt', $q, PDO::PARAM_STR);
           
$stmt->execute();
           
$trans = $stmt->fetchCol();

            if (
$rows) { $products = $rows; }
            unset(
$rows);
            if (
$trans) {
                foreach (
$trans as $elid) {
                    if (!isset(
$products[$elid])) { $products[$elid] = 'Product '.$elid.' translation'; }
                }
            }
            unset(
$trans);
        }

        return array(
           
'articles' => $articles,
           
'modules' => $modules,
           
'products' => $products
       
);
    }

}

?>