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 user controller functions
class UserController extends Controller{        
        
        # index function
        function index($info=''){
                
                if(!isset($info['referer'])) {
                        $info['red_referer'] = isValidReferer($_SERVER['HTTP_REFERER']);
                        $this->set('post', $info);
                }
                                
                $this->render('common/login');
        }
        
        # function to set login session items
        function setLoginSession($userInfo) {
                @Session::setSession('userInfo', $userInfo);
                @Session::setSession('lang_code', $userInfo['lang_code']);
                @Session::setSession('text', '');
        }
        
        # login function
        function login(){           
            
            $_POST['userName'] = sanitizeData($_POST['userName']);
                $this->set('post', $_POST);
                $errMsg['userName'] = formatErrorMsg($this->validate->checkBlank($_POST['userName']));
                $errMsg['password'] = formatErrorMsg($this->validate->checkBlank($_POST['password']));
                if(!$this->validate->flagErr){
                        $sql = "select u.*,ut.user_type from users u,usertypes ut where u.utype_id=ut.id and u.username='".addslashes($_POST['userName'])."'";
                        $userInfo = $this->db->select($sql, true);
                        if(!empty($userInfo['id'])){
                                if($userInfo['password'] == md5($_POST['password'])){
                                        
                                        // get user type spec details and verify whether to check activation or not
                                        $activationStatus = true;
                                        $userTypeCtrler = new UserTypeController();
                                        if ($userTypeCtrler->isEmailActivationEnabledForUserType($userInfo['utype_id'])) {
                                                if ($userInfo['confirm'] == 0) {
                                                        $activationStatus = false;
                                                }
                                        }
                                        
                                        // check for user status and activation
                                        if($userInfo['status'] && $activationStatus){
                                            
                                        // if login after first installation
                            if (!empty($_POST['lang_code']) && ($_POST['lang_code'] != 'en')) {
                                $_POST['lang_code'] = addslashes($_POST['lang_code']);
                                $sql = "UPDATE `settings` SET set_val='".addslashes($_POST['lang_code'])."' WHERE set_name='SP_DEFAULTLANG'";
                                $this->db->query($sql);
                                
                                $sql = "UPDATE users SET lang_code='".addslashes($_POST['lang_code'])."' WHERE id=1";
                                $this->db->query($sql);
                                
                                $userInfo['lang_code'] = $_POST['lang_code'];
                            }
                            
                            // update timezone
                            if (!empty($_POST['time_zone'])) {
                                $sql = "UPDATE `settings` SET set_val='".addslashes($_POST['time_zone'])."' WHERE set_name='SP_TIME_ZONE'";
                                $this->db->query($sql);
                            }
                                            
                                                $uInfo['userId'] = $userInfo['id'];
                                                $uInfo['userType'] = $userInfo['user_type'];
                                                $uInfo['userTypeId'] = $userInfo['utype_id'];
                                                $uInfo['lang_code'] = $userInfo['lang_code'];
                                                $this->setLoginSession($uInfo);
                                                
                                                if ($referer = isValidReferer($_POST['red_referer'])) {
                                                        redirectUrl($referer);
                                                } else {
                                                        redirectUrl(SP_WEBPATH."/");    
                                                }
                                                                                                
                                        }else{
                                                $msgTxt = $activationStatus ? $_SESSION['text']['login']["User inactive"] : $_SESSION['text']['login']["user_not_activated_msg"];
                                                $errMsg['userName'] = formatErrorMsg($msgTxt);
                                        }
                                }else{
                                        $errMsg['password'] = formatErrorMsg($_SESSION['text']['login']["Password incorrect"]);
                                }
                        }else{
                                $errMsg['userName'] = formatErrorMsg($_SESSION['text']['login']["Login incorrect"]);
                        }
                }
                $this->set('errMsg', $errMsg);
                $this->index($_POST);
        }
        
        # func to confirm the user registration
        function confirmUser($confirmCode) {
                $confirmCode = addslashes($confirmCode);
                $sql = "select id from users where confirm_code='$confirmCode'";
                $userInfo = $this->db->select($sql, true);
                $error = "";
                
                if(!empty($userInfo['id'])){
                        
                        $sql = "update users set confirm=1,status=1 where id=".$userInfo['id'];
                        if($this->db->query($sql)){
                                $this->set('confirm', true);
                        }else{
                                $error = showErrorMsg($this->spTextRegister['user_confirm_content_1'], false, true);
                        }
                        
                } else {
                        $error = showErrorMsg($this->spTextRegister['user_confirm_content_1'], false, true);
                }
                
                $this->set('error', $error);
                $this->render('common/registerconfirm');
        }
        
