mirror of
https://github.com/YunoHost-Apps/limesurvey_ynh.git
synced 2024-09-03 19:36:32 +02:00
295 lines
7.4 KiB
PHP
295 lines
7.4 KiB
PHP
<?php
|
|
/*
|
|
* LimeSurvey
|
|
* Copyright (C) 2011 The LimeSurvey Project Team / Carsten Schmitz
|
|
* All rights reserved.
|
|
* License: GNU/GPL License v2 or later, see LICENSE.php
|
|
* LimeSurvey is free software. This version may have been modified pursuant
|
|
* to the GNU General Public License, and as distributed it includes or
|
|
* is derivative of works licensed under the GNU General Public License or
|
|
* other free or open source software licenses.
|
|
* See COPYRIGHT.php for copyright notices and details.
|
|
*
|
|
*/
|
|
|
|
class User extends LSActiveRecord
|
|
{
|
|
/**
|
|
* @var string Default value for user language
|
|
*/
|
|
public $lang='auto';
|
|
|
|
|
|
/**
|
|
* Returns the static model of Settings table
|
|
*
|
|
* @static
|
|
* @access public
|
|
* @param string $class
|
|
* @return User
|
|
*/
|
|
public static function model($class = __CLASS__)
|
|
{
|
|
return parent::model($class);
|
|
}
|
|
|
|
/**
|
|
* Returns the setting's table name to be used by the model
|
|
*
|
|
* @access public
|
|
* @return string
|
|
*/
|
|
public function tableName()
|
|
{
|
|
return '{{users}}';
|
|
}
|
|
|
|
/**
|
|
* Returns the primary key of this table
|
|
*
|
|
* @access public
|
|
* @return string
|
|
*/
|
|
public function primaryKey()
|
|
{
|
|
return 'uid';
|
|
}
|
|
|
|
/**
|
|
* Defines several rules for this table
|
|
*
|
|
* @access public
|
|
* @return array
|
|
*/
|
|
public function rules()
|
|
{
|
|
return array(
|
|
array('users_name, password, email', 'required'),
|
|
array('email', 'email'),
|
|
);
|
|
}
|
|
|
|
/**
|
|
* Returns all users
|
|
*
|
|
* @access public
|
|
* @return string
|
|
*/
|
|
public function getAllRecords($condition=FALSE)
|
|
{
|
|
$criteria = new CDbCriteria;
|
|
|
|
if ($condition != FALSE)
|
|
{
|
|
foreach ($condition as $item => $value)
|
|
{
|
|
$criteria->addCondition($item.'='.Yii::app()->db->quoteValue($value));
|
|
}
|
|
}
|
|
|
|
$data = $this->findAll($criteria);
|
|
|
|
return $data;
|
|
}
|
|
/**
|
|
*
|
|
*
|
|
* @param mixed $postuserid
|
|
*/
|
|
function parentAndUser($postuserid)
|
|
{
|
|
$user = Yii::app()->db->createCommand()
|
|
->select('a.users_name, a.full_name, a.email, a.uid, b.users_name AS parent')
|
|
->limit(1)
|
|
->where('a.uid = :postuserid')
|
|
->from("{{users}} a")
|
|
->leftJoin('{{users}} AS b', 'a.parent_id = b.uid')
|
|
->bindParam(":postuserid", $postuserid, PDO::PARAM_INT)
|
|
->queryRow();
|
|
return $user;
|
|
}
|
|
|
|
/**
|
|
* Returns onetime password
|
|
*
|
|
* @access public
|
|
* @return string
|
|
*/
|
|
public function getOTPwd($user)
|
|
{
|
|
$this->db->select('uid, users_name, password, one_time_pw, dateformat, full_name, htmleditormode');
|
|
$this->db->where('users_name',$user);
|
|
$data = $this->db->get('users',1);
|
|
|
|
return $data;
|
|
}
|
|
|
|
/**
|
|
* Deletes onetime password
|
|
*
|
|
* @access public
|
|
* @return string
|
|
*/
|
|
public function deleteOTPwd($user)
|
|
{
|
|
$data = array(
|
|
'one_time_pw' => ''
|
|
);
|
|
$this->db->where('users_name',$user);
|
|
$this->db->update('users',$data);
|
|
}
|
|
|
|
/**
|
|
* Creates new user
|
|
*
|
|
* @access public
|
|
* @return string
|
|
*/
|
|
public static function insertUser($new_user, $new_pass,$new_full_name,$parent_user,$new_email)
|
|
{
|
|
$oUser = new self;
|
|
$oUser->users_name = $new_user;
|
|
$oUser->password = hash('sha256', $new_pass);
|
|
$oUser->full_name = $new_full_name;
|
|
$oUser->parent_id = $parent_user;
|
|
$oUser->lang = 'auto';
|
|
$oUser->email = $new_email;
|
|
if ($oUser->save())
|
|
{
|
|
return $oUser->uid;
|
|
}
|
|
else{
|
|
return false;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* This method is invoked before saving a record (after validation, if any).
|
|
* The default implementation raises the {@link onBeforeSave} event.
|
|
* You may override this method to do any preparation work for record saving.
|
|
* Use {@link isNewRecord} to determine whether the saving is
|
|
* for inserting or updating record.
|
|
* Make sure you call the parent implementation so that the event is raised properly.
|
|
* @return boolean whether the saving should be executed. Defaults to true.
|
|
*/
|
|
public function beforeSave()
|
|
{
|
|
// Postgres delivers bytea fields as streams :-o - if this is not done it looks like Postgres saves something unexpected
|
|
if (gettype($this->password)=='resource')
|
|
{
|
|
$this->password=stream_get_contents($this->password,-1,0);
|
|
}
|
|
return parent::beforeSave();
|
|
}
|
|
|
|
|
|
/**
|
|
* Delete user
|
|
*
|
|
* @param int $iUserID The User ID to delete
|
|
* @return mixed
|
|
*/
|
|
function deleteUser($iUserID)
|
|
{
|
|
$iUserID= (int)$iUserID;
|
|
$oUser=$this->findByPk($iUserID);
|
|
return (bool) $oUser->delete();
|
|
}
|
|
|
|
/**
|
|
* Returns user share settings
|
|
*
|
|
* @access public
|
|
* @return string
|
|
*/
|
|
public function getShareSetting()
|
|
{
|
|
$this->db->where(array("uid"=>$this->session->userdata('loginID')));
|
|
$result= $this->db->get('users');
|
|
return $result->row();
|
|
}
|
|
|
|
/**
|
|
* Returns full name of user
|
|
*
|
|
* @access public
|
|
* @return string
|
|
*/
|
|
public function getName($userid)
|
|
{
|
|
static $aOwnerCache = array();
|
|
|
|
if (array_key_exists($userid, $aOwnerCache)) {
|
|
$result = $aOwnerCache[$userid];
|
|
} else {
|
|
$result = Yii::app()->db->createCommand()->select('full_name')->from('{{users}}')->where("uid = :userid")->bindParam(":userid", $userid, PDO::PARAM_INT)->queryAll();
|
|
$aOwnerCache[$userid] = $result;
|
|
}
|
|
|
|
return $result;
|
|
}
|
|
|
|
public function getuidfromparentid($parentid)
|
|
{
|
|
return Yii::app()->db->createCommand()->select('uid')->from('{{users}}')->where('parent_id = :parent_id')->bindParam(":parent_id", $parentid, PDO::PARAM_INT)->queryRow();
|
|
}
|
|
/**
|
|
* Returns id of user
|
|
*
|
|
* @access public
|
|
* @return string
|
|
*/
|
|
public function getID($sUserName)
|
|
{
|
|
$oUser = User::model()->findByAttributes(array(
|
|
'users_name' => $sUserName
|
|
));
|
|
if ($oUser)
|
|
{
|
|
return $oUser->uid;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Updates user password hash
|
|
*
|
|
* @param int $iUserID The User ID
|
|
* @param string $sPassword The clear text password
|
|
*/
|
|
public function updatePassword($iUserID, $sPassword)
|
|
{
|
|
return $this->updateByPk($iUserID, array('password' => hash('sha256', $sPassword)));
|
|
}
|
|
|
|
/**
|
|
* Adds user record
|
|
*
|
|
* @access public
|
|
* @return string
|
|
*/
|
|
public function insertRecords($data)
|
|
{
|
|
|
|
return $this->db->insert('users',$data);
|
|
}
|
|
|
|
/**
|
|
* Returns User ID common in Survey_Permissions and User_in_groups
|
|
*
|
|
* @access public
|
|
* @return CDbDataReader Object
|
|
*/
|
|
public function getCommonUID($surveyid, $postusergroupid)
|
|
{
|
|
$query2 = "SELECT b.uid FROM (SELECT uid FROM {{permissions}} WHERE entity_id = :surveyid AND entity = 'survey') AS c RIGHT JOIN {{user_in_groups}} AS b ON b.uid = c.uid WHERE c.uid IS NULL AND b.ugid = :postugid";
|
|
return Yii::app()->db->createCommand($query2)->bindParam(":surveyid", $surveyid, PDO::PARAM_INT)->bindParam(":postugid", $postusergroupid, PDO::PARAM_INT)->query(); //Checked
|
|
}
|
|
|
|
|
|
public function relations()
|
|
{
|
|
return array(
|
|
'permissions' => array(self::HAS_MANY, 'Permission', 'uid')
|
|
);
|
|
}
|
|
}
|