user.inc

来自「PHP 知识管理系统(基于树结构的知识管理系统), 英文原版的PHP源码。」· INC 代码 · 共 532 行 · 第 1/2 页

INC
532
字号

    	if ($update)
    	{
    		$state = $oJSON->encode($dashlets);
	    	$this->setDashboardState($state);
    	}
    }


    function &get($iId) {
        return KTEntityUtil::get('User', $iId);
    }

	/**
	* update the datastore, without overwriting the password.
	*
	* only works for a subset of the db values.
	*/
	function doLimitedUpdate() {
		$sQuery = 'UPDATE ' . $this->_table() . ' SET ';
		$aParams = array();

		$blacklist = array(
			"sPassword" => 1,
		);

		$aParts = array(); // quick workaround to make the join less hurtful.

		foreach ($this->_aFieldToSelect as $attr => $column) {
			if (!array_key_exists($attr, $blacklist)) {
				$val = $this->$attr;
				$aParts[] = $column . ' = ?';
				$aParams[] = $val;
			}
		}
		$sQuery .= join(', ', $aParts);

		$sQuery .= ' WHERE id = ? ';
		$aParams[] = $this->getId();

		$res = DBUtil::runQuery(array($sQuery, $aParams));

        $group = sprintf("%s/%s", get_class($this), 'id');
        $oCache =& KTCache::getSingleton();
        $oCache->remove($group, $this->iId);
        $this->clearCachedGroups();

		return $res;
	}


    /**
    * Static function
    * Get a list of users
    *
    * @param  String  Where clause (not required)
    *
    * @return Array array of User objects, false otherwise and set $_SESSION["errorMessage"]
    */
    function getList($sWhereClause = null, $aOptions = null) {
        if(!is_array($aOptions)) $aOptions = array($aOptions);
        $aOptions['orderby'] = KTUtil::arrayGet($aOptions, 'orderby', 'name');

        // don't include deleted users: disabled = 2
        if(!empty($sWhereClause)){
            if(strpos(strtolower($sWhereClause), 'where ') === false){
                $sWhereClause = '('.$sWhereClause.')';
            }
            $sWhereClause .= ' AND disabled != 2';
        }else{
            $sWhereClause = 'disabled != 2';
        }

        return KTEntityUtil::getList2('User', $sWhereClause, $aOptions);
    }

    function getEmailUsers($sWhereClause = null) {
        $aUsers = array();
        foreach (User::getList($sWhereClause) as $oUser) {
            if ($oUser->getEmail()) {
                $aUsers[] = $oUser;
            }
        }
        return $aUsers;
    }

    /**
     * Return the useID for the user
     *
     * @return int the unitID, false otherwise and $_SESSION["errorMessage"] set
     */
    function getUnitId() {
        $ugl = KTUtil::getTableName("users_groups");
        $g = KTUtil::getTableName("groups");
        $aQuery = array(
            "SELECT DISTINCT g.unit_id AS unit_id FROM $ugl AS ugl INNER JOIN $g AS g ON ugl.group_id = g.id WHERE ugl.user_id = ?",
            array($this->iId),
        );
        return DBUtil::getOneResultKey($aQuery, 'unit_id');
    }

    /**
     * static function
     *
     * gets the id of a user using their username
     *
     * @param   string  The username for which we want its ID
     */
    function getUserID($sUsername) {
        global $default;

        $id = lookupID($default->users_table, "username",  $sUsername);

        $this->iId = $id;
    }

    /** Static function
    * Gets the user's default top level folder for the current user
    */
    function getHomeFolderID() {
    	$iUnitId = $this->getUnitId();

        if (empty($iUnitId)) {
            return false;
        }

        $oUnit =& Unit::get($iUnitId);
        return $oUnit->getFolderId();
    }

	function &createFromArray($aOptions) { return KTEntityUtil::createFromArray('User', $aOptions); }
	function &getByUserName($sUserName, $aOptions = null) {
        return KTEntityUtil::getBy('User', 'username', $sUserName, $aOptions);
    }

    /**
     * Check whether a user has been deleted
     *
     * @param string $sUsername
     * @return boolean
     */
    function checkDeletedUser($sUsername) {
        $deletedUsername = "kt_deleted_{$sUsername}_";
        $query = "SELECT * FROM users WHERE username LIKE '{$deletedUsername}%'";
        $result = DBUtil::getOneResult($query);

        if(PEAR::isError($result) || empty($result)){
            return false;
        }

        // Check that the deleted username is correct
        if($deletedUsername.$result['id'] != $result['username']){
            return false;
        }

        return true;
    }

    function getByAuthenticationSource($oSource, $aOptions = null) {
        $iSourceId = KTUtil::getId($oSource);
        $aOptions = KTUtil::meldOptions($aOptions, array(
            'multi' => true,
        ));
        return KTEntityUtil::getByDict('User', array(
            'authentication_source_id' => $iSourceId,
        ), $aOptions);
    }

    function &getByAuthenticationSourceAndDetails($oSource, $sDetails, $aOptions = null) {
        $iSourceId = KTUtil::getId($oSource);

        return KTEntityUtil::getByDict('User', array(
            'authentication_source_id' => $iSourceId,
            'authentication_details_s1' => $sDetails,
        ), $aOptions);
    }

    function getByLastLoginBefore($dDateTime) {
        return KTEntityUtil::getByDict('User', array(
            'last_login' => array('type' => 'before', 'value' => $dDateTime),
        ), array('multi' => true));
    }

    function getByLastLoginAfter($dDateTime) {
        return KTEntityUtil::getByDict('User', array(
            'last_login' => array('type' => 'after', 'value' => $dDateTime),
        ), array('multi' => true));
    }

    function getNumberEnabledUsers() {
        $sQuery = sprintf('SELECT COUNT(id) AS number FROM %s WHERE disabled = ? AND id > 1', KTUtil::getTableName('users'));
        $aParams = array(false);
        return DBUtil::getOneResultKey(array($sQuery, $aParams), 'number');
    }

    function isAnonymous() { return $this->iId == -2; }

    function disable() {
        $this->setDisabled(1);
        $this->update();
        if (KTPluginUtil::pluginIsActive('ktdms.wintools')) {
            require_once(KT_DIR .  '/plugins/wintools/baobabkeyutil.inc.php');
            BaobabKeyUtil::deallocateUser($this);
        }
        return;
    }

    function enable() {
        $this->setDisabled(0);
        $this->update();
        if (KTPluginUtil::pluginIsActive('ktdms.wintools')) {
            require_once(KT_DIR .  '/plugins/wintools/baobabkeyutil.inc.php');
            BaobabKeyUtil::allocateUser($this);
        }
        return;
    }

    function create() {
        if (KTPluginUtil::pluginIsActive('ktdms.wintools')) {
            require_once(KT_DIR .  '/plugins/wintools/baobabkeyutil.inc.php');
            $res = BaobabKeyUtil::canAddUser();
            if (PEAR::isError($res)) {
                return $res;
            }
        }
        return parent::create();
    }

    function delete()
    {
    	$this->setDisabled(2);
    	$this->setEmailNotification(false);
    	//change username
    	$tempUsername = $this->getUsername();
    	$this->getUserID($tempUsername);
    	$tempUserID = $this->iId;
    	$DeletedUsername = 'kt_deleted_'.$tempUsername.'_'.$tempUserID;
    	$this->setUsername($DeletedUsername);

    	//nullify all authentication_xxx fields
    	$this->setAuthenticationSourceId(null);
	    $this->setAuthenticationDetails(null);
	    $this->setAuthenticationDetails2(null);
		$this->setAuthenticationDetailsInt1(null);
	    $this->setAuthenticationDetailsInt2(null);
		$this->setAuthenticationDetailsDate1(null);
	    $this->setAuthenticationDetailsDate2(null);
		$this->setAuthenticationDetailsBool1(null);
	    $this->setAuthenticationDetailsBool2(null);

        $this->update();
        if (KTPluginUtil::pluginIsActive('ktdms.wintools')) {
            require_once(KT_DIR .  '/plugins/wintools/baobabkeyutil.inc.php');
            BaobabKeyUtil::deallocateUser($this);
        }
        return;

    }

    function hasPermission($oUser, $oPermission, $oFolderOrDocument) {
    	return KTPermissionUtil::userHasPermissionOnItem($oUser, $oPermission, $oFolderOrDocument);

	}

}
?>

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?