        # register function
        function register($info = ""){
                
                $seopluginCtrler =  new SeoPluginsController();
                $subscriptionActive = false;
                $utypeCtrler = new UserTypeController();
                $this->set('post', $info);
                
                // check whetehr plugin installed or not
                if ($seopluginCtrler->isPluginActive("Subscription")) {
                        $subscriptionActive = true;
                        $userTypeList = $utypeCtrler->getAllUserTypes();
                        $this->set('userTypeList', $userTypeList);
                        
                        // include available payment gateways
                        include SP_PLUGINPATH . "/Subscription/paymentgateway.ctrl.php";
                        $pgCtrler = new PaymentGateway();
                        $pgList = $pgCtrler->__getAllPaymentGateway();
                        $this->set('pgList', $pgList);
                        $this->set('defaultPgId', $pgCtrler->__getDefaultPaymentGateway());
                        $this->set('spTextSubscription', $this->getLanguageTexts('subscription', $_SESSION['lang_code']));
                
                $currencyCtrler = new CurrencyController();
                $this->set('currencyList', $currencyCtrler->getCurrencyCodeMapList());
                        
                } else {
                        $this->set('defaultUserTypeId', $utypeCtrler->getDefaultUserTypeId());  
                }
                
                $this->set('subscriptionActive', $subscriptionActive);
                $this->render('common/register');
        }
        
        # function to show pricing
        function showPricing(){
                
                $seopluginCtrler =  new SeoPluginsController();
                $utypeCtrler = new UserTypeController();
                
                // check whetehr plugin installed or not
                if ($seopluginCtrler->isPluginActive("Subscription")) {
                        $userSpecFields = $utypeCtrler->userSpecFields;
                        $userTypeList = $utypeCtrler->getAllUserTypes();
                        $list = array();
                        foreach ($userTypeList as $userType) $list[$userType['id']] = $userType;
                        $this->set('list', $list);
                        
                        $spTextSubscription = $this->getLanguageTexts('subscription', $_SESSION['lang_code']);
                        $spTextTools = $this->getLanguageTexts('seotools', $_SESSION['lang_code']);
                        $this->set('spTextSubscription', $spTextSubscription);
                        
                        // get all plugin access list
                        $pluginAccessList = $utypeCtrler->getPluginAccessSettings();
                        $pluginNameList = array();
                        foreach ($pluginAccessList as $pluginAccessInfo) {
                                if ($pluginAccessInfo['status'] == 0) continue;
                                $pluginNameList[$pluginAccessInfo['name']] = $pluginAccessInfo['label'];
                        }
                                
                        // get all seo tool access list
                        $toolAccessList = $utypeCtrler->getSeoToolAccessSettings();
                        $toolNameList = array();
                        foreach ($toolAccessList as $toolAccessInfo) {
                                if ($toolAccessInfo['status'] == 0) continue;
                                $toolNameList[$toolAccessInfo['name']] = $spTextTools[$toolAccessInfo['url_section']];
                        }
                        
                        $utypeSpecList = array();
                        $spText = $_SESSION['text'];
                        foreach ($userSpecFields as $specName) {
                                
                                if (in_array($specName, array('enable_email_activation'))) continue;
                                
                                if (stristr($specName, 'plugin_')) {
                                        if (empty($pluginNameList[$specName])) continue;
                                        $utypeSpecList[$specName] = $pluginNameList[$specName];
                                        continue;
                                }
                                
                                if (stristr($specName, 'seotool_')) {
                                        if (empty($toolNameList[$specName])) continue;
                                        $utypeSpecList[$specName] = $toolNameList[$specName];
                                        continue;
                                }
                                
                                switch ($specName) {
                                        case "price":
                                                $utypeSpecList[$specName] = $spText['common']['Price'];
                                                break;
                                        case "keywordcount":
                                                $utypeSpecList[$specName] = $spText['common']['Keywords Count'];
                                                break;
                                        case "websitecount":
                                                $utypeSpecList[$specName] = $spText['common']['Websites Count'];
                                                break;
                                        case "searchengine_count":
                                                $utypeSpecList[$specName] = $spText['common']['Search Engine Count'];
                                                break;
                                        case "directory_submit_limit":
                                                $utypeSpecList[$specName] = $spTextSubscription['Directory Submit Limit'];
                                                break;
                                        case "directory_submit_daily_limit":
                                            $utypeSpecList[$specName] = $spTextSubscription['Directory Submit Daily Limit'];
                                            break;
                                        case "social_media_link_count":
                                                $utypeSpecList[$specName] = $spTextSubscription['Social Media Link Count'];
                                                break;
                                        default:
                                                $utypeSpecList[$specName] = $spTextSubscription[$specName];
                                                
                                }
                        }

                        $this->set('utypeSpecList', $utypeSpecList);                                            
                        $currencyCtrler = new CurrencyController();
                        $this->set('currencyList', $currencyCtrler->getCurrencyCodeMapList());
                        $this->render('common/pricing');
                } else {
                        redirectUrl(SP_WEBPATH . "/register.php");
                }       
                
        }
        
