Skip to content

Commit

Permalink
Dev: unable to use Survey::model in Plugin cron
Browse files Browse the repository at this point in the history
Dev: Survey::model use Permission, and Permission use session
Dev: use alternative soilution : don't call getUserId when get permission
  • Loading branch information
Shnoulle committed Jan 19, 2016
1 parent 3a6f604 commit e90dcc7
Showing 1 changed file with 30 additions and 26 deletions.
56 changes: 30 additions & 26 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 @@ -497,8 +497,8 @@ function copySurveyPermissions($iSurveyIDSource,$iSurveyIDTarget)
}
}
}


/**
* Checks if a user has a certain permission
*
Expand All @@ -511,6 +511,8 @@ function copySurveyPermissions($iSurveyIDSource,$iSurveyIDTarget)
*/
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,7 +524,7 @@ 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;
Expand Down Expand Up @@ -565,9 +567,9 @@ 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
Expand All @@ -590,11 +592,13 @@ function hasGlobalPermission($sPermission, $sCRUD='read', $iUserID=null)
function hasSurveyPermission($iSurveyID, $sPermission, $sCRUD='read', $iUserID=null)
{
$oSurvey=Survey::Model()->findByPk($iSurveyID);
if (!$oSurvey)
if (!$oSurvey)
return false;
if(is_null($iUserID) && Yii::app() instanceof CConsoleApplication)
return true;
$iUserID=self::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 @@ -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 @@ -631,11 +635,11 @@ private static function comparePermissionTitle($aApermission,$aBpermission)
*/
private static 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;
$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 e90dcc7

Please sign in to comment.