Coder Social home page Coder Social logo

jmaconsulting / biz.jmaconsulting.activitytypeacl Goto Github PK

View Code? Open in Web Editor NEW
4.0 4.0 3.0 104 KB

This extension provides the ability to restrict activities on CiviCRM by roles with permissions to various activity types.

License: GNU Affero General Public License v3.0

PHP 100.00%

biz.jmaconsulting.activitytypeacl's People

Contributors

edzelopez avatar joemurray avatar megaphonejon avatar monishdeb avatar seamuslee001 avatar

Stargazers

 avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar

biz.jmaconsulting.activitytypeacl's Issues

Permissions not always saving

A client has many activity types - they've added quite a few. Each new activity type has 4 permissions so the list in Drupal permissions is very long. Both the client and I have noticed that if you update a lot of permissions - e.g. after adding several activity types - and click 'Save permissions' then they don't all get saved. Sometimes those at the top of the list get saved and the rest don't, or none get saved. Retrying fixes it, although it might take 3/4 tries. This is a Drupal 7 install, and PHP has 512MB of memory. We use the 'filter permissions' module in Drupal. This was mentioned to https://github.com/Edzelopez in an email on 21/4/20. Thanks! Andy Clark

Make Production Ready

What would be required to make this extension production-ready?

Phase I: Everything Except CiviCase

  1. Support Activity ACLS in the following reports:
    1.1. Constituent Detail (30m)
    1.2. Survey Details (2h)
  2. Change filtering of Activities to handle Activities for all Components (30m)
  3. Prevent access to activity pages by direct access by link on unpermissioned pages (1h)
  4. Filter the list on Schedule Follow-up Activity dropdown (1h)
  5. Update documentation and submit to c.o (1h)
  6. Project management including QA (1h)
    Total: 7h~~

Phase II: CiviCase

  1. Support Activity ACLS in the following reports:
    1.1. Case Time Spent (1h)
    1.2. Case Detail Report (2h)
  2. Adjust Manage Case page:
    3.1. Filter list of Activities that can be added (30m)
    3.2 Filter activities displayed in case (3-4h)
    3.3. Display appropriate view, edit, delete links on each result on case summary tab (3-4h)
    3.4. Modify adding timelines so that unpermissioned activities are not added (1h)
    3.5 Modify auditing timelines so that unpermissioned activity types are not included in audit (3h or 1h to prevent this kind of audit)
  3. Update documentation (.5h)
  4. Project management including QA (2h)
    Total: 14-18h

Activities appear in summary tab on recent CiviCRM versions

In more recent versions of CiviCRM, permissioned activities appear in a contact's activity tab. You can't view them - clicking "View", "Edit" or "Delete" will result in an error - but you can see information about them in the data table.

I don't know if my client is going to care - I'll ask them. If you don't hear from me in a week, you can assume we'll continue to use it as is. I just wanted to make sure you knew in case it affected your clients!

Non-admin users can't see case reports

If I disable this extension, they can see the report (CRM_Report_Form_Case_Detail). If enabled, they get this error:

I've removed all activity type related fields from the output under columns: e.g.

  • Subject of the last activity in the case
  • Activity type of the last activity