        # function to start registration
        function startRegistration(){
                $utypeCtrler = New UserTypeController();
            $_POST = sanitizeData($_POST);
                $this->set('post', $_POST);
                $userInfo = $_POST;
                $subscriptionActive = false;
                $userStatus = 1;
                
                $errMsg['userName'] = formatErrorMsg($this->validate->checkUname($userInfo['userName']));
                $errMsg['password'] = formatErrorMsg($this->validate->checkPasswords($userInfo['password'], $userInfo['confirmPassword']));
                $errMsg['firstName'] = formatErrorMsg($this->validate->checkBlank($userInfo['firstName']));
                $errMsg['lastName'] = formatErrorMsg($this->validate->checkBlank($userInfo['lastName']));
                $errMsg['email'] = formatErrorMsg($this->validate->checkEmail($userInfo['email']));
                $errMsg['code'] = formatErrorMsg($this->validate->checkCaptcha($userInfo['code']));
                $errMsg['utype_id'] = formatErrorMsg($this->validate->checkNumber($userInfo['utype_id']));
                
                // if admin user type selected, show error
                $adminTypeId = $utypeCtrler->getAdminUserTypeId();
                if ($adminTypeId == $userInfo['utype_id']) {
                        $this->validate->flagErr = true;
                        $errMsg['userName'] = formatErrorMsg("You can not register as admin!!");
                }
                
                // if payment plugin installed check whether valid payment gateway found
                $seopluginCtrler =  new SeoPluginsController();
                if ($seopluginCtrler->isPluginActive("Subscription")) {
                        $subscriptionActive = true;
                        $errMsg['pg_id'] = formatErrorMsg($this->validate->checkNumber($userInfo['pg_id']));
                        $userStatus = 0;
                }
                
                if(!$this->validate->flagErr){
                        if (!$this->__checkUserName($userInfo['userName'])) {
                                if (!$this->__checkEmail($userInfo['email'])) {
                                        $utypeId = intval($userInfo['utype_id']);
                                        $sql = "insert into users
                                        (utype_id,username,password,first_name,last_name,email,created,status) 
                                        values ($utypeId,'".addslashes($userInfo['userName'])."','".md5($userInfo['password'])."',
                                        '".addslashes($userInfo['firstName'])."','".addslashes($userInfo['lastName'])."',
                                        '".addslashes($userInfo['email'])."',UNIX_TIMESTAMP(),$userStatus)";
                                        $this->db->query($sql);
                                        
                                        // get user id created
                                        $userId = $this->db->getMaxId('users');
                                        $error = 0;
                                        
                                        // check whether subscription is active
                                        if ($subscriptionActive and $userId) {
                                                $utypeInfo = $utypeCtrler->__getUserTypeInfo($utypeId);
                                                
                                                // if it is paid subscription, proceed with payment
                                                if ($utypeInfo['price'] > 0) {
                                                        $paymentPluginId = intval($userInfo['pg_id']);
                                                        @Session::setSession('payment_plugin_id', $paymentPluginId);
                                                        $quantity = intval($userInfo['quantity']);
                                                        $pluginCtrler = $seopluginCtrler->createPluginObject("Subscription");
                                                        $paymentForm = $pluginCtrler->pgCtrler->getPaymentForm($paymentPluginId, $userId, $utypeInfo, $quantity);
                                                        $this->set('paymentForm', $paymentForm);                                                        
                                                } else {
                                                        $this->__changeStatus($userId, 1);
                                                        
                                                        // if trial period is set for user type
                                                        if (!empty($utypeInfo['free_trial_period'])) {
                                                                $totalDays = intval($utypeInfo['free_trial_period']);
                                                                $day = date('d') + $totalDays;
                                                                $expiryTimeStamp = mktime(23, 59, 59, date('m'), $day, date('Y'));
                                                                $expiryDate = date('Y-m-d', $expiryTimeStamp);
                                                                $this->updateUserInfo($userId, 'expiry_date', $expiryDate);
                                                        }
                                                        
                                                }                                               
                                        }
                                        
                                        # get confirm code
                                        if ($utypeCtrler->isEmailActivationEnabledForUserType($utypeId)) {
                                                $this->__changeStatus($userId, 0);
                                                $cfm = str_shuffle($userId . $userInfo['userName']);
                                                $sql = "update users set confirm_code='$cfm' where id=$userId";
                                                $this->db->query($sql);
                                                $this->set('confirmLink', SP_WEBPATH . "/register.php?sec=confirm&code=$cfm");
                                                
                                                // get mail details
                                                $adminInfo = $this->__getAdminInfo();
                                                $adminName = $adminInfo['first_name']." ".$adminInfo['last_name'];
                                                $this->set('name', $userInfo['firstName']." ".$userInfo['lastName']);
                                                $subject = SP_COMPANY_NAME . " " . $this->spTextRegister['Registration'];
                                                $content = $this->getViewContent('email/accountconfirmation');
                                                
                                                if(!sendMail($adminInfo['email'], $adminName, $userInfo['email'], $subject, $content)){
                                                        $error = showErrorMsg(
                                                                'An internal error occured while sending confirmation mail! Please <a href="'.SP_CONTACT_LINK.'">contact</a> seo panel team.',
                                                                false
                                                        );
                                                }                                               
                                        }
                                        
                                        $this->set('error', $error);
                                        $this->render('common/registerconfirm');
                                        return True;
                                        
                                }else{
                                        $errMsg['email'] = formatErrorMsg($_SESSION['text']['login']['emailexist']);
                                }
                        }else{
                                $errMsg['userName'] = formatErrorMsg($_SESSION['text']['login']['usernameexist']);
                        }
                }
                
                $this->set('errMsg', $errMsg);
                $this->register($userInfo);
        }
        
