Plugin List Execute | |
Introduced in Tiki11, the LISTEXECUTE plugin is an extensible plugin allowing administrators to set-up listings and custom actions that can be executed on objects, allowing to support complex workflows and perform some level of automation. The LISTEXECUTE plugin uses the Search and List from Unified Index to extract lists of objects. All filters available in PluginList can also be used with LISTEXECUTE. Results are presented as a list with checkboxes for each row. Actions can be performed on selected objects. Sample usage {LISTEXECUTE()} {filter type="trackeritem"} {filter content="p" field="tracker_status"} {ACTION(name="Expire Issue" group="Triage Team")} {step action="change_status" from="p" to="c"} {step action="email" subject="Issue closed" content_field="email_content" to_field="tracker_field_senderEmail"} {ACTION} {FORMAT(name="email_content")} Hello, We are sorry to announce that we have closed issue #{display name="object_id"} automatically. Summary: {display name="tracker_field_summary"} The issue has been pending additional information for too long. Feel free to answer pending questions and re-open it. -- Acme Software Team {FORMAT} {LISTEXECUTE}
In the example, the Sample usage: custom subject {ACTION(name="Expire Issue" group="Triage Team")} {step action="change_status" from="p" to="c"} {step action="email" subject_field="subject_content" content_field="email_content" to_field="tracker_field_senderEmail"} {ACTION} {FORMAT(name="subject_content")} Summary: {display name="tracker_field_summary"} {FORMAT}
|
Actions | |
Fields with a
|
| |
Applies to tracker items. Allows to change the status from one state to an other.
|
| ||||||||
Removes the object from Tiki.
Sample usage: delete {LISTEXECUTE()} {filter type="trackeritem"} {filter field="tracker_id" content="4"} {filter content="c" field="tracker_status"} {OUTPUT(template="table")} {column label="First Name" field="contactFirstName"} {column label="Last Name" field="contactLastName"} {OUTPUT} {FORMAT(name="contactFirstName")}{display name="tracker_field_contactFirstName" default=" " }{FORMAT} {FORMAT(name="contactLastName")}{display name="tracker_field_contactLastName" default=" "}{FORMAT} {ACTION(name="Delete closed items" group="Registered")} {step action="delete"} {ACTION} {LISTEXECUTE}
|
| |
Sends an email to the specified recipient.
Optional fields:
tracker_field_email_text instead of tracker_field_email
|
| |
Added in Tiki17. Overlays some text on top of jpeg images attached to a tracker item which are stored in a file gallery.
# Ubuntu/Debian sudo apt-get install imagemagick php-imagick sudo service apache2 restart # ClearOS/CentOS (install as root) yum install ImageMagick yum install [--enablerepo=remi] php-pecl-imagick service httpd restart
%file_name% %file_id% %parts_filename% %parts_extension% %gallery_name% %gallery_id% %tracker_id% %item_id% %field_id% %field_perm_name% %field_name% %exif_date% %exif_gps% %exif_gps_lat% %exif_gps_lon% %exif_gps_dms% %exif_gps_dms_lat% %exif_gps_dms_lon%
{step action="filegal_image_overlay" field="_2PhotoAttachments" value="%exif_date% - %exif_gps%"}
|
| |
Added in Tiki17. Renames files attached to a tracker item which are stored in a file gallery.
%file_name% %file_id% %parts_filename% %parts_extension% %gallery_name% %gallery_id% %tracker_id% %item_id% %field_id% %field_perm_name% %field_name%
{step action="filegal_change_filename" field="_2PhotoAttachments" value="%item_id%-%file_id%-%file_name%" in_place="y"}
File and EmailEmailing a link to the file is not currently possible via ItemsList field and it may be not advised (due to security and anti-spam consideration). Instead, you can insert a link to the file with the "&display" parameter to display an image or without to initiate a download (if required user must be logged), something like this to the email content: http://your-tiki-site/tiki-download_file.php?fileId={display name="tracker_field_picture"}&display
Dynamic Link in the EmailThanks to Wiki Argument Variables it is possible to include a link to a page to display part of the information related to the object_id or any wiki dynamic variable you set and that will display filtered tracker item information. It can also inforce security or add validation options (page to display the data may require login and it can be tracked) IE: You want to display a member ID card that include text (name, adresse and a photo).
|
| |
Added in Tiki23: http://sourceforge.net/p/tikiwiki/code/78296 |
| |
Added in Tiki22 New action tracker_item_clone has been added.
The function was enhanced to allow emptying fields and to set a field with default value (like a date field) Cloning tracker item and resetting selected fields
Duplicate an item, change status, reset productsboughtDate to today (default) and reset the values of 3 fields using calculations and empty value {ACTION(name="Duplicate to date and reset fields")} {step action="tracker_item_clone"} {step action="change_status" from="o" to="p"} {step action="tracker_item_modify" field="productsboughtEmailSent" calc="(str n)"} {step action="tracker_item_modify" field="productsboughtSMSSent" calc="(str n)"} {step action="tracker_item_modify" field="productsboughtPaymentId" value=" "} {step action="tracker_item_modify" field="productsboughtDate"} {ACTION}
|
| |
Modifies a single field out of a tracker item. Performance and field checking To preserve performance and usability the previous and nature of the fields are not continuously checked. When you add a value using this method it is added as hardcoded string without checking the parameters and options of the existing field.
{step action="tracker_item_modify" field="TimeSheetVisibleTo" method="remove"}
{step action="tracker_item_modify" field="TimeSheetVisibleTo" method="add"}
{step action="tracker_item_modify" field="TimeSheetVisibleTo" value="Bernard"}
{step action="tracker_item_modify" field="TimeSheetVisibleTo" add="jonny"} {step action="tracker_item_modify" field="TimeSheetVisibleTo" remove="luci"}
|
| |
Added in Tiki24. This allow to assign (add) or unassigned (remove) a user. You can specify param user="some_user" or use user_field="tracker_field_perm_name" to get the user from the tracker field (user selector) of the item you execute the action against. Note that UserSelector tracker field can hold multiple users, so the action will be executed on all of the stored users in that item. The same permissions are enforced as the other places in the Tiki changing user groups - current user (the one logged when executing the action) should have permission to group_add_member or group_remove_member OR user should have permission to join group of the target group. The table template (templates/search/list/table.tpl) has been updated to insert manually a value for a group. Assign or unassign a user to/from a group that you can enter in the list execute interface.The field tracker_field_userid point to a user selector. Assign user to a group {ACTION(name="Assign user to group" group="Registered")} {step action="user_group_modify" user_field="tracker_field_userid" operation="add"} {ACTION}
un-assign user to a group {ACTION(name="Unassign user from group" group="Registered")} {step action="user_group_modify" user_field="tracker_field_userid" operation="remove"} {ACTION}
Assign or un-assign a user to/from a specific groupThe field tracker_field_userid point to a user selector. Assign user to the group Legal {ACTION(name="Assign user to group" group="Registered")} {step action="user_group_modify" user_field="tracker_field_userid" add="Legal"} {ACTION}
Assign user to the group Legal {ACTION(name="Unassign user from group" group="Registered")} {step action="user_group_modify" user_field="tracker_field_userid" remove="Legal"} {ACTION}
|
| |
Marks the page as approved.
|
Batch processing | |
You may want to use this plugin to automate jobs on your site. To do so, you can use the command line cURL tool to post a request to the page. Or since Tiki17, the action can be run through console.php avoiding to use http authentication and the credentials in clear in the command line. Before Tiki17: curl "http://example.com/YourActionPage" --form "list_action=ActionName" --form "objects~0=ALL"
curl -u myusername:mypassword "http://example.com/YourActionPage" --form "list_action=ActionName" --form "objects~0=ALL"
php console.php list:execute "Page Name" "Action Name"
[root@server]# php console.php list:execute "Batch Sync Users" "SyncUsersTrackers" Command not available at this stage. Complete required installation steps. [root@server]#
[root@server]# php console.php d:u
|
Automatisation using Tiki Scheduler | |
Note if you use the url parameter you have to use a shell command and curl; curl -u admin:12345 "http://example.com/tiki-index_raw.php?page=Expiration-Notification&alert=1&days=30" --form "list_action=Alert" --form "objects~0=ALL"
php console.php list:execute "listexecute profile test" Alert --request="days=30&alert=1"
HTTP_HOST=domain.com php console.php list:execute WikiPage ActionName
|
Output | |
Since Tiki16 (backported to Tiki 15.3 ) you can use the same syntax to define columns, output, alternative results, etc, as it's possible with PluginList to customize the columns you want to display for each record shown. You can see and play with a working example by means of applying the profile Execute on List. |
See also | |
|
Some examples | |
Modify the value of a tracker fieldIn this case we set the value of the dropdown tracker field "paymentsStage" from anything it was (empty or a different value) to "Completed". As per Tiki23, note that this is hardcoded string, meaning that even if the value doesn't exist in the dropdown options it will be set as is. {step action="tracker_item_modify" field="paymentsStage" value="Completed"}
Display a list base on expiry date, with mass action to send an email
In the listExecute plugin we list all the contract where "endDate" is in the date range we want (30 days from now) and where the field "alert1Sent" is not equal to "y". The output give us a display of the results. This to test and monitor that all work ok or to manually select items on which the action will be applied. In the format we add the listExecute action and steps. Step 1 will set the "alert1Sent" flag to "y" (so the item will be move away from list and the email won't be sent each time action is initiate). Step 2 will send an email with a proper subject and body (set below) to "alertTo" destination mail. Note: I tried to add a variable in the subject like the "contractTitle" or "objectId" but it is not working.
{LISTEXECUTE()} {filter field="tracker_id" content="4"} {filter type="trackeritem"} {filter range="tracker_field_endDate" from="now" gap="2592000"} {filter field="tracker_field_alert1Sent" content="NOT y"} {sort mode="tracker_field_endDate_asc"} {OUTPUT(template="table")} {column label="Contract Title" field="contract_title" mode="raw"} {column label="Contract Expiration" field="contract_exp"} {column label="To" field="email_to"} {OUTPUT} {FORMAT(name="contract_title")}{display name="tracker_field_contractTitle" format="objectlink"}{FORMAT} {FORMAT(name="contract_exp")}{display name="tracker_field_endDate" format="date" default=""}{FORMAT} {FORMAT(name="email_to")}{display name="tracker_field_alertTo" default=""}{FORMAT} {ACTION(name="Alert 1")} {step action="tracker_item_modify" field="alert1Sent" value="y"} {step action="email" subject="Contract expiration alert" content_field="email_content" to_field="tracker_field_alertTo"} {ACTION} {FORMAT(name="email_content")} Hello, This is an automatic email from the Tiki Contract Management system. The contract {display name="tracker_field_contractTitle"} will expire in 30 days from now. You can check the item at: http://example.org/tiki-view_tracker_item.php?itemId={display name="object_id"} -- Signature {FORMAT} {LISTEXECUTE}
Using a cronjob to automatise the alert email process
curl -u admin:adminpassword "http://example.org/YourActionPage" --form "list_action=ActionName" --form "objects~0=ALL"
List of all tickets, with mass action to re-open{LISTEXECUTE()} {filter content="4532 4512 2919" field="object_id"} {filter type="trackeritem"} {ACTION(name="Re-open")} {step action="change_status" from="c" to="o"} {ACTION} {LISTEXECUTE}
Display open items with empty date + set current timestamp or change category + change statusThe syntax below for filtering on empty fields (exact="") assumes you are using MYSQL as unified search index engine. {LISTEXECUTE()} {pagination max=25} {filter type="trackeritem"} {filter content="6" field="tracker_id"} {filter content="o" field="tracker_status"} {filter field="tracker_field_trAppMyApprovalDate" exact=""} {ACTION(name="Add my pre-approval + change tracker item status from Open to Pending" group="Registered")} {step action="tracker_item_modify" field="trAppMyApprovalDate" calc="(date)"} {step action="change_status" from="o" to="p"} {ACTION} {ACTION(name="Set ApprovalStatus as Denied + change tracker item status from Open to Closed" group="Registered")} {step action="tracker_item_modify" field="trAppApprovalStatus" value="4"} {step action="change_status" from="o" to="c"} {ACTION} {LISTEXECUTE}
Display custom columns with table sorter and inline editionExample taken from the profile Execute on List. Display custom columns with table sorter and inline edition {LISTEXECUTE()} {filter type="trackeritem"} {filter content="1" field="tracker_id"} {filter content="o OR p" field="tracker_status"} {filter content="NOT " field="tracker_field_trAppApprovalDate"} {sort mode="tracker_field_trAppID_asc"} {OUTPUT(template="table")} {column field="trAppID" label="ID" mode="raw"} {column field="trAppEmail" label="Email" mode="raw"} {column field="trAppFullName" label="Full Name" mode="raw"} {column field="trAppGCPreApprovalDate" label="GC Pre-approval" mode="raw"} {column field="trAppCEOPreApprovalDate" label="CEO Pre-approval" mode="raw"} {column field="trAppYouCanTradeUntil" label="You can trade until" mode="raw"} {column field="trAppApprovalDate" label="Approval date" mode="raw"} {column field="trAppApprovalStatus" label="Approval status" mode="raw"} {tablesorter server="n" sortable="y" tsfilters="type:nofilter|type:nofilter|type:text|type:text|type:date;format:yy-mm-dd|type:date;format:yy-mm-dd|type:date;format:yy-mm-dd|type:date;format:yy-mm-dd|type:dropdown" tscolselect="critical|critical|4|6|6|2|6|5"} {OUTPUT} {FORMAT(name="trAppID")}{display name="tracker_field_trAppID" format="objectlink" default=""}{FORMAT} {FORMAT(name="trAppEmail")}{display name="tracker_field_trAppEmail" default=""}{FORMAT} {FORMAT(name="trAppFullName")}{display name="tracker_field_trAppFullName" default=""}{FORMAT} {FORMAT(name="trAppGCPreApprovalDate")}{display name="tracker_field_trAppGCPreApprovalDate" format="datetime" default=""}{FORMAT} {FORMAT(name="trAppCEOPreApprovalDate")}{display name="tracker_field_trAppCEOPreApprovalDate" format="datetime" default=""}{FORMAT} {FORMAT(name="trAppYouCanTradeUntil")}{display name="tracker_field_trAppYouCanTradeUntil" format="datetime" default=""}{FORMAT} {FORMAT(name="trAppApprovalDate")}{display name="tracker_field_trAppApprovalDate" format="datetime" default=""}{FORMAT} {FORMAT(name="trAppApprovalStatus")}{display name="tracker_field_trAppApprovalStatus" format="trackerrender" default=""}{FORMAT} {ALTERNATE()}{TR()}There are no requests pending your processing.{TR}{ALTERNATE} {ACTION(name="Set as APPROVED + send email + close item status" group="Registered")} {step action="tracker_item_modify" field="trAppApprovalStatus" value="2"} {step action="change_status" from="p" to="c"} {step action="email" subject="Request Approved" content_field="email_content_approved" to_field="tracker_field_trAppEmail"} {step action="email" subject="Request Approved" content_field="email_content_cs_approved" to="info@example.com"} {ACTION} {ACTION(name="Set as DENIED + send email + close item from pending status" group="Registered")} {step action="tracker_item_modify" field="trAppApprovalStatus" value="3"} {step action="change_status" from="p" to="c"} {step action="email" subject="Request Denied" content_field="email_content_denied" to_field="tracker_field_trAppEmail"} {ACTION} {ACTION(name="Set as DENIED + send email + close item from open status" group="Registered")} {step action="tracker_item_modify" field="trAppApprovalStatus" value="3"} {step action="change_status" from="o" to="c"} {step action="email" subject="Request Denied" content_field="email_content_denied" to_field="tracker_field_trAppEmail"} {ACTION} {FORMAT(name="email_content_approved")} Dear {display name="tracker_field_trAppFullName" format="trackerrender"} Your request (internal Id #{display name="tracker_field_trAppID"}, submitted on {display name="creation_date" format="datetime"}) has been approved. Yours sincerely, -- ACME Ltd. Platform to Request XXX http://example.com {FORMAT} {FORMAT(name="email_content_denied")} Dear {display name="tracker_field_trAppFullName" format="trackerrender"} Your request submitted on {display name="creation_date" format="datetime"} is not approved. Please contact acme@example.com for more information. Yours sincerely, -- ACME Ltd. Platform to Request XXX http://example.com {FORMAT} {FORMAT(name="email_content_cs_approved")} Dear Management Department, Please find below details from a person who has been approved a request in ACME Ltd.: {FANCYTABLE(head="Name of Employee (Employee ID) | Request Date | Approval Date | Last Exercise Date")} {display name="tracker_field_trAppFullName" format="trackerrender"} | {display name="creation_date" format="date"} | {display name="tracker_field_trAppApprovalDate" format="date" default=""} | {display name="tracker_field_trAppYouCanTradeUntil" format="datetime" default=""} {FANCYTABLE} ''Please note that Last Window Open Date is {display name="tracker_field_trAppTradingPeriodEndDate" format="raw" default=""}'' If you have any questions, please contact acme@example.com . Yours sincerely, -- ACME Ltd. Platform to Request XXX http://example.com {FORMAT} {LISTEXECUTE}
|
Related pages | |