Database Error Code: Unknown column 'civireport_activity_last_civireport.activity_type_id' in 'where clause', 1054
Additional Details:
Array
(
    [callback] => Array
        (
            [0] => CRM_Core_Error
            [1] => handle
        )

    [code] => -19
    [message] => DB Error: no such field
    [mode] => 16
    [debug_info] => SELECT SQL_CALC_FOUND_ROWS case_civireport.id as civicrm_case_id, case_civireport.subject as civicrm_case_subject, case_civireport.start_date as civicrm_case_start_date, contact_civireport.sort_name as civicrm_contact_client_sort_name, contact_civireport.id as civicrm_contact_id, contact_civireport.id as civicrm_contact_exposed_id, email_civireport.email as civicrm_email_email, phone_civireport.phone as civicrm_phone_phone, value_media_request_61_civireport.deadline_date_330 as civicrm_value_media_request_61_custom_330, value_media_request_61_civireport.opportunity_evaluation_331 as civicrm_value_media_request_61_custom_331, value_media_booking_60_civireport.date_scheduled_324 as civicrm_value_media_booking_60_custom_324, value_media_booking_60_civireport.duration_325 as civicrm_value_media_booking_60_custom_325, value_media_booking_60_civireport.format_326 as civicrm_value_media_booking_60_custom_326, value_media_booking_60_civireport.topics_329 as civicrm_value_media_booking_60_custom_329  
             FROM civicrm_case case_civireport
 LEFT JOIN civicrm_case_contact civireport_case_contact on civireport_case_contact.case_id = case_civireport.id
 LEFT JOIN civicrm_contact contact_civireport ON contact_civireport.id = civireport_case_contact.contact_id
 
             LEFT JOIN  civicrm_relationship relationship_civireport ON relationship_civireport.case_id = case_civireport.id

                 LEFT JOIN civicrm_address address_civireport
                           ON (contact_civireport.id =
                               address_civireport.contact_id)  AND
                               address_civireport.is_primary = 1

      LEFT JOIN civicrm_phone phone_civireport
             ON contact_civireport.id = phone_civireport.contact_id AND
                phone_civireport.is_primary = 1

            LEFT JOIN  civicrm_email email_civireport
                   ON contact_civireport.id = email_civireport.contact_id AND
                       email_civireport.is_primary = 1 
LEFT JOIN civicrm_value_media_request_61 value_media_request_61_civireport ON value_media_request_61_civireport.entity_id = case_civireport.id
LEFT JOIN civicrm_value_media_booking_60 value_media_booking_60_civireport ON value_media_booking_60_civireport.entity_id = case_civireport.id  WHERE ( case_civireport.status_id IN (1, 5, 3) ) AND ( case_civireport.case_type_id IN (9) ) AND ( case_civireport.is_deleted = 0 ) AND ( value_media_request_61_civireport.deadline_date_330 >= 20200924000000) AND ( value_media_request_61_civireport.deadline_date_330 <= 20201023235959) AND  ( civireport_activity_last_civireport.activity_type_id NOT IN ( 9,14,25,26,28,29,30,31,32,33,45,49,50,82,95,99,101 )  ) AND ( activity_last_completed_civireport.activity_type_id NOT IN ( 9,14,25,26,28,29,30,31,32,33,45,49,50,82,95,99,101 )  )  GROUP BY case_civireport.id  ORDER BY case_civireport.start_date ASC  LIMIT 0, 50 [nativecode=1054 ** Unknown column 'civireport_activity_last_civireport.activity_type_id' in 'where clause']
    [type] => DB_Error
    [user_info] => SELECT SQL_CALC_FOUND_ROWS case_civireport.id as civicrm_case_id, case_civireport.subject as civicrm_case_subject, case_civireport.start_date as civicrm_case_start_date, contact_civireport.sort_name as civicrm_contact_client_sort_name, contact_civireport.id as civicrm_contact_id, contact_civireport.id as civicrm_contact_exposed_id, email_civireport.email as civicrm_email_email, phone_civireport.phone as civicrm_phone_phone, value_media_request_61_civireport.deadline_date_330 as civicrm_value_media_request_61_custom_330, value_media_request_61_civireport.opportunity_evaluation_331 as civicrm_value_media_request_61_custom_331, value_media_booking_60_civireport.date_scheduled_324 as civicrm_value_media_booking_60_custom_324, value_media_booking_60_civireport.duration_325 as civicrm_value_media_booking_60_custom_325, value_media_booking_60_civireport.format_326 as civicrm_value_media_booking_60_custom_326, value_media_booking_60_civireport.topics_329 as civicrm_value_media_booking_60_custom_329  
             FROM civicrm_case case_civireport
 LEFT JOIN civicrm_case_contact civireport_case_contact on civireport_case_contact.case_id = case_civireport.id
 LEFT JOIN civicrm_contact contact_civireport ON contact_civireport.id = civireport_case_contact.contact_id
 
             LEFT JOIN  civicrm_relationship relationship_civireport ON relationship_civireport.case_id = case_civireport.id

                 LEFT JOIN civicrm_address address_civireport
                           ON (contact_civireport.id =
                               address_civireport.contact_id)  AND
                               address_civireport.is_primary = 1

      LEFT JOIN civicrm_phone phone_civireport
             ON contact_civireport.id = phone_civireport.contact_id AND
                phone_civireport.is_primary = 1

            LEFT JOIN  civicrm_email email_civireport
                   ON contact_civireport.id = email_civireport.contact_id AND
                       email_civireport.is_primary = 1 
LEFT JOIN civicrm_value_media_request_61 value_media_request_61_civireport ON value_media_request_61_civireport.entity_id = case_civireport.id
LEFT JOIN civicrm_value_media_booking_60 value_media_booking_60_civireport ON value_media_booking_60_civireport.entity_id = case_civireport.id  WHERE ( case_civireport.status_id IN (1, 5, 3) ) AND ( case_civireport.case_type_id IN (9) ) AND ( case_civireport.is_deleted = 0 ) AND ( value_media_request_61_civireport.deadline_date_330 >= 20200924000000) AND ( value_media_request_61_civireport.deadline_date_330 <= 20201023235959) AND  ( civireport_activity_last_civireport.activity_type_id NOT IN ( 9,14,25,26,28,29,30,31,32,33,45,49,50,82,95,99,101 )  ) AND ( activity_last_completed_civireport.activity_type_id NOT IN ( 9,14,25,26,28,29,30,31,32,33,45,49,50,82,95,99,101 )  )  GROUP BY case_civireport.id  ORDER BY case_civireport.start_date ASC  LIMIT 0, 50 [nativecode=1054 ** Unknown column 'civireport_activity_last_civireport.activity_type_id' in 'where clause']
    [to_string] => [db_error: message="DB Error: no such field" code=-19 mode=callback callback=CRM_Core_Error::handle prefix="" info="SELECT SQL_CALC_FOUND_ROWS case_civireport.id as civicrm_case_id, case_civireport.subject as civicrm_case_subject, case_civireport.start_date as civicrm_case_start_date, contact_civireport.sort_name as civicrm_contact_client_sort_name, contact_civireport.id as civicrm_contact_id, contact_civireport.id as civicrm_contact_exposed_id, email_civireport.email as civicrm_email_email, phone_civireport.phone as civicrm_phone_phone, value_media_request_61_civireport.deadline_date_330 as civicrm_value_media_request_61_custom_330, value_media_request_61_civireport.opportunity_evaluation_331 as civicrm_value_media_request_61_custom_331, value_media_booking_60_civireport.date_scheduled_324 as civicrm_value_media_booking_60_custom_324, value_media_booking_60_civireport.duration_325 as civicrm_value_media_booking_60_custom_325, value_media_booking_60_civireport.format_326 as civicrm_value_media_booking_60_custom_326, value_media_booking_60_civireport.topics_329 as civicrm_value_media_booking_60_custom_329  
             FROM civicrm_case case_civireport
 LEFT JOIN civicrm_case_contact civireport_case_contact on civireport_case_contact.case_id = case_civireport.id
 LEFT JOIN civicrm_contact contact_civireport ON contact_civireport.id = civireport_case_contact.contact_id
 
             LEFT JOIN  civicrm_relationship relationship_civireport ON relationship_civireport.case_id = case_civireport.id

                 LEFT JOIN civicrm_address address_civireport
                           ON (contact_civireport.id =
                               address_civireport.contact_id)  AND
                               address_civireport.is_primary = 1

      LEFT JOIN civicrm_phone phone_civireport
             ON contact_civireport.id = phone_civireport.contact_id AND
                phone_civireport.is_primary = 1

            LEFT JOIN  civicrm_email email_civireport
                   ON contact_civireport.id = email_civireport.contact_id AND
                       email_civireport.is_primary = 1 
LEFT JOIN civicrm_value_media_request_61 value_media_request_61_civireport ON value_media_request_61_civireport.entity_id = case_civireport.id
LEFT JOIN civicrm_value_media_booking_60 value_media_booking_60_civireport ON value_media_booking_60_civireport.entity_id = case_civireport.id  WHERE ( case_civireport.status_id IN (1, 5, 3) ) AND ( case_civireport.case_type_id IN (9) ) AND ( case_civireport.is_deleted = 0 ) AND ( value_media_request_61_civireport.deadline_date_330 >= 20200924000000) AND ( value_media_request_61_civireport.deadline_date_330 <= 20201023235959) AND  ( civireport_activity_last_civireport.activity_type_id NOT IN ( 9,14,25,26,28,29,30,31,32,33,45,49,50,82,95,99,101 )  ) AND ( activity_last_completed_civireport.activity_type_id NOT IN ( 9,14,25,26,28,29,30,31,32,33,45,49,50,82,95,99,101 )  )  GROUP BY case_civireport.id  ORDER BY case_civireport.start_date ASC  LIMIT 0, 50 [nativecode=1054 ** Unknown column 'civireport_activity_last_civireport.activity_type_id' in 'where clause']"]
)

Find contacts and Adv search failure with CiviCRM 5.47.1

Hi Joe

We have just updated a site to 5.47.1 (D7).
And the activity type acl extension is bringing up an error when you do a Find Contacts or Adv Search

The error is
Error: Call to undefined method CRM_ActivityTypeACL_BAO_Query::defaultReturnProperties() in CRM_Contact_BAO_Query_Hook->getDefaultReturnProperties()
(line 158 of /xxxx/drupal7/sites/all/modules/civicrm/CRM/Contact/BAO/Query/Hook.php).

Yours
Olly

Activities not showing up even after permissions are set

CMS - Drupal 7.69
CiviCRM - 5.13.6

Some new activities of type "Contact and Case" do not show up in create activity dropdown on civicrm contact page even though view, add, edit and delete actions are allowed to role of logged in user.
After some debugging i noticed in file "activitytypeacl.php", in buildform hook "$activityOptions" variable do not have IDs of those new created activities. My assumption is "getPermissionedActivities" function is using this variable to determine if permissions for set for each activity ID found in said variable...?

Delete activity type set but does not delete

For a user role I have both CiviCRM: delete activities of type Phone Call and CiviCRM: Delete activities permissions.

However, it does not let the user delete the activity type of phone call and says 'You do not have permission to access this page.'

Extension causes all contact pages to give a 500 error on Civi 5.13+

Error and stack trace are below. Interestingly, my initial research suggests this is an issue on PHP 7.1+ but this site runs PHP 7.0.33.

This client isn't actually using this extension so I disabled it. I don't think I have any other users, but if I do I'll try to step through this with a debugger.

[Mon May 06 12:04:22.859812 2019] [:error] [pid 12353] [client 69.122.131.116:53662] PHP Fatal error:  Uncaught Error: [] operator not supported for strings in /var/www/nwu.org/wp-content/civicrm-custom/ext/biz.jmaconsulting.activitytypeacl/activitytypeacl.php:313
Stack trace:
#0 /var/www/nwu.org/wp-content/plugins/civicrm/civicrm/CRM/Utils/Hook.php(290): activitytypeacl_civicrm_selectWhereClause('Activity', Array)
#1 /var/www/nwu.org/wp-content/plugins/civicrm/civicrm/CRM/Utils/Hook/WordPress.php(155): CRM_Utils_Hook->runHooks(Array, 'civicrm_selectW...', 2, 'Activity', Array, NULL, NULL, NULL, NULL)
#2 /var/www/nwu.org/wp-content/plugins/civicrm/civicrm/Civi/Core/CiviEventDispatcher.php(90): CRM_Utils_Hook_WordPress->invokeViaUF(2, 'Activity', Array, NULL, NULL, NULL, NULL, 'civicrm_selectW...')
#3 /var/www/nwu.org/wp-content/plugins/civicrm/civicrm/vendor/symfony/event-dispatcher/EventDispatcher.php(184): Civi\\Core\\CiviEventDispatcher::delegateToUF(Object(Civi\\Core\\Event\\GenericHookEvent), 'hook_civicrm_se...', Object(Civi\\Core\\CiviEventDispatcher))
#4 /var/www/nwu.org/wp-content/plugins/civicrm/civicrm/ven in /var/www/nwu.org/wp-content/civicrm-custom/ext/biz.jmaconsulting.activitytypeacl/activitytypeacl.php on line 313, referer: https://nwu.org/wp-admin/admin.php?page=CiviCRM

Activities Editable from Activity view Screen if "View" permission is given

If staff do not have permission to Edit an activity they can still edit if they have the ability to View
For instance, if staff with View and Add permission only access a Case screen, then click View an activity, then the activity View screen gives them the option to Edit (which they can proceed to Edit and save the activity).

Image 1 - What a staff member with Add and View only sees in eth activity summary of a case
Add and View Permission only

Image 2 - Showing the Edit option is given within in the activity view, despite that permission not being assigned to that staff member role
Edit option shown in activity view

Activity reports fail when extension is active

We just installed this extension a couple days ago, and now I saw that if the activitytypeacl extension is active, it makes the activity reports fail. Disabling made them work.

Either

  1. We get a WSOD on parent site (character encoding error)
  2. On a child site we saw the same issue as this: https://civicrm.stackexchange.com/questions/7897/report-error-bad-menu-record-in-database. Rebuilding the menu did not resolve.

Enabling debugging and error handling does not provide any more errors in UI.

The error log shows:

Apr 11 16:43:09  [info] $Fatal Error Details = Array
(
    [message] => Bad menu record in database
    [code] => 
)


Apr 11 16:43:09  [info] $backTrace = #0 wp-content/plugins/civicrm/civicrm/CRM/Core/Error.php(381): CRM_Core_Error::backtrace("backTrace", TRUE)
#1 wp-content/plugins/civicrm/civicrm/CRM/Core/Invoke.php(224): CRM_Core_Error::fatal("Bad menu record in database")
#2 wp-content/plugins/civicrm/civicrm/CRM/Core/Invoke.php(84): CRM_Core_Invoke::runItem((Array:1))
#3 wp-content/plugins/civicrm/civicrm/CRM/Core/Invoke.php(52): CRM_Core_Invoke::_invoke((Array:4))
#4 wp-content/plugins/civicrm/civicrm.php(1243): CRM_Core_Invoke::invoke((Array:4))
#5 wp-includes/class-wp-hook.php(286): CiviCRM_For_WordPress->invoke("")
#6 wp-includes/class-wp-hook.php(310): WP_Hook->apply_filters("", (Array:1))
#7 wp-includes/plugin.php(465): WP_Hook->do_action((Array:1))
#8 wp-admin/admin.php(253): do_action("toplevel_page_CiviCRM")
#9 {main}

On WP 5.1.1 and Civi 5.12 multisite.

Non-admins cannot export activities (activity_type_id in where clause is ambiguous)

For non-admins, this is the error they get when going to Search > Find Activities > running search > actions dropdown > select Export Activities > error occurs. I disabled this extension and was able to get the export screen.

`Database Error Code: Column 'activity_type_id' in where clause is ambiguous, 1052
Additional Details:

Array
(
[callback] => Array
(
[0] => CRM_Core_Error
[1] => handle
)

[code] => -1
[message] => DB Error: unknown error
[mode] => 16
[debug_info] => SELECT ( civicrm_activity.id ), contact_a.id as contact_id, contact_a.contact_type as `contact_type`, contact_a.contact_sub_type as `contact_sub_type`, contact_a.sort_name as `sort_name`, contact_a.display_name as `display_name`, civicrm_activity.id as activity_id, civicrm_activity.activity_type_id, civicrm_activity.subject as activity_subject, civicrm_activity.activity_date_time as activity_date_time, 1, civicrm_activity.duration as activity_duration, civicrm_activity.location as activity_location, civicrm_activity.details as activity_details, civicrm_activity.source_record_id as source_record_id, civicrm_activity.is_test as activity_is_test, civicrm_activity.campaign_id as activity_campaign_id, civicrm_activity.engagement_level as activity_engagement_level, source_contact.sort_name as source_contact, activity_priority.label as activity_priority,
  civicrm_activity.priority_id as priority_id, civicrm_activity.status_id as `status_id`, civicrm_activity.engagement_level as `engagement_level`  FROM civicrm_contact contact_a   LEFT JOIN civicrm_activity_contact
                  ON ( civicrm_activity_contact.contact_id = contact_a.id )  LEFT JOIN civicrm_activity
                  ON ( civicrm_activity.id = civicrm_activity_contact.activity_id
                  AND civicrm_activity.is_deleted = 0 AND civicrm_activity.is_current_revision = 1 ) INNER JOIN civicrm_contact
                  ON ( civicrm_activity_contact.contact_id = civicrm_contact.id and civicrm_contact.is_deleted != 1 )  LEFT JOIN civicrm_option_group option_group_activity_priority ON (option_group_activity_priority.name = 'priority') LEFT JOIN civicrm_option_value activity_priority ON (civicrm_activity.priority_id = activity_priority.value
                          AND option_group_activity_priority.id = activity_priority.option_group_id )  LEFT JOIN civicrm_activity AS parent_id ON civicrm_activity.id = parent_id.parent_id  LEFT JOIN civicrm_activity_contact source_activity
        ON (source_activity.activity_id = civicrm_activity_contact.activity_id
          AND source_activity.record_type_id = 2)
      LEFT JOIN civicrm_contact source_contact ON (source_activity.contact_id = source_contact.id)  WHERE  ( civicrm_activity.activity_type_id IN ("93") AND civicrm_activity.activity_date_time BETWEEN '20200808000000' AND '20201006235959' AND civicrm_activity.status_id IN ("2") AND civicrm_activity.is_test = 0 )  AND  (  ( civicrm_activity.activity_type_id IN (76,77,2,3,1,4,5,6,7,8,12,17,19,34,40,35,36,37,38,39,44,22,46,47,48,51,58,54,52,78,80,81,84,85,93,94,96,97,98,100) )  )  AND (contact_a.is_deleted = 0) AND (civicrm_activity.activity_type_id IN (1, 2, 3, 4, 5, 6, 7, 8, 9, 12, 17, 19, 22, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 54, 58, 76, 77, 78, 80, 81, 82, 84, 85, 86, 87, 93, 94, 95, 96, 97, 98, 99, 100, 101) AND ( activity_type_id NOT IN ( 9,13,14,15,16,18,20,21,23,24,25,26,27,28,29,30,31,32,33,41,42,43,45,49,50,53,82,86,87,95,99,101 )  ) AND civicrm_activity.`id` IN (SELECT `id` FROM `civicrm_activity` WHERE id IN (SELECT activity_id FROM civicrm_activity_contact WHERE contact_id IN (SELECT `id` FROM `civicrm_contact` WHERE is_deleted != 1))))   GROUP BY civicrm_activity.id  ORDER BY `contact_a`.`sort_name` ASC, `contact_a`.`id`  [nativecode=1052 ** Column 'activity_type_id' in where clause is ambiguous]
[type] => DB_Error
[user_info] => SELECT ( civicrm_activity.id ), contact_a.id as contact_id, contact_a.contact_type as `contact_type`, contact_a.contact_sub_type as `contact_sub_type`, contact_a.sort_name as `sort_name`, contact_a.display_name as `display_name`, civicrm_activity.id as activity_id, civicrm_activity.activity_type_id, civicrm_activity.subject as activity_subject, civicrm_activity.activity_date_time as activity_date_time, 1, civicrm_activity.duration as activity_duration, civicrm_activity.location as activity_location, civicrm_activity.details as activity_details, civicrm_activity.source_record_id as source_record_id, civicrm_activity.is_test as activity_is_test, civicrm_activity.campaign_id as activity_campaign_id, civicrm_activity.engagement_level as activity_engagement_level, source_contact.sort_name as source_contact, activity_priority.label as activity_priority,
  civicrm_activity.priority_id as priority_id, civicrm_activity.status_id as `status_id`, civicrm_activity.engagement_level as `engagement_level`  FROM civicrm_contact contact_a   LEFT JOIN civicrm_activity_contact
                  ON ( civicrm_activity_contact.contact_id = contact_a.id )  LEFT JOIN civicrm_activity
                  ON ( civicrm_activity.id = civicrm_activity_contact.activity_id
                  AND civicrm_activity.is_deleted = 0 AND civicrm_activity.is_current_revision = 1 ) INNER JOIN civicrm_contact
                  ON ( civicrm_activity_contact.contact_id = civicrm_contact.id and civicrm_contact.is_deleted != 1 )  LEFT JOIN civicrm_option_group option_group_activity_priority ON (option_group_activity_priority.name = 'priority') LEFT JOIN civicrm_option_value activity_priority ON (civicrm_activity.priority_id = activity_priority.value
                          AND option_group_activity_priority.id = activity_priority.option_group_id )  LEFT JOIN civicrm_activity AS parent_id ON civicrm_activity.id = parent_id.parent_id  LEFT JOIN civicrm_activity_contact source_activity
        ON (source_activity.activity_id = civicrm_activity_contact.activity_id
          AND source_activity.record_type_id = 2)
      LEFT JOIN civicrm_contact source_contact ON (source_activity.contact_id = source_contact.id)  WHERE  ( civicrm_activity.activity_type_id IN ("93") AND civicrm_activity.activity_date_time BETWEEN '20200808000000' AND '20201006235959' AND civicrm_activity.status_id IN ("2") AND civicrm_activity.is_test = 0 )  AND  (  ( civicrm_activity.activity_type_id IN (76,77,2,3,1,4,5,6,7,8,12,17,19,34,40,35,36,37,38,39,44,22,46,47,48,51,58,54,52,78,80,81,84,85,93,94,96,97,98,100) )  )  AND (contact_a.is_deleted = 0) AND (civicrm_activity.activity_type_id IN (1, 2, 3, 4, 5, 6, 7, 8, 9, 12, 17, 19, 22, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 54, 58, 76, 77, 78, 80, 81, 82, 84, 85, 86, 87, 93, 94, 95, 96, 97, 98, 99, 100, 101) AND ( activity_type_id NOT IN ( 9,13,14,15,16,18,20,21,23,24,25,26,27,28,29,30,31,32,33,41,42,43,45,49,50,53,82,86,87,95,99,101 )  ) AND civicrm_activity.`id` IN (SELECT `id` FROM `civicrm_activity` WHERE id IN (SELECT activity_id FROM civicrm_activity_contact WHERE contact_id IN (SELECT `id` FROM `civicrm_contact` WHERE is_deleted != 1))))   GROUP BY civicrm_activity.id  ORDER BY `contact_a`.`sort_name` ASC, `contact_a`.`id`  [nativecode=1052 ** Column 'activity_type_id' in where clause is ambiguous]
[to_string] => [db_error: message="DB Error: unknown error" code=-1 mode=callback callback=CRM_Core_Error::handle prefix="" info="SELECT ( civicrm_activity.id ), contact_a.id as contact_id, contact_a.contact_type as `contact_type`, contact_a.contact_sub_type as `contact_sub_type`, contact_a.sort_name as `sort_name`, contact_a.display_name as `display_name`, civicrm_activity.id as activity_id, civicrm_activity.activity_type_id, civicrm_activity.subject as activity_subject, civicrm_activity.activity_date_time as activity_date_time, 1, civicrm_activity.duration as activity_duration, civicrm_activity.location as activity_location, civicrm_activity.details as activity_details, civicrm_activity.source_record_id as source_record_id, civicrm_activity.is_test as activity_is_test, civicrm_activity.campaign_id as activity_campaign_id, civicrm_activity.engagement_level as activity_engagement_level, source_contact.sort_name as source_contact, activity_priority.label as activity_priority,
  civicrm_activity.priority_id as priority_id, civicrm_activity.status_id as `status_id`, civicrm_activity.engagement_level as `engagement_level`  FROM civicrm_contact contact_a   LEFT JOIN civicrm_activity_contact
                  ON ( civicrm_activity_contact.contact_id = contact_a.id )  LEFT JOIN civicrm_activity
                  ON ( civicrm_activity.id = civicrm_activity_contact.activity_id
                  AND civicrm_activity.is_deleted = 0 AND civicrm_activity.is_current_revision = 1 ) INNER JOIN civicrm_contact
                  ON ( civicrm_activity_contact.contact_id = civicrm_contact.id and civicrm_contact.is_deleted != 1 )  LEFT JOIN civicrm_option_group option_group_activity_priority ON (option_group_activity_priority.name = 'priority') LEFT JOIN civicrm_option_value activity_priority ON (civicrm_activity.priority_id = activity_priority.value
                          AND option_group_activity_priority.id = activity_priority.option_group_id )  LEFT JOIN civicrm_activity AS parent_id ON civicrm_activity.id = parent_id.parent_id  LEFT JOIN civicrm_activity_contact source_activity
        ON (source_activity.activity_id = civicrm_activity_contact.activity_id
          AND source_activity.record_type_id = 2)
      LEFT JOIN civicrm_contact source_contact ON (source_activity.contact_id = source_contact.id)  WHERE  ( civicrm_activity.activity_type_id IN ("93") AND civicrm_activity.activity_date_time BETWEEN '20200808000000' AND '20201006235959' AND civicrm_activity.status_id IN ("2") AND civicrm_activity.is_test = 0 )  AND  (  ( civicrm_activity.activity_type_id IN (76,77,2,3,1,4,5,6,7,8,12,17,19,34,40,35,36,37,38,39,44,22,46,47,48,51,58,54,52,78,80,81,84,85,93,94,96,97,98,100) )  )  AND (contact_a.is_deleted = 0) AND (civicrm_activity.activity_type_id IN (1, 2, 3, 4, 5, 6, 7, 8, 9, 12, 17, 19, 22, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 54, 58, 76, 77, 78, 80, 81, 82, 84, 85, 86, 87, 93, 94, 95, 96, 97, 98, 99, 100, 101) AND ( activity_type_id NOT IN ( 9,13,14,15,16,18,20,21,23,24,25,26,27,28,29,30,31,32,33,41,42,43,45,49,50,53,82,86,87,95,99,101 )  ) AND civicrm_activity.`id` IN (SELECT `id` FROM `civicrm_activity` WHERE id IN (SELECT activity_id FROM civicrm_activity_contact WHERE contact_id IN (SELECT `id` FROM `civicrm_contact` WHERE is_deleted != 1))))   GROUP BY civicrm_activity.id  ORDER BY `contact_a`.`sort_name` ASC, `contact_a`.`id`  [nativecode=1052 ** Column 'activity_type_id' in where clause is ambiguous]"]

)
`

CiviCRM 5.24.0

We have just updated a client site to Civi 5.24.0
The site uses the activity type ACL extension (with multiple Drupal roles and Case activities types per role)

Since the update the extension seems to have stopped working.
The symptom we are seeing is;

  • Find activities works for site admin
  • Activities don't show for anyone on contact screens (inc admin)
  • Activities don't show for anyone on case screens (inc admin)

Olly

Permissions settings not moved when changing host site

I moved a Drupal based client from one hosting site to another. I used Drupal Backup and Migrate to transfer the Drupal data from the source site to the target site. All 'people' data and permissions transferred as expected, but the checked permissions for activities did not transfer at all. In other words the activity permissions created by this extension were all backed up & restored correctly but none of the activity permissions that were set on the source site were set on the target site. i.e. all the activity permissions were empty.
Of course moving host sites is done infrequently, but the impact of this problem was, for a while, high.

Activity Search Error: DB Syntax

Activity search works with extension disabled, but fails as soon as I enable it.

  "message" => "DB Error: syntax error"
  "code" => null
  "exception" => PEAR_Exception {#1152
    #cause: DB_Error {#1187
      +error_message_prefix: ""
      +mode: 16
      +level: 1024
      +code: -2
      +message: "DB Error: syntax error"
      +userinfo: """
        SELECT count( DISTINCT ( civicrm_activity.id ) ) as rowCount  FROM civicrm_contact contact_a   LEFT JOIN civicrm_activity_contact\n
                              ON ( civicrm_activity_contact.contact_id = contact_a.id )  LEFT JOIN civicrm_activity\n
                              ON ( civicrm_activity.id = civicrm_activity_contact.activity_id\n
                              AND civicrm_activity.is_deleted = 0 AND civicrm_activity.is_current_revision = 1 ) INNER JOIN civicrm_contact\n
                              ON ( civicrm_activity_contact.contact_id = civicrm_contact.id and civicrm_contact.is_deleted != 1 )  LEFT JOIN civicrm_activity_contact source_activity\n
                    ON (source_activity.activity_id = civicrm_activity_contact.activity_id\n
                      AND source_activity.record_type_id = 2)\n
                  LEFT JOIN civicrm_contact source_contact ON (source_activity.contact_id = source_contact.id)  WHERE  ( civicrm_activity.activity_type_id IN ("55") AND civicrm_activity.is_test = 0 )  AND  (  ( civicrm_activity.activity_type_id IN (1,2,3,4,5,6,7,8,9,10,11,12,17,19,22,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,54,55,56,57,58,59,60,61,62,63,64,65,66,67) )  )  AND ( 1 ) AND (contact_a.is_deleted = 0) AND (civicrm_activity.activity_type_id Array)     [nativecode=1064 ** You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'Array)' at line 8]
        """

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.