        # function for logout
        function logout(){
            Session::destroySession();
                redirectUrl(SP_WEBPATH."/login.php");
        }
        
        # func to show users
        function listUsers($info=''){
                
            $info['pageno'] = intval($info['pageno']);
                $pageScriptPath = 'users.php?stscheck=';
                $pageScriptPath .= isset($info['stscheck']) ? $info['stscheck'] : "select";
                $sql = "select * from users where utype_id!=1";

                // if status set
                if (isset($info['stscheck']) && $info['stscheck'] != 'select') {
                        $info['stscheck'] = intval($info['stscheck']);
                        $sql .= " and status='{$info['stscheck']}'";
                }
                
                // search for user name
                if (!empty($info['user_name'])) {
                        $sql .= " and (username like '%".addslashes($info['user_name'])."%' 
                        or first_name like '%".addslashes($info['user_name'])."%'
                        or last_name like '%".addslashes($info['user_name'])."%')";
                        $pageScriptPath .= "&user_name=" . $info['user_name'];
                }
                
                $sql .= " order by username";
                
                # pagination setup              
                $this->db->query($sql, true);
                $this->paging->setDivClass('pagingdiv');
                $this->paging->loadPaging($this->db->noRows, SP_PAGINGNO);
                $pagingDiv = $this->paging->printPages($pageScriptPath, '', 'scriptDoLoad', 'content', 'layout=ajax');          
                $this->set('pagingDiv', $pagingDiv);
                $sql .= " limit ".$this->paging->start .",". $this->paging->per_page;

                $statusList = array(
                        $_SESSION['text']['common']['Active'] => 1,
                        $_SESSION['text']['common']['Inactive'] => 0,
                );
                
                $this->set('statusList', $statusList);
                $this->set('info', $info);
                
