Skip to content

Commit

Permalink
Merge pull request #420 from Shnoulle/master_cronPermissionFix2
Browse files Browse the repository at this point in the history
unable to use Survey::model in Plugin cron : 2nd solution
  • Loading branch information
Shnoulle committed Jan 22, 2016
2 parents adfd7f1 + 59180f6 commit ed9a57e
Showing 1 changed file with 44 additions and 38 deletions.
82 changes: 44 additions & 38 deletions application/models/Permission.php
Expand Up @@ -155,8 +155,8 @@ public static function getSurveyBasePermissions()
}
return $aPermissions;
}


/**
* Returns the global permissions including description and title
*
Expand Down Expand Up @@ -267,19 +267,19 @@ public static function getGlobalBasePermissions()
$permission = array_merge($defaults, $permission);
}
return $aPermissions;
}
}

public static function getPermissions($iUserID, $iEntityID=null, $sEntityName=null)
{
if ($sEntityName=='survey')
{
$aBasePermissions=Permission::model()->getSurveyBasePermissions();
}
elseif ($sEntityName=='global')
{
{
$aBasePermissions=Permission::model()->getGlobalBasePermissions();
}

if (is_null($sEntityName))
{
$oPermissions=Permission::model()->findAllByAttributes(array('uid'=>$iUserID));
Expand All @@ -288,7 +288,7 @@ public static function getPermissions($iUserID, $iEntityID=null, $sEntityName=nu
{
$aBasePermissions[$oPermission->id] = $oPermission->attributes;
}
}
}
else
{
foreach ($aBasePermissions as $sPermission=>&$aPermissionDetail){
Expand All @@ -300,15 +300,15 @@ public static function getPermissions($iUserID, $iEntityID=null, $sEntityName=nu
if ($aPermissionDetail['import']) $aPermissionDetail['import']=($oCurrentPermissions?(boolean)$oCurrentPermissions->import_p:false);
if ($aPermissionDetail['export']) $aPermissionDetail['export']=($oCurrentPermissions?(boolean)$oCurrentPermissions->export_p:false);
}
}
}
return $aBasePermissions;
}

/**
* Sets permissions (global or survey-specific) for a survey administrator
* Checks what permissions may be set and automatically filters invalid ones.
* Checks what permissions may be set and automatically filters invalid ones.
* A permission may be invalid if the permission does not exist or that particular user may not give that permission
*
*
* @param mixed $iUserID
* @param mixed $iEntityID
* @param mixed $sEntityName
Expand Down Expand Up @@ -342,7 +342,7 @@ public static function setPermissions($iUserID, $iEntityID, $sEntityName, $aPerm
$aFilteredPermissions[$PermissionName]=$aPermission;
}
}
$aBasePermissions=$aFilteredPermissions;
$aBasePermissions=$aFilteredPermissions;
}
elseif (Permission::model()->hasGlobalPermission('superadmin','read') && Yii::app()->session['loginID']!=1)
{
Expand All @@ -364,7 +364,7 @@ public static function setPermissions($iUserID, $iEntityID, $sEntityName, $aPerm
$aFilteredPermissions[$sPermissionname]['import']= (isset($aPermissions[$sPermissionname]['import']) && $aPermissions[$sPermissionname]['import']);
$aFilteredPermissions[$sPermissionname]['export']= (isset($aPermissions[$sPermissionname]['export']) && $aPermissions[$sPermissionname]['export']);
}

$condition = array('entity_id' => $iEntityID, 'uid' => $iUserID);
$oEvent=new PluginEvent('beforePermissionSetSave');
$oEvent->set('aNewPermissions',$aFilteredPermissions);
Expand Down Expand Up @@ -438,7 +438,7 @@ public function setGlobalPermission($iNewUID,$sPermType,array $aPermissions=arra
$this->insertSomeRecords($aPerm);
}

function giveAllSurveyPermissions($iUserID, $iSurveyID)
public function giveAllSurveyPermissions($iUserID, $iSurveyID)
{
$aPermissions=$this->getSurveyBasePermissions();
$aPermissionsToSet=array();
Expand All @@ -456,21 +456,21 @@ function giveAllSurveyPermissions($iUserID, $iSurveyID)
$this->setPermissions($iUserID, $iSurveyID, 'survey', $aPermissionsToSet);
}

function insertRecords($data)
public function insertRecords($data)
{
foreach ($item as $data)
$this->insertSomeRecords($item);
}

function insertSomeRecords($data)
public function insertSomeRecords($data)
{
$permission = new self;
foreach ($data as $k => $v)
$permission->$k = $v;
return $permission->save();
}

function getUserDetails($surveyid)
public function getUserDetails($surveyid)
{
$sQuery = "SELECT p.entity_id, p.uid, u.users_name, u.full_name FROM {{permissions}} AS p INNER JOIN {{users}} AS u ON p.uid = u.uid
WHERE p.entity_id = :surveyid AND u.uid != :userid and p.entity='survey'
Expand All @@ -480,7 +480,7 @@ function getUserDetails($surveyid)
return Yii::app()->db->createCommand($sQuery)->bindParam(":userid", $iUserID, PDO::PARAM_INT)->bindParam("surveyid", $surveyid, PDO::PARAM_INT)->query()->readAll(); //Checked
}

function copySurveyPermissions($iSurveyIDSource,$iSurveyIDTarget)
public function copySurveyPermissions($iSurveyIDSource,$iSurveyIDTarget)
{
$aRows=self::model()->findAll("entity_id=:sid AND entity='survey'", array(':sid'=>$iSurveyIDSource));
foreach ($aRows as $aRow)
Expand All @@ -497,8 +497,8 @@ function copySurveyPermissions($iSurveyIDSource,$iSurveyIDTarget)
}
}
}


/**
* Checks if a user has a certain permission
*
Expand All @@ -509,8 +509,10 @@ function copySurveyPermissions($iSurveyIDSource,$iSurveyIDTarget)
* @param $iUserID integer User ID - if not given the one of the current user is used
* @return bool True if user has the permission
*/
function hasPermission($iEntityID, $sEntityName, $sPermission, $sCRUD='read', $iUserID=null)
public function hasPermission($iEntityID, $sEntityName, $sPermission, $sCRUD='read', $iUserID=null)
{
if(is_null($iUserID) && Yii::app() instanceof CConsoleApplication)
return true;
static $aPermissionStatic;

$oEvent=new PluginEvent('beforeHasPermission');
Expand All @@ -522,13 +524,13 @@ function hasPermission($iEntityID, $sEntityName, $sPermission, $sCRUD='read', $i
App()->getPluginManager()->dispatchEvent($oEvent);
$pluginbPermission=$oEvent->get('bPermission');
// isset — Determine if a variable is set and is not NULL. And isset seems little speedest.
if (isset($pluginbPermission))
if (isset($pluginbPermission))
return $pluginbPermission;

if (!in_array($sCRUD,array('create','read','update','delete','import','export'))) return false;
$sCRUD=$sCRUD.'_p';

$iUserID=self::getUserId($iUserID);
$iUserID=$this->getUserId($iUserID);
if(!$iUserID)
return false;

Expand Down Expand Up @@ -565,15 +567,15 @@ function hasPermission($iEntityID, $sEntityName, $sPermission, $sCRUD='read', $i
}
return $aPermissionStatic[$iEntityID][$sEntityName][$iUserID][$sPermission][$sCRUD];
}

/**
* Returns true if a user has global permission for a certain action.
* Returns true if a user has global permission for a certain action.
* @param $sPermission string Name of the permission - see function getGlobalPermissions
* @param $sCRUD string The permission detailsyou want to check on: 'create','read','update','delete','import' or 'export'
* @param $iUserID integer User ID - if not given the one of the current user is used
* @return bool True if user has the permission
*/
function hasGlobalPermission($sPermission, $sCRUD='read', $iUserID=null)
public function hasGlobalPermission($sPermission, $sCRUD='read', $iUserID=null)
{
return $this->hasPermission(0, 'global', $sPermission, $sCRUD, $iUserID);
}
Expand All @@ -587,14 +589,16 @@ function hasGlobalPermission($sPermission, $sCRUD='read', $iUserID=null)
* @param $iUserID integer User ID - if not given the one of the current user is used
* @return bool True if user has the permission
*/
function hasSurveyPermission($iSurveyID, $sPermission, $sCRUD='read', $iUserID=null)
public function hasSurveyPermission($iSurveyID, $sPermission, $sCRUD='read', $iUserID=null)
{
$oSurvey=Survey::Model()->findByPk($iSurveyID);
if (!$oSurvey)
if (!$oSurvey)
return false;
$iUserID=self::getUserId($iUserID);
if(is_null($iUserID) && Yii::app() instanceof CConsoleApplication)
return true;
$iUserID=$this->getUserId($iUserID);
// If you own a survey you have access to the whole survey
if ($iUserID==$oSurvey->owner_id)
if ($iUserID==$oSurvey->owner_id)
return true;
// Get global correspondance for surveys rigth
$sGlobalCRUD=($sCRUD=='create' || ($sCRUD=='delete' && $sPermission!='survey') ) ? 'update' : $sCRUD;
Expand All @@ -608,7 +612,7 @@ function hasSurveyPermission($iSurveyID, $sPermission, $sCRUD='read', $iUserID=n
* @param $iUserID integer User ID - if not given the one of the current user is used
* @return bool True if user has the permission
*/
function hasTemplatePermission($sTemplateName, $sCRUD='read', $iUserID=null)
public function hasTemplatePermission($sTemplateName, $sCRUD='read', $iUserID=null)
{
return $this->hasPermission(0, 'global', 'templates', $sCRUD, $iUserID) || $this->hasPermission(0, 'template', $sTemplateName, $sCRUD, $iUserID);
}
Expand All @@ -617,7 +621,7 @@ function hasTemplatePermission($sTemplateName, $sCRUD='read', $iUserID=null)
* function used to order Permission by language string
* @param aApermission array The first permission information
* @param aBpermission array The second permission information
* @return bool
* @return bool
*/
private static function comparePermissionTitle($aApermission,$aBpermission)
{
Expand All @@ -629,13 +633,15 @@ private static function comparePermissionTitle($aApermission,$aBpermission)
* @param iUserID optionnal user id
* @return integer user id
*/
private static function getUserId($iUserID=null)
protected function getUserId($iUserID=null)
{
$sOldLanguage=App()->language;// Call of Yii::app()->user reset App()->language to default. Quick fix for #09695
if (is_null($iUserID) && !Yii::app()->user->getIsGuest())
$iUserID = Yii::app()->session['loginID'];
App()->setLanguage($sOldLanguage);
return $iUserID;
if(Yii::app() instanceof CConsoleApplication)
throw new Exception('Permission must not be tested with console application.');
$sOldLanguage=App()->language;// Call of Yii::app()->user reset App()->language to default. Quick fix for #09695
if (is_null($iUserID) && !Yii::app()->user->getIsGuest())
$iUserID = Yii::app()->session['loginID'];
App()->setLanguage($sOldLanguage);
return $iUserID;
}

}

0 comments on commit ed9a57e

Please sign in to comment.