/** * Checks whether the logged in user has permission to perform an action * against a specified project. * * @param int $op * See the constants in CRM_Core_Action. * @param int $projectId * Required for some but not all operations. * @return boolean * TRUE is the action is allowed; else FALSE. */ public static function checkProjectPerms($op, $projectId = NULL) { $opsRequiringProjectId = array(CRM_Core_Action::UPDATE, CRM_Core_Action::DELETE); if (in_array($op, $opsRequiringProjectId) && empty($projectId)) { CRM_Core_Error::fatal('Missing required parameter Project ID'); } $contactId = CRM_Core_Session::getLoggedInContactID(); switch ($op) { case CRM_Core_Action::ADD: return self::check('create volunteer projects'); case CRM_Core_Action::UPDATE: if (self::check('edit all volunteer projects')) { return TRUE; } $projectOwners = CRM_Volunteer_BAO_Project::getContactsByRelationship($projectId, 'volunteer_owner'); if (self::check('edit own volunteer projects') && in_array($contactId, $projectOwners)) { return TRUE; } break; case CRM_Core_Action::DELETE: if (self::check('delete all volunteer projects')) { return TRUE; } $projectOwners = CRM_Volunteer_BAO_Project::getContactsByRelationship($projectId, 'volunteer_owner'); if (self::check('delete own volunteer projects') && in_array($contactId, $projectOwners)) { return TRUE; } break; case CRM_Core_Action::VIEW: if (self::check('register to volunteer') || self::check('edit all volunteer projects')) { return TRUE; } } return FALSE; }
protected function getProject($params = NULL) { if ($this->_project === NULL) { $this->minimumProjectParams($params); $this->_project = current(CRM_Volunteer_BAO_Project::retrieve($params)); if ($this->_project) { $beneficiaryIds = CRM_Volunteer_BAO_Project::getContactsByRelationship($this->_project->id, 'volunteer_beneficiary'); $this->_project->target_contact_id = implode(',', $beneficiaryIds); } } return $this->_project; }
function testGetContactsByRelationship() { $contactId = 1; $relType = CRM_Core_OptionGroup::getValue(CRM_Volunteer_BAO_ProjectContact::RELATIONSHIP_OPTION_GROUP, 'volunteer_owner', 'name'); $project = CRM_Core_DAO::createTestObject('CRM_Volunteer_BAO_Project'); $this->assertObjectHasAttribute('id', $project, 'Failed to prepopulate Volunteer Project'); $projectContact = CRM_Core_DAO::createTestObject('CRM_Volunteer_BAO_ProjectContact', array('contact_id' => $contactId, 'project_id' => $project->id, 'relationship_type_id' => $relType)); $this->assertObjectHasAttribute('id', $projectContact, 'Failed to prepopulate Volunteer Project Contact'); $contacts = CRM_Volunteer_BAO_Project::getContactsByRelationship($project->id, $relType); $this->assertTrue(in_array($contactId, $contacts)); }
/** * Set default values for the Activity about to be created/updated. * * Called from self::createVolunteerActivity(), which checks for the existence * of necessary params; thus, no such checks are performed here. * * @param array $params * @see self::createVolunteerActivity() * @return array * Default parameters to use for api.activity.create */ private static function setActivityDefaults(array $params) { $defaults = array(); $op = empty($params['id']) ? CRM_Core_Action::ADD : CRM_Core_Action::UPDATE; $need = civicrm_api3('volunteer_need', 'getsingle', array('id' => $params['volunteer_need_id'])); $project = CRM_Volunteer_BAO_Project::retrieveByID($need['project_id']); $defaults['campaign_id'] = $project ? $project->campaign_id : ''; // Force NULL campaign ids to be empty strings, since the API ignores NULL values. if (empty($defaults['campaign_id'])) { $defaults['campaign_id'] = ''; } if ($op === CRM_Core_Action::ADD) { $defaults['volunteer_role_id'] = CRM_Utils_Array::value('role_id', $need); $defaults['time_scheduled_minutes'] = CRM_Utils_Array::value('duration', $need); $defaults['target_contact_id'] = CRM_Volunteer_BAO_Project::getContactsByRelationship($project->id, 'volunteer_beneficiary'); // If the related entity doesn't provide a good default, use tomorrow. if (empty($params['activity_date_time'])) { $tomorrow = date('Y-m-d H:i:s', strtotime('tomorrow')); $defaults['activity_date_time'] = CRM_Utils_Array::value('start_time', $project->getEntityAttributes(), $tomorrow); } if (empty($params['subject'])) { $defaults['subject'] = $project->title; } } return $defaults; }