                $userList = $this->db->select($sql);
                $this->set('userList', $userList);
                $this->set('pageNo', $info['pageno']);                  
                $this->render('user/list', 'ajax');
        }
        
        # func to change status
        function __changeStatus($userId, $status){
                
                $userId = intval($userId);
                $sql = "update users set status=$status where id=$userId";
                $this->db->query($sql);
                
                # deaactivate all websites under this user
                if(empty($status)){
                        $websiteCtrler = New WebsiteController();
                        $websiteList = $websiteCtrler->__getAllWebsites($userId);
                        foreach ($websiteList as $websiteInfo){
                                $websiteCtrler->__changeStatus($websiteInfo['id'], 0);
                        }
                }
        }
        
        # func to change status
        function __deleteUser($userId){
                
                $userId = intval($userId);
                $sql = "delete from users where id=$userId";
                $this->db->query($sql);
                
                $sql = "select id from websites where user_id=$userId";
                $webisteList = $this->db->select($sql);
                $webisteCtrler = New WebsiteController();
                foreach($webisteList as $webisteInfo){
                        $webisteCtrler->__deleteWebsite($webisteInfo['id']);
                }
        }
        
        function newUser(){     
                        
                // Get the user types
                $userTypeCtlr = new UserTypeController();
                $userTypeList = $userTypeCtlr->getAllUserTypes();
                $this->set('userTypeList', $userTypeList);
                $this->render('user/new', 'ajax');
        }
        
        function __checkUserName($username){
                $sql = "select id from users where username='$username'";
                $userInfo = $this->db->select($sql, true);
                return empty($userInfo['id']) ? false :  $userInfo['id'];
        }
        
        function __checkEmail($email){
                
                $sql = "select id from users where email='".addslashes($email)."'";
                $userInfo = $this->db->select($sql, true);
                return empty($userInfo['id']) ? false :  $userInfo['id'];
        }
        
        function __getUserInfo($userId){
                
                $userId = intval($userId);
                $sql = "select * from users where id=$userId";
                $userInfo = $this->db->select($sql, true);
                return empty($userInfo['id']) ? false :  $userInfo;
        }
        
        # get admin user details
        function __getAdminInfo(){
                $sql = "select * from users where utype_id=1";
                $userInfo = $this->db->select($sql, true);
                return empty($userInfo['id']) ? false :  $userInfo;
        }
        
        #function to get all users      
        function __getAllUsers($active=1,$admin=true, $orderByCol = "username"){
                $sql = "select * from users where status=$active";
                $sql .= $admin ? "" : " and utype_id!=1";
                $sql .= " order by " . addslashes($orderByCol); 
                $userList = $this->db->select($sql);
                return $userList;
        }
        
        #function to get all users having website       
        function __getAllUsersHavingWebsite($active=1,$admin=true){
                $sql = "select u.* from users u,websites w where w.user_id=u.id and u.status=$active and w.status=1";
                $sql .= $admin ? "" : " and utype_id!=1";
                $sql .= " group by u.id order by username"; 
                $userList = $this->db->select($sql);
                return $userList;
        }
        
        function createUser($userInfo, $renderResults = true){
            $userInfo = sanitizeData($userInfo);
                $this->set('post', $userInfo);
                $errMsg['userName'] = formatErrorMsg($this->validate->checkUname($userInfo['userName']));
                $errMsg['password'] = formatErrorMsg($this->validate->checkPasswords($userInfo['password'], $userInfo['confirmPassword']));
                $errMsg['firstName'] = formatErrorMsg($this->validate->checkBlank($userInfo['firstName']));
                $errMsg['lastName'] = formatErrorMsg($this->validate->checkBlank($userInfo['lastName']));
                $errMsg['email'] = formatErrorMsg($this->validate->checkEmail($userInfo['email']));
                $userTypeId = empty($userInfo['userType']) ? 2 : intval($userInfo['userType']);
                $userStatus = isset($userInfo['status']) ? intval($userInfo['status']) : 1;
                
                // if expiry date is not empty
                if (!empty($userInfo['expiry_date'])) {
                        $errMsg['expiry_date'] = formatErrorMsg($this->validate->checkDate($userInfo['expiry_date']));
                        $userInfo['expiry_date'] = "'".addslashes($userInfo['expiry_date'])."'";
                } else {
                        $userInfo['expiry_date'] = "NULL";
                }
                
                // check error flag is on
                if(!$this->validate->flagErr){
                        if (!$this->__checkUserName($userInfo['userName'])) {
                                if (!$this->__checkEmail($userInfo['email'])) {
                                        $sql = "insert into users(utype_id,username,password,first_name,last_name,email,created,status, expiry_date) 
                                                values($userTypeId,'".addslashes($userInfo['userName'])."','".md5($userInfo['password'])."'
                                                ,'".addslashes($userInfo['firstName'])."', '".addslashes($userInfo['lastName'])."'
                                                ,'".addslashes($userInfo['email'])."',UNIX_TIMESTAMP(),$userStatus, {$userInfo['expiry_date']})";
                                        $this->db->query($sql);
                                        
                                        // if render results
                                        if ($renderResults) {                                   
                                                $this->listUsers('ajax');
                                                exit;
                                        } else {
                                                return array('success', 'Successfully created user');
                                        }
                                }else{
                                        $errMsg['email'] = formatErrorMsg($_SESSION['text']['login']['emailexist']);
                                }
                        }else{
                                $errMsg['userName'] = formatErrorMsg($_SESSION['text']['login']['usernameexist']);
                        }
                }
                
                // if render results
                if ($renderResults) {
                        $this->set('errMsg', $errMsg);
                        $this->newUser();
                } else {
                        return array('error', $errMsg);
                }
        }
        
        function editUser($userId, $userInfo=''){               
                
                if(!empty($userId)){
                        if(empty($userInfo)){
                                $userInfo = $this->__getUserInfo($userId);
                                $userInfo['userName'] = $userInfo['username'];
                                $userInfo['firstName'] = $userInfo['first_name'];
                                $userInfo['lastName'] = $userInfo['last_name'];
                                $userInfo['oldName'] = $userInfo['username'];
                                $userInfo['oldEmail'] = $userInfo['email'];
                                $userInfo['userType'] = $userInfo['utype_id'];
                                $userInfo['expiry_date'] = formatDate($userInfo['expiry_date']);
                        }

                        // Get the user types
                        $userTypeCtlr = new UserTypeController();
                        $userTypeList = $userTypeCtlr->getAllUserTypes();
                        
                        $userInfo['password'] = '';                                     
                        $this->set('post', $userInfo);          
                        $this->set('userTypeList', $userTypeList);
                        $this->render('user/edit', 'ajax');
                        exit;
                }
                $this->listUsers('ajax');               
        }
        
        function updateUser($userInfo, $renderResults = true){
            $userInfo = sanitizeData($userInfo);
                $userInfo['id'] = intval($userInfo['id']);
                $this->set('post', $userInfo);
                $errMsg['userName'] = formatErrorMsg($this->validate->checkUname($userInfo['userName']));
                
                // if expiry date is not empty
                if (!empty($userInfo['expiry_date'])) {
                        $errMsg['expiry_date'] = formatErrorMsg($this->validate->checkDate($userInfo['expiry_date']));
                        $expiryStr = "expiry_date='".addslashes($userInfo['expiry_date'])."',";
                } else {
                        $expiryStr = "expiry_date=NULL,";
                }

                // if password needs to be reset
                if(!empty($userInfo['password'])){
                        $errMsg['password'] = formatErrorMsg($this->validate->checkPasswords($userInfo['password'], $userInfo['confirmPassword']));
                        $passStr = "password = '".md5($userInfo['password'])."',";
                }
                
                // if change status of user
                if (isset($userInfo['status'])) {
                        $activeStr = "status = '".intval($userInfo['status'])."',";
                }
                
                $errMsg['firstName'] = formatErrorMsg($this->validate->checkBlank($userInfo['firstName']));
                $errMsg['lastName'] = formatErrorMsg($this->validate->checkBlank($userInfo['lastName']));
                $errMsg['email'] = formatErrorMsg($this->validate->checkEmail($userInfo['email']));
                if(!$this->validate->flagErr){
                        
                        if($userInfo['userName'] != $userInfo['oldName']){
                                if ($this->__checkUserName($userInfo['userName'])) {
                                        $errMsg['userName'] = formatErrorMsg($_SESSION['text']['login']['usernameexist']);
                                        $this->validate->flagErr = true;
                                }
                        }
                        
                        if($userInfo['email'] != $userInfo['oldEmail']){
                                if ($this->__checkEmail($userInfo['email'])) {
                                        $errMsg['email'] = formatErrorMsg($_SESSION['text']['login']['emailexist']);
                                        $this->validate->flagErr = true;
                                }
                        }
                        
                        // if no error to inputs
                        if (!$this->validate->flagErr) {
                                $sql = "update users set
                                                username = '".addslashes($userInfo['userName'])."',
                                                first_name = '".addslashes($userInfo['firstName'])."',
                                                last_name = '".addslashes($userInfo['lastName'])."',
                                                $passStr
                                                $activeStr
                                                $expiryStr
                                                email = '".addslashes($userInfo['email'])."',
                                                utype_id = ".addslashes($userInfo['userType'])."
                                                where id={$userInfo['id']}";
                                $this->db->query($sql);
                                
                                // if render results
                                if ($renderResults) {
                                        $this->listUsers('ajax');
                                        exit;
                                } else {
                                        return array('success', 'Successfully updated user');
                                }
                                
                        }
                }
                
                if ($renderResults) {
                        $this->set('errMsg', $errMsg);
                        $this->editUser($userInfo['id'], $userInfo);
                } else {
                        return array('error', $errMsg);
                }
                
                
        }
        
        function showMyProfile($info = ''){
                $userId = isLoggedIn();         
                if(!empty($userId)){
                        $userInfo = $this->__getUserInfo($userId);
                        $this->set('userInfo', $userInfo);                      
                        $userTypeCtrler = new UserTypeController();
                        $userTypeInfo = $userTypeCtrler->__getUserTypeInfo($userInfo['utype_id']);
                        $this->set('userTypeInfo', $userTypeInfo);
                        $seopluginCtrler =  new SeoPluginsController();
                        $this->set('subscriptionActive', $seopluginCtrler->isPluginActive("Subscription"));                     
                        $spTextSubscription = $this->getLanguageTexts('subscription', $_SESSION['lang_code']);
                        $this->set('spTextSubscription', $spTextSubscription);
                        $this->render('user/showmyprofile', 'ajax');
                }       
        }
        
        # function to renew membership subscription
        function renewMyProfile($info = ''){
                $userId = isLoggedIn();
                $seopluginCtrler =  new SeoPluginsController();
                
                // if logged in and plugin is active
                if(!empty($userId) && $seopluginCtrler->isPluginActive("Subscription") && !isAdmin()){
                        $userInfo = $this->__getUserInfo($userId);
                        $this->set('userInfo', $userInfo);
                        
                        $userTypeCtrler = new UserTypeController();
                        $userTypeInfo = $userTypeCtrler->__getUserTypeInfo($userInfo['utype_id']);
                        $this->set('userTypeInfo', $userTypeInfo);
                        
                        $spTextSubscription = $this->getLanguageTexts('subscription', $_SESSION['lang_code']);
                        $this->set('spTextSubscription', $spTextSubscription);
                        include_once(SP_PLUGINPATH . "/Subscription/paymentgateway.ctrl.php");
                        
                        $userTypeList = $userTypeCtrler->getRenewUserTypeList($userInfo['utype_id']);
                        $this->set('userTypeList', $userTypeList);
                        
                        $currencyCtrler = new CurrencyController();
                        $this->set('currencyList', $currencyCtrler->getCurrencyCodeMapList());
                                
                        // include available payment gateways
                        $pgCtrler = new PaymentGateway();
                        $pgList = $pgCtrler->__getAllPaymentGateway();
                        $this->set('pgList', $pgList);
                        $this->set('defaultPgId', $pgCtrler->__getDefaultPaymentGateway());
                        $this->render('user/renewmyprofile', 'ajax');
                } else {
                        redirectUrlByScript(SP_WEBPATH . "/admin-panel.php?sec=myprofile");
                }
        }
        
        # function to update membership subscription
        function updateSubscription($userInfo = ''){
                $userId = isLoggedIn();
                $seopluginCtrler =  new SeoPluginsController();
                
                // if logged in and plugin is active
                if(!empty($userId) && $seopluginCtrler->isPluginActive("Subscription") && !isAdmin()){
                        $utypeCtrler = New UserTypeController();
                        $_POST = sanitizeData($_POST);
                        $errMsg['utype_id'] = formatErrorMsg($this->validate->checkNumber($userInfo['utype_id']));
                        $errMsg['pg_id'] = formatErrorMsg($this->validate->checkNumber($userInfo['pg_id']));
                        
                        // if admin user type selected, show error
                        $adminTypeId = $utypeCtrler->getAdminUserTypeId();
                        if ($adminTypeId == $userInfo['utype_id']) {
                                $this->validate->flagErr = true;
                                $errMsg['utype_id'] = formatErrorMsg("You can not register as admin.");
                        }
                        
                        // get renew usertype list
                        $userTypeList = $utypeCtrler->getRenewUserTypeList($userInfo['utype_id']);
                        if (!in_array($userInfo['utype_id'], array_keys($userTypeList))) {
                                $this->validate->flagErr = true;
                                $errMsg['utype_id'] = formatErrorMsg("You are not allowed to upgrade to this plan.");
                        }
                        
                        // if all form inputs are valid
                        if (!$this->validate->flagErr) {
                                $utypeId = intval($userInfo['utype_id']);
                                $userId = isLoggedIn();
                                $utypeInfo = $utypeCtrler->__getUserTypeInfo($utypeId);
                
                                // if it is paid subscription, proceed with payment
                                if ($utypeInfo['price'] > 0) {
                                        $paymentPluginId = intval($userInfo['pg_id']);
                                        @Session::setSession('payment_plugin_id', $paymentPluginId);
                                        $quantity = intval($userInfo['quantity']);
                                        $pluginCtrler = $seopluginCtrler->createPluginObject("Subscription");
                                        $paymentForm = $pluginCtrler->pgCtrler->getPaymentForm($paymentPluginId, $userId, $utypeInfo, $quantity, "renew");
                                        $this->set('paymentForm', $paymentForm);
                                } else {
                                        $this->updateUserInfo($userId, 'utype_id', $userInfo['utype_id']);
                                        $expiryDate = $this->calculateUserExpiryDate($userInfo['quantity']);
                                        $this->updateUserInfo($userId, 'expiry_date', $expiryDate);
                                        redirectUrlByScript(SP_WEBPATH . "/admin-panel.php?sec=myprofile");
                                        exit;
                                }
                                
                                $this->render('user/renewmyprofile', 'ajax');
                                
                        } else {
                                $this->set('errMsg', $errMsg);
                                $this->renewMyProfile($_POST);
                        }
                        
                } else {
                        redirectUrlByScript(SP_WEBPATH . "/admin-panel.php?sec=myprofile");
                }
        }
        
        function editMyProfile($userInfo=''){
                $userId = isLoggedIn();         
                if(!empty($userId)){
                        if(empty($userInfo)){
                                $userInfo = $this->__getUserInfo($userId);
                                
                                $userInfo['userName'] = $userInfo['username'];
                                $userInfo['firstName'] = $userInfo['first_name'];
                                $userInfo['lastName'] = $userInfo['last_name'];
                                $userInfo['oldName'] = $userInfo['username'];
                                $userInfo['oldEmail'] = $userInfo['email'];
                        }
                        
                        $userInfo['password'] = '';                                     
                        $this->set('post', $userInfo);                  
                        $this->render('user/editmyprofile', 'ajax');
                        exit;
                }       
        }
        
        function updateMyProfile($userInfo){
                $userInfo = sanitizeData($userInfo);
                $userId = isLoggedIn(); 
                $this->set('post', $userInfo);
                $errMsg['userName'] = formatErrorMsg($this->validate->checkUname($userInfo['userName']));
                if(!empty($userInfo['password'])){
                        $errMsg['password'] = formatErrorMsg($this->validate->checkPasswords($userInfo['password'], $userInfo['confirmPassword']));
                        $passStr = "password = '".md5($userInfo['password'])."',";
                }
                $errMsg['firstName'] = formatErrorMsg($this->validate->checkBlank($userInfo['firstName']));
                $errMsg['lastName'] = formatErrorMsg($this->validate->checkBlank($userInfo['lastName']));
                $errMsg['email'] = formatErrorMsg($this->validate->checkEmail($userInfo['email']));
                if(!$this->validate->flagErr){
                        
                        if($userInfo['userName'] != $userInfo['oldName']){
                                if ($this->__checkUserName($userInfo['userName'])) {
                                        $errMsg['userName'] = formatErrorMsg($_SESSION['text']['login']['usernameexist']);
                                        $this->validate->flagErr = true;
                                }
                        }
                        
                        if($userInfo['email'] != $userInfo['oldEmail']){
                                if ($this->__checkEmail($userInfo['email'])) {
                                        $errMsg['email'] = formatErrorMsg($_SESSION['text']['login']['emailexist']);
                                        $this->validate->flagErr = true;
                                }
                        }
                        
                        if (!$this->validate->flagErr) {
                                $sql = "update users set
                                                username = '".addslashes($userInfo['userName'])."',
                                                first_name = '".addslashes($userInfo['firstName'])."',
                                                last_name = '".addslashes($userInfo['lastName'])."',
                                                $passStr
                                                email = '".addslashes($userInfo['email'])."'
                                                where id=$userId";
                                $this->db->query($sql);
                                $this->set('msg', $this->spTextUser['Saved My Profile Details']);
                                $this->showMyProfile();
                                exit;
                        }
                }
                
                $this->set('errMsg', $errMsg);
                $this->editMyProfile($userInfo);
        }
        
        # forgot password function
        function forgotPasswordForm(){          
                $this->render('common/forgot');
        }
        
        # reset password of user
    function requestPassword($userEmail) {
        
                $errMsg['email'] = formatErrorMsg($this->validate->checkEmail($userEmail));
                $errMsg['code'] = formatErrorMsg($this->validate->checkCaptcha($userInfo['code']));
                $this->set('post', $_POST);
                if(!$this->validate->flagErr){
                $userId = $this->__checkEmail($userEmail);
                if(!empty($userId)){
                    $userInfo = $this->__getUserInfo($userId);
                        $rand = str_shuffle(rand().$userInfo['username']);

                    // get admin details
                    $adminInfo = $this->__getAdminInfo();
                    
                    # send password to user
                    $error = 0;
                        $this->set('rand', $rand);
                        $name = $userInfo['first_name']." ".$userInfo['last_name'];
                        $this->set('name', $name);
                        $this->set('userName', $userInfo['username']);
                        $content = $this->getViewContent('email/passwordreset');
                        $subject = "Seo panel password reset";
                        
                        if(!sendMail($adminInfo["email"], $name, $userEmail, $subject, $content)){
                                $error = $_SESSION['text']['login']['internal_error_mail_send'];
                        } else {
                                
                                // update password in DB
                                $sql = "update users set password=md5('$rand') where id={$userInfo['id']}";
                                $this->db->query($sql);
                                
                        }
                        
                        $this->set('error', $error);
                        $this->render('common/forgotconfirm');
                        exit;
                }else{
                    $errMsg['email'] = formatErrorMsg($_SESSION['text']['login']['user_email_not_exist']);
                }
                }
                $this->set('errMsg', $errMsg);
                $this->forgotPasswordForm();
        }
        
        # function to check whether user expired
        function isUserExpired($userId) {
                $excludeSecList = array("myprofile", "renew-profile", "update-subscription");
                
                // if not admin user and not in section pages
                if (!isAdmin() && !in_array($_REQUEST['sec'], $excludeSecList)) {
                        $userInfo = $this->__getUserInfo($userId);
                        $userInfo['expiry_date'] = formatDate($userInfo['expiry_date']);
                        
                        // if expiry date set for user
                        if (!empty($userInfo['expiry_date'])) {
                                $today = date("Y-m-d");
                                $todayTime = strtotime($today);
                                $expireTime = strtotime($userInfo['expiry_date']);
                                
                                // current date greater than expiry date
                                if ($todayTime > $expireTime) {
                                        return false;
                                }
                        }
                }
                
                return true;
                
        }
        
        # function to get admin user id
        function getAdminUserId() {
                $userTypeCtrlr = new UserTypeController();
                $adminUserTypeId = $userTypeCtrlr->getAdminUserTypeId();
                $sql = "select * from users where utype_id=" . $adminUserTypeId;
                $userInfo = $this->db->select($sql, true);
                return $userInfo['id'];
        }
        
        # function to check passed user id is admin user id
        function isAdminUserId($userId) {
                $adminUserId = $this->getAdminUserId();
                
                // if admin user id return true
                if ($userId == $adminUserId) {
                        return true;
                } else {
                        return false;
                }
                
        }
        
        # function to update user info
        function updateUserInfo($userId, $col, $value) {
                $sql = "update users set $col='".addslashes($value)."' where id=" . intval($userId);
                $this->db->query($sql);
        }
        
        # function to calculate user expiry date
        function calculateUserExpiryDate($quantity) {
                $month = date('m') + $quantity;
                $expiryTimeStamp = mktime(23, 59, 59, $month, date('d'), date('Y'));
                $expiryDate = date('Y-m-d', $expiryTimeStamp);
                return $expiryDate;
        }
        
        function manageWebsiteAccessManager($info = "") {
            $userList = $this->__getAllUsers(1, false);
            $userId = isset($info['wam_user']) ? intval($info['wam_user']) : $userList[0]['id'];

        if (isset($info['action'])) {
            $sql = "delete from user_website_access where user_id=" . $info['wam_user'];
            $this->db->query($sql);
            
            foreach($info['check_ws'] as $key => $val) {
                $sql = "insert into user_website_access(user_id,website_id) values(". $userId . ", " . intval($val) . ")";
                $this->db->query($sql);
            }
            $this->set("msg", formatSuccessMsg("Updated user website access!"));
        }

            $loggedinUserId = isLoggedIn();
            $sql = "select w.*,uwa.id  as uwa_id,uwa.access from websites w left join user_website_access uwa on w.id=uwa.website_id and uwa.user_id=$userId and w.user_id=$loggedinUserId";
            $userWebsiteList = $this->db->select($sql);
            $this->set("userWebsiteList", $userWebsiteList);
            $this->set("userId", $userId);
            $this->set("userList", $userList);
            $this->render('user/websiteAccessManager');
        }
        
        function getUserWebsiteAccessList($userId) {
                $accessList = array();
                $cond = "user_id=".intval($userId);
                $list = $this->dbHelper->getAllRows("user_website_access", $cond);
                foreach ($list as $listInfo) {
                        $accessList[$listInfo['website_id']] = $listInfo;       
                }
                
                return $accessList;
        }
        
        function getUserWebsiteAccessCount($userId) {
                $cond = "user_id=".intval($userId);
                $info = $this->dbHelper->getRow("user_website_access", $cond, "count(*) count");
                return $info['count'];
        }
        
}
?>