source: trunk/inc/classes/BxDolAccount.php @ 16013

Last change on this file since 16013 was 16013, checked in by Alexander Trofimov, 4 years ago

ACL - new user levels and fixes

File size: 4.1 KB
Line 
1<?php defined('BX_DOL') or die('hack attempt');
2/**
3 * Copyright (c) BoonEx Pty Limited - http://www.boonex.com/
4 * CC-BY License - http://creativecommons.org/licenses/by/3.0/
5 *
6 * @defgroup    DolphinCore Dolphin Core
7 * @{
8 */
9
10bx_import('BxDolAccountQuery');
11
12class BxDolAccount extends BxDol {
13
14    var $_iAccountID;
15    var $_oQuery;
16
17    /**
18     * Constructor
19     */
20    protected function __construct ($iAccountId) {
21        $iAccountId = (int)$iAccountId;
22        $sClass = get_class($this) . '_' . $iAccountId;
23        if (isset($GLOBALS['bxDolClasses'][$sClass]))
24            trigger_error ('Multiple instances are not allowed for the class: ' . get_class($this), E_USER_ERROR);
25       
26        parent::__construct();
27
28        $this->_iAccountID = $iAccountId; // since constructor is protected $iAccountId is always valid
29        $this->_oQuery = BxDolAccountQuery::getInstance();
30    }
31
32    /**
33     * Prevent cloning the instance
34     */
35    public function __clone() {
36        $sClass = get_class($this) . '_' . $this->_iProfileID;
37        if (isset($GLOBALS['bxDolClasses'][$sClass]))
38            trigger_error('Clone is not allowed for the class: ' . get_class($this), E_USER_ERROR);
39    }
40
41    /**
42     * Get singleton instance of the class
43     */
44    public static function getInstance($mixedAccountId = false) {
45
46        if (!$mixedAccountId)
47            $mixedAccountId = getLoggedId();
48
49        $iAccountId = self::getID($mixedAccountId);
50        if (!$iAccountId)
51            return false;
52
53        $sClass = __CLASS__ . '_' . $iAccountId;
54        if(!isset($GLOBALS['bxDolClasses'][$sClass]))
55            $GLOBALS['bxDolClasses'][$sClass] = new BxDolAccount($iAccountId);
56
57        return $GLOBALS['bxDolClasses'][$sClass];
58    }
59
60    /**
61     * Get account id
62     */
63    public function id() {
64        return $this->_oQuery->getIdById($this->_iAccountID);
65    }
66
67    /**
68     * Get account info
69     */
70    public function getInfo($iAccountId = false) {
71        return $this->_oQuery->getInfoById((int)$iAccountId ? (int)$iAccountId : $this->_iAccountID);
72    }
73
74    /**
75     * Validate account.
76     * @param $s - account identifier (id or email)
77     * @return account id or false if account was not found
78     */
79    static public function getID($s) {
80
81        $oQuery = BxDolAccountQuery::getInstance();
82
83        if (preg_match("/^[_\.0-9a-z-]+@([0-9a-z][0-9a-z-]+\.)+[a-z]{2,4}$/", $s)) {
84            $iId = (int)$oQuery->getIdByEmail($s);
85            return $iId ? $iId : false;
86        }
87
88        $iId = $oQuery->getIdById((int)$s);
89        return $iId ? $iId : false;
90    }
91
92    /**
93     * Delete profile.
94     */
95    function delete($ID) {
96
97        $ID = (int)$ID;
98        if (!$ID)
99            $ID = $this->_iProfileID;
100
101        $aAccountInfo = $this->_oQuery->getInfoById($ID);
102        if (!$aAccountInfo)
103            return false;
104
105        // create system event before deletion
106        $isStopDeletion = false;
107        bx_alert('account', 'before_delete', $ID, 0, array('stop_deletion' => &$isStopDeletion));
108        if ($isStopDeletion)
109            return false;
110
111        // delete associated content
112        // TODO: remake deletion of associated content
113        $oAccountQuery->res("DELETE FROM `sys_admin_ban_list` WHERE `ProfID`='". $ID . "' LIMIT 1");
114        $oAccountQuery->res("DELETE FROM `sys_block_list` WHERE `ID` = '{$ID}' OR `Profile` = '{$ID}'" );
115
116        bx_import('BxDolProfile');
117        $oProfileQuery = BxDolProfileQuery::getInstance();
118        $aProfiles = $oProfileQuery->getProfilesByAccount($ID);
119        foreach ($aProfiles as $iProfileId => $aRow) {
120            $oProfile = BxDolProfile::getInstance($iProfileId);
121            if (!$oProfile)
122                continue;
123            $oProfile->delete();
124        }
125
126        // delete profile
127        if (!$oAccountQuery->delete($ID))
128            return false;
129
130        // create system event
131        bx_alert('account', 'delete', $ID);
132
133        // unset class instance to prevent creating the instance again
134        $sClass = get_class($this) . '_' . $ID;
135        unset($GLOBALS['bxDolClasses'][$sClass]);
136
137        $this->_iAccountID = 0;
138
139        return true;
140    }
141
142}
143
144/** @} */
145
Note: See TracBrowser for help on using the repository browser.