Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found

Target

Select target project
  • extensions/activitytypeacl
  • lukeyang/activitytypeacl
  • JonGold/activitytypeacl
  • pradeep/activitytypeacl
  • deepak.srivastava/activitytypeacl
5 results
Show changes
Commits on Source (14)
......@@ -9,7 +9,36 @@ class CRM_ActivityTypeACL_APIWrappers_ACL implements API_Wrapper {
if ($apiRequest['entity'] == 'Activity' && $apiRequest['action'] == 'get') {
CRM_ActivityTypeACL_BAO_ACL::getPermissionedActivities($activityOptions, CRM_Core_Action::VIEW, FALSE, TRUE);
$activityOptions[CRM_Core_PseudoConstant::getKey('CRM_Activity_BAO_Activity', 'activity_type_id', 'Open Case')] = "Open Case";
$apiRequest['params']['activity_type_id'] = ['IN' => array_keys($activityOptions)];
if (!empty($apiRequest['params']['activity_type_id'])) {
if (is_array($apiRequest['params']['activity_type_id'])) {
$operator = key($apiRequest['params']['activity_type_id']);
$originalParams = (array) $apiRequest['params']['activity_type_id'][$operator];
if ($operator === 'IN') {
if (!CRM_Utils_Rule::integer($originalParams[0])) {
$activityOptions = array_intersect($originalParams, $activityOptions);
}
else {
$activityOptions = array_intersect($originalParams, array_keys($activityOptions));
}
$apiRequest['params']['activity_type_id'] = [$operator => $activityOptions];
}
if ($operator === 'NOT IN' || $operator === '!=') {
if (!CRM_Utils_Rule::integer($originalParams[0])) {
$activityOptions = array_keys(array_diff($activityOptions, $originalParams));
}
else {
$activityOptions = array_diff(array_keys($activityOptions), $originalParams);
}
}
$apiRequest['params']['activity_type_id'] = ['IN' => $activityOptions];
}
elseif ((CRM_Utils_Rule::integer($apiRequest['params']['activity_type_id']) && !array_key_exists($apiRequest['params']['activity_type_id'], $activityOptions)) || !in_array($apiRequest['params']['activity_type_id'], $activityOptions)) {
$apiRequest['params']['activity_type_id'] = ['IN' => array_keys($activityOptions)];
}
}
else {
$apiRequest['params']['activity_type_id'] = ['IN' => array_keys($activityOptions)];
}
}
return $apiRequest;
}
......
......@@ -38,7 +38,7 @@ class CRM_ActivityTypeACL_BAO_ACL extends CRM_Core_DAO {
*
* @var array
*/
static $_permissionedActivities = array();
public static $_permissionedActivities = array();
/**
* Function to retrieve all permissioned activity types based on current user action.
......@@ -66,7 +66,7 @@ class CRM_ActivityTypeACL_BAO_ACL extends CRM_Core_DAO {
CRM_Core_Action::DELETE => 'delete',
);
// check cached value
if (CRM_Utils_Array::value($action, self::$_permissionedActivities) && !$resetCache) {
if ((self::$_permissionedActivities[$action] ?? NULL) && !$resetCache) {
$activities = self::$_permissionedActivities[$action];
return self::$_permissionedActivities[$action];
}
......@@ -164,7 +164,7 @@ class CRM_ActivityTypeACL_BAO_ACL extends CRM_Core_DAO {
$label = CRM_Core_PseudoConstant::getLabel('CRM_Activity_BAO_Activity', 'activity_type_id', key($activityType));
}
if (!empty($label) && !CRM_Core_Permission::check('add activities of type ' . reset($activityType))) {
CRM_Contact_Import_Parser_Contact::addToErrorMsg(ts('You do not have permission to import activities of type ' . $label), $errorMessage);
CRM_Contact_Import_Parser_Contact::addToErrorMsg(E::ts('You do not have permission to import activities of type ' . $label), $errorMessage);
}
}
......@@ -338,7 +338,7 @@ class CRM_ActivityTypeACL_BAO_ACL extends CRM_Core_DAO {
$groupBy = "
GROUP BY ca.id, tcc.id, scc.id, acc.id, ov.value";
$sortBy = CRM_Utils_Array::value('sortBy', $params);
$sortBy = $params['sortBy'] ?? NULL;
if (!$sortBy) {
// CRM-5081 - added id to act like creation date
$orderBy = "
......@@ -349,8 +349,8 @@ class CRM_ActivityTypeACL_BAO_ACL extends CRM_Core_DAO {
$orderBy = " ORDER BY $sortBy ";
}
$page = CRM_Utils_Array::value('page', $params);
$rp = CRM_Utils_Array::value('rp', $params);
$page = $params['page'] ?? NULL;
$rp = $params['rp'] ?? NULL;
if (!$page) {
$page = 1;
......@@ -550,7 +550,7 @@ class CRM_ActivityTypeACL_BAO_ACL extends CRM_Core_DAO {
$caseID = CRM_Utils_Type::validate($_GET['caseID'], 'Integer');
$contactID = CRM_Utils_Type::validate($_GET['cid'], 'Integer');
$userID = CRM_Utils_Type::validate($_GET['userID'], 'Integer');
$context = CRM_Utils_Type::validate(CRM_Utils_Array::value('context', $_GET), 'String');
$context = CRM_Utils_Type::validate($_GET['context'] ?? NULL, 'String');
$optionalParameters = array(
'source_contact_id' => 'Integer',
......
......@@ -54,7 +54,7 @@ class CRM_ActivityTypeACL_BAO_Query {
* @param $query
*/
public static function where(&$query) {
if (CRM_Utils_Array::value('civicrm_activity', $query->_tables)) {
if (($query->_tables['civicrm_activity'] ?? NULL)) {
$activities = CRM_ActivityTypeACL_BAO_ACL::getPermissionedActivities();
$ids = implode(',', array_keys($activities));
if (empty($ids)) {
......@@ -70,7 +70,7 @@ class CRM_ActivityTypeACL_BAO_Query {
public static function setTableDependency(&$tables) {
}
public static function registerAdvancedSearchPane(&$panes) {
}
......
<?php
require_once 'activitytypeacl.civix.php';
use CRM_ActivityTypeACL_ExtensionUtil as E;
/**
* Implementation of hook_civicrm_config
......@@ -21,10 +22,10 @@ function activitytypeacl_civicrm_config(&$config) {
CRM_Case_PseudoConstant::caseActivityType($indexName, $all);
$cache = (int) $indexName . '_' . (int) $all;
if ($cache == "0_1") {
CRM_Case_PseudoConstant::$activityTypeList[$cache] = array_intersect_key(CRM_Case_PseudoConstant::$activityTypeList[$cache], $activityOptions);
Civi::$statics['CRM_Case_PseudoConstant']['activityTypeList'][$cache] = array_intersect_key(Civi::$statics['CRM_Case_PseudoConstant']['activityTypeList'][$cache], $activityOptions);
}
else {
CRM_Case_PseudoConstant::$activityTypeList[$cache] = array_intersect_key(CRM_Case_PseudoConstant::$activityTypeList[$cache], $flip);
Civi::$statics['CRM_Case_PseudoConstant']['activityTypeList'][$cache] = array_intersect_key(Civi::$statics['CRM_Case_PseudoConstant']['activityTypeList'][$cache], $flip);
}
}
}
......@@ -55,12 +56,13 @@ function activitytypeacl_civicrm_enable() {
*/
function activitytypeacl_civicrm_permission(&$permissions) {
$activities = CRM_Core_PseudoConstant::activityType(TRUE, TRUE, FALSE, 'name', TRUE);
$prefix = ts('CiviCRM') . ': ';
$prefix = E::ts('CiviCRM') . ': ';
$actions = array('add', 'view', 'edit', 'delete');
foreach ($activities as $id => $type) {
$label = CRM_Core_PseudoConstant::getLabel('CRM_Activity_BAO_Activity', 'activity_type_id', $id);
foreach ($actions as $action) {
$permissions[$action . ' activities of type ' . $type] = $prefix . ts($action . ' activities of type ') . $label;
$permissions[$action . ' activities of type ' . $type]['label'] = $prefix . ts($action . ' activities of type ') . $label;
$permissions[$action . ' activities of type ' . $type]['description'] = $prefix . ts($action . ' activities of type ') . $label;
}
}
}
......@@ -78,14 +80,14 @@ function activitytypeacl_civicrm_queryObjects(&$queryObjects, $type) {
function activitytypeacl_civicrm_apiWrappers(&$wrappers, $apiRequest) {
if (!empty($_SERVER['REQUEST_URI']) && strpos($_SERVER['REQUEST_URI'], 'civicrm/a') !== false) {
if ($apiRequest['entity'] == 'OptionValue' && $apiRequest['action'] == 'get') {
if ($apiRequest['entity'] == 'OptionValue' && $apiRequest['action'] == 'get' && $apiRequest['version'] == 3) {
$wrappers[] = new CRM_ActivityTypeACL_APIWrappers_ACL();
}
}
if ($apiRequest['entity'] == 'CaseType' && $apiRequest['action'] == 'get') {
if ($apiRequest['entity'] == 'CaseType' && $apiRequest['action'] == 'get' && $apiRequest['version'] == 3) {
$wrappers[] = new CRM_ActivityTypeACL_APIWrappers_ACL();
}
if ($apiRequest['entity'] == 'Activity' && $apiRequest['action'] == 'get') {
if ($apiRequest['entity'] == 'Activity' && $apiRequest['action'] == 'get' && $apiRequest['version'] == 3) {
$wrappers[] = new CRM_ActivityTypeACL_APIWrappers_ACL();
}
}
......@@ -96,34 +98,23 @@ function activitytypeacl_civicrm_apiWrappers(&$wrappers, $apiRequest) {
* @link http://wiki.civicrm.org/confluence/display/CRMDOC/hook_civicrm_buildForm
*/
function activitytypeacl_civicrm_buildForm($formName, &$form) {
// Restrict activity types available in the "New Activity" creation list on contact summary page.
if ($formName == "CRM_Activity_Form_ActivityLinks") {
CRM_ActivityTypeACL_BAO_ACL::getPermissionedActivities($activityOptions, CRM_Core_Action::ADD, FALSE, TRUE);
$activityTypes = CRM_Core_Smarty::singleton()->get_template_vars('activityTypes');
foreach ($activityTypes as $key => $activity) {
if (!array_key_exists($activity['value'], $activityOptions)) {
unset($activityTypes[$key]);
}
}
$form->assign('activityTypes', $activityTypes);
}
// Restrict activity types available in the filters on activity tab on contact summary page.
if ($formName == "CRM_Activity_Form_ActivityFilter") {
CRM_ActivityTypeACL_BAO_ACL::getPermissionedActivities($activityOptions, CRM_Core_Action::VIEW, FALSE, TRUE);
asort($activityOptions);
$form->add('select', 'activity_type_filter_id', ts('Include'), array('' => ts('- all activity type(s) -')) + $activityOptions);
$form->add('select', 'activity_type_exclude_filter_id', ts('Exclude'), array('' => ts('- select activity type -')) + $activityOptions);
$form->add('select', 'activity_type_filter_id', E::ts('Include'), $activityOptions, FALSE, ['class' => 'crm-select2', 'multiple' => TRUE, 'placeholder' => E::ts('- all activity type(s) -')]);
$form->add('select', 'activity_type_exclude_filter_id', E:: ts('Exclude'), $activityOptions, FALSE, ['class' => 'crm-select2', 'multiple' => TRUE, 'placeholder' => E::ts('- no types excluded -')]);
}
// Restrict activity types available in the filters on activity searches.
if ($formName == "CRM_Activity_Form_Search" || $formName == "CRM_Contact_Form_Search_Advanced") {
$form->addSelect('activity_type_id', array(
'entity' => 'activity',
'label' => ts('Activity Type(s)'),
'label' => E::ts('Activity Type(s)'),
'multiple' => 'multiple',
'option_url' => NULL,
'placeholder' => ts('- any -'),
'placeholder' => E::ts('- any -'),
'options' => CRM_ActivityTypeACL_BAO_ACL::getPermissionedActivities($activityOptions, CRM_Core_Action::VIEW, FALSE, TRUE))
);
}
......@@ -157,8 +148,8 @@ function activitytypeacl_civicrm_buildForm($formName, &$form) {
CRM_ActivityTypeACL_BAO_ACL::getPermissionedActivities($allowedActivities, CRM_Core_Action::ADD, FALSE, TRUE);
$fActivityTypes = array_intersect_key($allowedActivities, $fActivityTypes);
$form->add('select', 'activity_type_id', ts('Activity Type'),
array('' => '- ' . ts('select') . ' -') + $fActivityTypes,
$form->add('select', 'activity_type_id', E::ts('Activity Type'),
array('' => '- ' . E::ts('select') . ' -') + $fActivityTypes,
FALSE, array(
'onchange' => "CRM.buildCustomData( 'Activity', this.value );",
'class' => 'crm-select2 required',
......@@ -166,8 +157,8 @@ function activitytypeacl_civicrm_buildForm($formName, &$form) {
);
// Restrict follow up activities too.
$form->add('select', 'followup_activity_type_id', ts('Followup Activity'),
array('' => '- ' . ts('select') . ' -') + $fActivityTypes,
$form->add('select', 'followup_activity_type_id', E::ts('Followup Activity'),
array('' => '- ' . E::ts('select') . ' -') + $fActivityTypes,
FALSE, array(
'class' => 'crm-select2',
)
......@@ -213,8 +204,8 @@ function activitytypeacl_civicrm_buildForm($formName, &$form) {
CRM_ActivityTypeACL_BAO_ACL::getPermissionedActivities($allowedActivities, CRM_Core_Action::UPDATE, FALSE, TRUE);
$fActivityTypes = array_intersect_key($allowedActivities, $fActivityTypes);
$form->add('select', 'activity_type_id', ts('Activity Type'),
array('' => '- ' . ts('select') . ' -') + $allowedActivities,
$form->add('select', 'activity_type_id', E::ts('Activity Type'),
array('' => '- ' . E::ts('select') . ' -') + $allowedActivities,
FALSE, array(
'onchange' => "CRM.buildCustomData( 'Activity', this.value );",
'class' => 'crm-select2 required',
......@@ -222,8 +213,8 @@ function activitytypeacl_civicrm_buildForm($formName, &$form) {
);
// Restrict follow up activities too.
$form->add('select', 'followup_activity_type_id', ts('Followup Activity'),
array('' => '- ' . ts('select') . ' -') + $fActivityTypes,
$form->add('select', 'followup_activity_type_id', E::ts('Followup Activity'),
array('' => '- ' . E::ts('select') . ' -') + $fActivityTypes,
FALSE, array(
'class' => 'crm-select2',
)
......@@ -247,13 +238,13 @@ function activitytypeacl_civicrm_buildForm($formName, &$form) {
CRM_ActivityTypeACL_BAO_ACL::getPermissionedActivities($viewActivities, CRM_Core_Action::VIEW, FALSE, TRUE);
foreach ($allCaseActTypes as $typeDetails) {
if (!in_array($typeDetails['name'], array('Open Case'))) {
$aTypesFilter[$typeDetails['id']] = CRM_Utils_Array::value('label', $typeDetails);
$aTypesFilter[$typeDetails['id']] = $typeDetails['label'] ?? NULL;
}
}
$aTypes = array_intersect_key($allowedActivities, $aTypes);
$aTypesFilter = array_intersect_key($viewActivities, $aTypesFilter);
//CRM_Case_Form_CaseView::activityForm($form, $aTypes);
$form->add('select', 'activity_type_filter_id', ts('Activity Type'), array('' => ts('- select activity type -')) + $aTypesFilter, FALSE, array('id' => 'activity_type_filter_id_' . $form->_caseID));
$form->add('select', 'activity_type_filter_id', E::ts('Activity Type'), ['' => E::ts('- select activity type -')] + $aTypesFilter, FALSE, ['id' => 'activity_type_filter_id_' . $form->_caseID]);
// remove Open Case activity type since we're inside an existing case
if ($openActTypeId = array_search('Open Case', $allActTypes)) {
......@@ -277,7 +268,7 @@ function activitytypeacl_civicrm_buildForm($formName, &$form) {
asort($aTypes);
}
$activityLinks = array('' => ts('Add Activity'));
$activityLinks = ['' => E::ts('Add Activity')];
foreach ($aTypes as $type => $label) {
if ($type == $emailActivityType) {
$url = CRM_Utils_System::url('civicrm/activity/email/add',
......@@ -311,10 +302,9 @@ function activitytypeacl_civicrm_buildForm($formName, &$form) {
*/
function activitytypeacl_civicrm_postProcess($formName, &$form) {
if ($formName == "CRM_Admin_Form_Options" && $form->getVar('_gName') == 'activity_type' && ($form->_action & CRM_Core_Action::ADD)) {
$message = "Please review permissions for the new activity type <a href='%1'>here</a>, or contact your System Administrator.";
$url = CRM_Utils_System::url('admin/people/permissions', NULL, TRUE);
$status = ts($message, array(1 => $url));
CRM_Core_Session::setStatus($status, ts('Activity Type ACL Notice'));
$urlParams = CRM_Utils_System::getCMSPermissionsUrlParams();
$message = E::ts("Please review permissions for the new activity type <a href='%1' %2>here</a>, or contact your System Administrator.", [1 => $urlParams['ufAccessURL'], 2 => $urlParams['jAccessParams']]);
CRM_Core_Session::setStatus($message, E::ts('Activity Type ACL Notice'));
}
}
......@@ -330,7 +320,7 @@ function activitytypeacl_civicrm_alterReportVar($varType, &$var, &$object) {
if ($varType == 'columns') {
if (isset($var['civicrm_activity']['filters']['activity_type_id'])) {
$var['civicrm_activity']['filters']['activity_type_id'] = array(
'title' => ts('Activity Type'),
'title' => E::ts('Activity Type'),
'operatorType' => CRM_Report_Form::OP_MULTISELECT,
'options' => CRM_ActivityTypeACL_BAO_ACL::getPermissionedActivities($activityOptions, CRM_Core_Action::VIEW, FALSE, TRUE),
);
......@@ -391,7 +381,7 @@ function activitytypeacl_civicrm_links($op, $objectName, $objectId, &$links, &$m
case 'Activity':
switch ($op) {
case 'activity.tab.row':
// use the API to return the information about the activity the link is found in by using the $objectId as a parameter
// use the API to return the information about the activity the link is found in by using the $objectId as a parameter
$result = civicrm_api3('Activity', 'get', [
'sequential' => 1,
'id' => $objectId,
......@@ -402,10 +392,10 @@ function activitytypeacl_civicrm_links($op, $objectName, $objectId, &$links, &$m
if ($links[$i]['name'] == 'View'){
$linkIndices['View'] = $i;
}
elseif ($links[$i]['name'] == 'Edit'){
elseif ($links[$i]['name'] == 'Edit') {
$linkIndices['Edit'] = $i;
}
elseif ($links[$i]['name'] == 'Delete'){
elseif ($links[$i]['name'] == 'Delete') {
$linkIndices['Delete'] = $i;
}
};
......@@ -427,7 +417,7 @@ function activitytypeacl_civicrm_links($op, $objectName, $objectId, &$links, &$m
$result = civicrm_api3('Activity', 'get', [
'sequential' => 1,
'id' => $objectId,
]);
]);
$linkIndices = [];
for ($i = 0; $i < count($links); $i++) {
if ($links[$i]['name'] == 'View'){
......@@ -449,15 +439,15 @@ function activitytypeacl_civicrm_links($op, $objectName, $objectId, &$links, &$m
}
if (!in_array($result['values'][0]['activity_type_id'], array_keys($activityOptions_delete))) {
unset($links[$linkIndices['Delete']]);
}
unset($linkIndices);
}
unset($linkIndices);
}
}
}
/**
* Implementation of hook_civicrm_alterContent
*
*
* @link https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_alterContent/
*/
......@@ -469,7 +459,7 @@ function activitytypeacl_civicrm_alterContent(&$content, $context, $tplName, &$o
CRM_ActivityTypeACL_BAO_ACL::getPermissionedActivities($activityOptions_edit, CRM_Core_Action::UPDATE, FALSE, TRUE);
CRM_ActivityTypeACL_BAO_ACL::getPermissionedActivities($activityOptions_delete, CRM_Core_Action::DELETE, FALSE, TRUE);
// CRM_Core_Error::debug_var('array_keys:', array_keys($activityOptions_delete));
if (!in_array($object -> _activityTypeId, array_keys($activityOptions_edit))) {
if (!in_array($object->_activityTypeId, array_keys($activityOptions_edit))) {
// find the index of the html content string for the edit tag
$editButtonIndex = strpos($content, "title=\"Edit\"");
$startEdit = $editButtonIndex;
......@@ -484,7 +474,7 @@ function activitytypeacl_civicrm_alterContent(&$content, $context, $tplName, &$o
// remove the <a> tag for the edit button from the html
$content = str_replace($editButton,"",$content);
}
if (!in_array($object -> _activityTypeId, array_keys($activityOptions_delete))) {
if (!in_array($object->_activityTypeId, array_keys($activityOptions_delete))) {
$deleteButtonIndex = strpos($content, "title=\"Delete\"");
$startEdit = $deleteButtonIndex;
$endEdit = $deleteButtonIndex;
......@@ -502,7 +492,11 @@ function activitytypeacl_civicrm_alterContent(&$content, $context, $tplName, &$o
CRM_ActivityTypeACL_BAO_ACL::getPermissionedActivities($activityOptions_edit, CRM_Core_Action::UPDATE, FALSE, TRUE);
CRM_ActivityTypeACL_BAO_ACL::getPermissionedActivities($activityOptions_delete, CRM_Core_Action::DELETE, FALSE, TRUE);
// get activityID of selected activity from the template (instead of the php file)
$activityID = CRM_Core_Smarty::singleton()->get_template_vars('activityID');
$function = 'get_template_vars';
if (method_exists('CRM_Core_Smarty', 'getTemplateVars')) {
$function = 'getTemplateVars';
}
$activityID = CRM_Core_Smarty::singleton()->$function('activityID');
// call the API using the activityID to get activity_type_id
$result = civicrm_api3('Activity', 'get', [
'sequential' => 1,
......@@ -524,8 +518,6 @@ function activitytypeacl_civicrm_alterContent(&$content, $context, $tplName, &$o
$content = str_replace($editButton,"",$content);
}
if (!in_array($result['values'][0]['activity_type_id'], array_keys($activityOptions_delete))) {
CRM_Core_Error::debug_var('array_keys_delete:', array_keys($activityOptions_delete));
CRM_Core_Error::debug_log_message("DELETE ACTIVE");
$deleteButtonIndex = strpos($content, "name=\"Delete\"");
$startEdit = $deleteButtonIndex;
$endEdit = $deleteButtonIndex;
......
......@@ -9,16 +9,16 @@
<email>support@jmaconsulting.biz</email>
</maintainer>
<urls>
<url desc="Main Extension Page">https://github.com/JMAConsulting/biz.jmaconsulting.activitytypeacl</url>
<url desc="Documentation">https://github.com/JMAConsulting/biz.jmaconsulting.activitytypeacl/wiki/Documentation</url>
<url desc="Support">https://github.com/JMAConsulting/biz.jmaconsulting.activitytypeacl/issues</url>
<url desc="Main Extension Page">https://lab.civicrm.org/extensions/activitytypeacl</url>
<url desc="Documentation">https://lab.civicrm.org/extensions/activitytypeacl/-/wikis/home</url>
<url desc="Support">https://lab.civicrm.org/extensions/activitytypeacl/-/issues</url>
<url desc="Licensing">http://www.gnu.org/licenses/agpl-3.0.html</url>
</urls>
<releaseDate>2023-02-17</releaseDate>
<version>1.4</version>
<releaseDate>2024-05-15</releaseDate>
<version>1.6.1</version>
<develStage>alpha</develStage>
<compatibility>
<ver>5.51</ver>
<ver>5.57</ver>
</compatibility>
<comments>This module was developed by JMA Consulting.</comments>
<civix>
......