1
0
Fork 0
mirror of https://github.com/YunoHost-Apps/limesurvey_ynh.git synced 2024-09-03 19:36:32 +02:00
limesurvey_ynh/sources/application/models/User.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')
);
}
}