aboutsummaryrefslogtreecommitdiff
path: root/bridges/TrelloBridge.php
diff options
context:
space:
mode:
Diffstat (limited to 'bridges/TrelloBridge.php')
-rw-r--r--bridges/TrelloBridge.php1348
1 files changed, 681 insertions, 667 deletions
diff --git a/bridges/TrelloBridge.php b/bridges/TrelloBridge.php
index 5cf69050..ea7eb71b 100644
--- a/bridges/TrelloBridge.php
+++ b/bridges/TrelloBridge.php
@@ -1,686 +1,700 @@
<?php
-class TrelloBridge extends BridgeAbstract {
- const NAME = 'Trello Bridge';
- const URI = 'https://trello.com/';
- const CACHE_TIMEOUT = 300; // 5min
- const DESCRIPTION = 'Returns activity on Trello boards or cards';
- const MAINTAINER = 'Roliga';
- const PARAMETERS = array(
- 'Board' => array(
- 'b' => array(
- 'name' => 'Board ID',
- 'required' => true,
- 'exampleValue' => 'g9mdhdzg',
- 'title' => 'Taken from Trello URL, e.g. trello.com/b/[Board ID]'
- )
- ),
- 'Card' => array(
- 'c' => array(
- 'name' => 'Card ID',
- 'required' => true,
- 'exampleValue' => '8vddc9pE',
- 'title' => 'Taken from Trello URL, e.g. trello.com/c/[Card ID]'
- )
- )
- );
- /*
- * This was extracted from webpack on a Trello page, e.g. trello.com/b/g9mdhdzg
- * In the browser's inspector/debugger go to the Debugger (Firefox) or
- * Sources (Chromium) tab, these values can be found at:
- * webpack:///resources/strings/actions/en.json
- */
- const ACTION_TEXTS = array(
- 'action_accept_enterprise_join_request'
- => '{memberCreator} added team {organization} to the enterprise {enterprise}',
- 'action_add_attachment_to_card'
- => '{memberCreator} attached {attachment} to {card} {attachmentPreview}',
- 'action_add_attachment_to_card@card'
- => '{memberCreator} attached {attachment} to this card {attachmentPreview}',
- 'action_add_checklist_to_card'
- => '{memberCreator} added {checklist} to {card}',
- 'action_add_checklist_to_card@card'
- => '{memberCreator} added {checklist} to this card',
- 'action_add_label_to_card'
- => '{memberCreator} added the {label} label to {card}',
- 'action_add_label_to_card@card'
- => '{memberCreator} added the {label} label to this card',
- 'action_add_organization_to_enterprise'
- => '{memberCreator} added team {organization} to the enterprise {enterprise}',
- 'action_add_to_organization_board'
- => '{memberCreator} added {board} to {organization}',
- 'action_add_to_organization_board@board'
- => '{memberCreator} added this board to {organization}',
- 'action_added_a_due_date'
- => '{memberCreator} set {card} to be due {date}',
- 'action_added_a_due_date@card'
- => '{memberCreator} set this card to be due {date}',
- 'action_added_list_to_board'
- => '{memberCreator} added list {list} to {board}',
- 'action_added_list_to_board@board'
- => '{memberCreator} added {list} to this board',
- 'action_added_member_to_board'
- => '{memberCreator} added {member} to {board}',
- 'action_added_member_to_board@board'
- => '{memberCreator} added {member} to this board',
- 'action_added_member_to_board_as_admin'
- => '{memberCreator} added {member} to {board} as an admin',
- 'action_added_member_to_board_as_admin@board'
- => '{memberCreator} added {member} to this board as an admin',
- 'action_added_member_to_board_as_observer'
- => '{memberCreator} added {member} to {board} as an observer',
- 'action_added_member_to_board_as_observer@board'
- => '{memberCreator} added {member} to this board as an observer',
- 'action_added_member_to_card'
- => '{memberCreator} added {member} to {card}',
- 'action_added_member_to_card@card'
- => '{memberCreator} added {member} to this card',
- 'action_added_member_to_organization'
- => '{memberCreator} added {member} to {organization}',
- 'action_added_member_to_organization_as_admin'
- => '{memberCreator} added {member} to {organization} as an admin',
- 'action_admins_visibility'
- => 'its admins',
- 'action_another_board'
- => 'another board',
- 'action_archived_card'
- => '{memberCreator} archived {card}',
- 'action_archived_card@card'
- => '{memberCreator} archived this card',
- 'action_archived_list'
- => '{memberCreator} archived list {list}',
- 'action_became_a_normal_user_in_organization'
- => '{memberCreator} became a normal user in {organization}',
- 'action_became_a_normal_user_on'
- => '{memberCreator} became a normal user on {board}',
- 'action_became_a_normal_user_on@board'
- => '{memberCreator} became a normal user on this board',
- 'action_became_an_admin_of_organization'
- => '{memberCreator} became an admin of {organization}',
- 'action_board_perm_level'
- => '{memberCreator} made {board} visible to {level}',
- 'action_board_perm_level@board'
- => '{memberCreator} made this board visible to {level}',
- 'action_calendar'
- => 'calendar',
- 'action_cardAging'
- => 'card aging',
- 'action_changed_a_due_date'
- => '{memberCreator} changed the due date of {card} to {date}',
- 'action_changed_a_due_date@card'
- => '{memberCreator} changed the due date of this card to {date}',
- 'action_changed_board_background'
- => '{memberCreator} changed the background of {board}',
- 'action_changed_board_background@board'
- => '{memberCreator} changed the background of this board',
- 'action_changed_description_of_card'
- => '{memberCreator} changed description of {card}',
- 'action_changed_description_of_card@card'
- => '{memberCreator} changed description of this card',
- 'action_changed_description_of_organization'
- => '{memberCreator} changed description of {organization}',
- 'action_changed_display_name_of_organization'
- => '{memberCreator} changed display name of {organization}',
- 'action_changed_name_of_organization'
- => '{memberCreator} changed name of {organization}',
- 'action_changed_website_of_organization'
- => '{memberCreator} changed website of {organization}',
- 'action_closed_board'
- => '{memberCreator} closed {board}',
- 'action_closed_board@board'
- => '{memberCreator} closed this board',
- 'action_comment_on_card'
- => '{memberCreator} {contextOn} {card} {comment}',
- 'action_comment_on_card@card'
- => '{memberCreator} {comment}',
- 'action_completed_checkitem'
- => '{memberCreator} completed {checkitem} on {card}',
- 'action_completed_checkitem@card'
- => '{memberCreator} completed {checkitem} on this card',
- 'action_convert_to_card_from_checkitem'
- => '{memberCreator} converted {card} from a checklist item on {cardSource}',
- 'action_convert_to_card_from_checkitem@card'
- => '{memberCreator} converted this card from a checklist item on {cardSource}',
- 'action_convert_to_card_from_checkitem@cardSource'
- => '{memberCreator} converted {card} from a checklist item on this card',
- 'action_copy_board'
- => '{memberCreator} copied this board from {board}',
- 'action_copy_card'
- => '{memberCreator} copied {card} from {cardSource} in list {list}',
- 'action_copy_card@card'
- => '{memberCreator} copied this card from {cardSource} in list {list}',
- 'action_copy_comment_from_card'
- => '{memberCreator} copied comment by {member} from card {card} {comment}',
- 'action_create_board'
- => '{memberCreator} created {board}',
- 'action_create_board@board'
- => '{memberCreator} created this board',
- 'action_create_card'
- => '{memberCreator} added {card} to {list}',
- 'action_create_card@card'
- => '{memberCreator} added this card to {list}',
- 'action_create_custom_field'
- => '{memberCreator} created the {customField} custom field on {board}',
- 'action_create_custom_field@board'
- => '{memberCreator} created the {customField} custom field on this board',
- 'action_create_enterprise_join_request'
- => '{memberCreator} requested to add team {organization} to the enterprise {enterprise}',
- 'action_created_an_invitation_to_board'
- => '{memberCreator} created an invitation to {board}',
- 'action_created_an_invitation_to_board@board'
- => '{memberCreator} created an invitation to this board',
- 'action_created_an_invitation_to_organization'
- => '{memberCreator} created an invitation to {organization}',
- 'action_created_checklist_on_board'
- => '{memberCreator} created {checklist} on {board}',
- 'action_created_checklist_on_board@board'
- => '{memberCreator} created {checklist} on this board',
- 'action_created_organization'
- => '{memberCreator} created {organization}',
- 'action_decline_enterprise_join_request'
- => '{memberCreator} declined the request to add team {organization} to the enterprise {enterprise}',
- 'action_delete_attachment_from_card'
- => '{memberCreator} deleted the {attachment} attachment from {card}',
- 'action_delete_attachment_from_card@card'
- => '{memberCreator} deleted the {attachment} attachment from this card',
- 'action_delete_card'
- => '{memberCreator} deleted card #{idCard} from {list}',
- 'action_delete_custom_field'
- => '{memberCreator} deleted the {customField} custom field from {board}',
- 'action_delete_custom_field@board'
- => '{memberCreator} deleted the {customField} custom field from this board',
- 'action_deleted_account'
- => '[deleted account]',
- 'action_deleted_an_invitation_to_board'
- => '{memberCreator} deleted an invitation to {board}',
- 'action_deleted_an_invitation_to_board@board'
- => '{memberCreator} deleted an invitation to this board',
- 'action_deleted_an_invitation_to_organization'
- => '{memberCreator} deleted an invitation to {organization}',
- 'action_deleted_checkitem'
- => '{memberCreator} deleted task {checkitem} on {checklist}',
- 'action_disabled_calendar_feed'
- => '{memberCreator} disabled the iCalendar feed on {board}',
- 'action_disabled_calendar_feed@board'
- => '{memberCreator} disabled the iCalendar feed on this board',
- 'action_disabled_card_covers'
- => '{memberCreator} disabled card cover images on {board}',
- 'action_disabled_card_covers@board'
- => '{memberCreator} disabled card cover images on this board',
- 'action_disabled_commenting'
- => '{memberCreator} disabled commenting on {board}',
- 'action_disabled_commenting@board'
- => '{memberCreator} disabled commenting on this board',
- 'action_disabled_inviting'
- => '{memberCreator} disabled inviting on {board}',
- 'action_disabled_inviting@board'
- => '{memberCreator} disabled inviting on this board',
- 'action_disabled_plugin'
- => '{memberCreator} disabled the {plugin} Power-Up',
- 'action_disabled_powerup'
- => '{memberCreator} disabled the {powerup} Power-Up',
- 'action_disabled_self_join'
- => '{memberCreator} disabled self join on {board}',
- 'action_disabled_self_join@board'
- => '{memberCreator} disabled self join on this board',
- 'action_disabled_voting'
- => '{memberCreator} disabled voting on {board}',
- 'action_disabled_voting@board'
- => '{memberCreator} disabled voting on this board',
- 'action_due_date_change'
- => '{memberCreator}',
- 'action_email_card'
- => '{memberCreator} emailed {card} to {list}',
- 'action_email_card@card'
- => '{memberCreator} emailed this card to {list}',
- 'action_email_card_from'
- => '{memberCreator} emailed {card} to {list} from {from}',
- 'action_email_card_from@card'
- => '{memberCreator} emailed this card to {list} from {from}',
- 'action_enabled_calendar_feed'
- => '{memberCreator} enabled the iCalendar feed on {board}',
- 'action_enabled_calendar_feed@board'
- => '{memberCreator} enabled the iCalendar feed on this board',
- 'action_enabled_card_covers'
- => '{memberCreator} enabled card cover images on {board}',
- 'action_enabled_card_covers@board'
- => '{memberCreator} enabled card cover images on this board',
- 'action_enabled_plugin'
- => '{memberCreator} enabled the {plugin} Power-Up',
- 'action_enabled_powerup'
- => '{memberCreator} enabled the {powerup} Power-Up',
- 'action_enabled_self_join'
- => '{memberCreator} enabled self join on {board}',
- 'action_enabled_self_join@board'
- => '{memberCreator} enabled self join on this board',
- 'action_hid_board'
- => '{memberCreator} hid {board}',
- 'action_hid_board@board'
- => '{memberCreator} hid this board',
- 'action_invited_an_unconfirmed_member_to_board'
- => '{memberCreator} invited an unconfirmed member to {board}',
- 'action_invited_an_unconfirmed_member_to_board@board'
- => '{memberCreator} invited an unconfirmed member to this board',
- 'action_invited_an_unconfirmed_member_to_organization'
- => '{memberCreator} invited an unconfirmed member to {organization}',
- 'action_joined_board'
- => '{memberCreator} joined {board}',
- 'action_joined_board@board'
- => '{memberCreator} joined this board',
- 'action_joined_board_by_invitation_link'
- => '{memberCreator} joined {board} with an invitation link from {memberInviter}',
- 'action_joined_board_by_invitation_link@board'
- => '{memberCreator} joined this board with an invitation link from {memberInviter}',
- 'action_joined_organization'
- => '{memberCreator} joined {organization}',
- 'action_joined_organization_by_invitation_link'
- => '{memberCreator} joined {organization} with an invitation link from {memberInviter}',
- 'action_left_board'
- => '{memberCreator} left {board}',
- 'action_left_board@board'
- => '{memberCreator} left this board',
- 'action_left_organization'
- => '{memberCreator} left {organization}',
- 'action_made_a_normal_user_in_organization'
- => '{memberCreator} made {member} a normal user in {organization}',
- 'action_made_a_normal_user_on'
- => '{memberCreator} made {member} a normal user on {board}',
- 'action_made_a_normal_user_on@board'
- => '{memberCreator} made {member} a normal user on this board',
- 'action_made_admin_of_board'
- => '{memberCreator} made {member} an admin of {board}',
- 'action_made_admin_of_board@board'
- => '{memberCreator} made {member} an admin of this board',
- 'action_made_an_admin_of_organization'
- => '{memberCreator} made {member} an admin of {organization}',
- 'action_made_commenting_on'
- => '{memberCreator} made commenting on {board} available to {level}',
- 'action_made_commenting_on@board'
- => '{memberCreator} made commenting on this board available to {level}',
- 'action_made_inviting_on'
- => '{memberCreator} made inviting on {board} available to {level}',
- 'action_made_inviting_on@board'
- => '{memberCreator} made inviting on this board available to {level}',
- 'action_made_observer_of_board'
- => '{memberCreator} made {member} an observer of {board}',
- 'action_made_observer_of_board@board'
- => '{memberCreator} made {member} an observer of this board',
- 'action_made_self_admin_of_board'
- => '{memberCreator} made themselves an admin of {board}',
- 'action_made_self_admin_of_board@board'
- => '{memberCreator} made themselves an admin of this board',
- 'action_made_self_observer_of_board'
- => '{memberCreator} became an observer of {board}',
- 'action_made_self_observer_of_board@board'
- => '{memberCreator} became an observer of this board',
- 'action_made_voting_on'
- => '{memberCreator} made voting on {board} available to {level}',
- 'action_made_voting_on@board'
- => '{memberCreator} made voting on this board available to {level}',
- 'action_marked_checkitem_incomplete'
- => '{memberCreator} marked {checkitem} incomplete on {card}',
- 'action_marked_checkitem_incomplete@card'
- => '{memberCreator} marked {checkitem} incomplete on this card',
- 'action_marked_the_due_date_complete'
- => '{memberCreator} marked the due date on {card} complete',
- 'action_marked_the_due_date_complete@card'
- => '{memberCreator} marked the due date complete',
- 'action_marked_the_due_date_incomplete'
- => '{memberCreator} marked the due date on {card} incomplete',
- 'action_marked_the_due_date_incomplete@card'
- => '{memberCreator} marked the due date incomplete',
- 'action_member_joined_card'
- => '{memberCreator} joined {card}',
- 'action_member_joined_card@card'
- => '{memberCreator} joined this card',
- 'action_member_left_card'
- => '{memberCreator} left {card}',
- 'action_member_left_card@card'
- => '{memberCreator} left this card',
- 'action_members_visibility'
- => 'its members',
- 'action_move_card_from_board'
- => '{memberCreator} transferred {card} to {board}',
- 'action_move_card_from_board@card'
- => '{memberCreator} transferred this card to {board}',
- 'action_move_card_from_list_to_list'
- => '{memberCreator} moved {card} from {listBefore} to {listAfter}',
- 'action_move_card_from_list_to_list@card'
- => '{memberCreator} moved this card from {listBefore} to {listAfter}',
- 'action_move_card_to_board'
- => '{memberCreator} transferred {card} from {board}',
- 'action_move_card_to_board@card'
- => '{memberCreator} transferred this card from {board}',
- 'action_move_list_from_board'
- => '{memberCreator} transferred {list} to {board}',
- 'action_move_list_to_board'
- => '{memberCreator} transferred {list} from {board}',
- 'action_moved_card_higher'
- => '{memberCreator} moved {card} higher',
- 'action_moved_card_higher@card'
- => '{memberCreator} moved this card higher',
- 'action_moved_card_lower'
- => '{memberCreator} moved {card} lower',
- 'action_moved_card_lower@card'
- => '{memberCreator} moved this card lower',
- 'action_moved_checkitem_higher'
- => '{memberCreator} moved {checkitem} higher in the checklist {checklist}',
- 'action_moved_checkitem_lower'
- => '{memberCreator} moved {checkitem} higher in the checklist {checklist}',
- 'action_moved_list_left'
- => '{memberCreator} moved list {list} left on {board}',
- 'action_moved_list_left@board'
- => '{memberCreator} moved {list} left on this board',
- 'action_moved_list_right'
- => '{memberCreator} moved list {list} right on {board}',
- 'action_moved_list_right@board'
- => '{memberCreator} moved {list} right on this board',
- 'action_observers_visibility'
- => 'members and observers',
- 'action_on'
- => 'on',
- 'action_org_visibility'
- => 'members of its team',
- 'action_public_visibility'
- => 'the public',
- 'action_remove_checklist_from_card'
- => '{memberCreator} removed {checklist} from {card}',
- 'action_remove_checklist_from_card@card'
- => '{memberCreator} removed {checklist} from this card',
- 'action_remove_from_organization_board'
- => '{memberCreator} removed {board} from {organization}',
- 'action_remove_from_organization_board@board'
- => '{memberCreator} removed this board from {organization}',
- 'action_remove_label_from_card'
- => '{memberCreator} removed the {label} label from {card}',
- 'action_remove_label_from_card@card'
- => '{memberCreator} removed the {label} label from this card',
- 'action_remove_organization_from_enterprise'
- => '{memberCreator} removed team {organization} from the enterprise {enterprise}',
- 'action_removed_a_due_date'
- => '{memberCreator} removed the due date from {card}',
- 'action_removed_a_due_date@card'
- => '{memberCreator} removed the due date from this card',
- 'action_removed_from_board'
- => '{memberCreator} removed {member} from {board}',
- 'action_removed_from_board@board'
- => '{memberCreator} removed {member} from this board',
- 'action_removed_member_from_card'
- => '{memberCreator} removed {member} from {card}',
- 'action_removed_member_from_card@card'
- => '{memberCreator} removed {member} from this card',
- 'action_removed_member_from_organization'
- => '{memberCreator} removed {member} from {organization}',
- 'action_removed_vote_for_card'
- => '{memberCreator} removed vote for {card}',
- 'action_removed_vote_for_card@card'
- => '{memberCreator} removed vote for this card',
- 'action_rename_custom_field'
- => '{memberCreator} renamed the {customField} custom field on {board} (from {name})',
- 'action_rename_custom_field@board'
- => '{memberCreator} renamed the {customField} custom field on this board (from {name})',
- 'action_renamed_card'
- => '{memberCreator} renamed {card} (from {name})',
- 'action_renamed_card@card'
- => '{memberCreator} renamed this card (from {name})',
- 'action_renamed_checkitem'
- => '{memberCreator} renamed {checkitem} (from {name})',
- 'action_renamed_checklist'
- => '{memberCreator} renamed {checklist} (from {name})',
- 'action_renamed_list'
- => '{memberCreator} renamed list {list} (from {name})',
- 'action_reopened_board'
- => '{memberCreator} re-opened {board}',
- 'action_reopened_board@board'
- => '{memberCreator} re-opened this board',
- 'action_sent_card_to_board'
- => '{memberCreator} sent {card} to the board',
- 'action_sent_card_to_board@card'
- => '{memberCreator} sent this card to the board',
- 'action_sent_list_to_board'
- => '{memberCreator} sent list {list} to the board',
- 'action_set_card_aging_mode_pirate'
- => '{memberCreator} changed card aging to pirate mode',
- 'action_set_card_aging_mode_regular'
- => '{memberCreator} changed card aging to regular mode',
- 'action_update_board_desc'
- => '{memberCreator} changed description of {board}',
- 'action_update_board_desc@board'
- => '{memberCreator} changed description of this board',
- 'action_update_board_name'
- => '{memberCreator} renamed {board} (from {name})',
- 'action_update_board_name@board'
- => '{memberCreator} renamed this board (from {name})',
- 'action_update_custom_field'
- => '{memberCreator} updated the {customField} custom field on {board}',
- 'action_update_custom_field@board'
- => '{memberCreator} updated the {customField} custom field on this board',
- 'action_update_custom_field_item'
- => '{memberCreator} updated the value for the {customFieldItem} custom field on {card}',
- 'action_update_custom_field_item@card'
- => '{memberCreator} updated the value for the {customFieldItem} custom field on this card',
- 'action_updated_their_bio'
- => '{memberCreator} updated their bio',
- 'action_updated_their_display_name'
- => '{memberCreator} updated their display name',
- 'action_updated_their_initials'
- => '{memberCreator} updated their initials',
- 'action_updated_their_username'
- => '{memberCreator} updated their username',
- 'action_vote_on_card'
- => '{memberCreator} voted for {card}',
- 'action_vote_on_card@card'
- => '{memberCreator} voted for this card',
- 'action_voting'
- => 'voting',
- 'action_withdraw_enterprise_join_request'
- => '{memberCreator} withdrew a request to add team {organization} to the enterprise {enterprise}'
- );
+class TrelloBridge extends BridgeAbstract
+{
+ const NAME = 'Trello Bridge';
+ const URI = 'https://trello.com/';
+ const CACHE_TIMEOUT = 300; // 5min
+ const DESCRIPTION = 'Returns activity on Trello boards or cards';
+ const MAINTAINER = 'Roliga';
+ const PARAMETERS = [
+ 'Board' => [
+ 'b' => [
+ 'name' => 'Board ID',
+ 'required' => true,
+ 'exampleValue' => 'g9mdhdzg',
+ 'title' => 'Taken from Trello URL, e.g. trello.com/b/[Board ID]'
+ ]
+ ],
+ 'Card' => [
+ 'c' => [
+ 'name' => 'Card ID',
+ 'required' => true,
+ 'exampleValue' => '8vddc9pE',
+ 'title' => 'Taken from Trello URL, e.g. trello.com/c/[Card ID]'
+ ]
+ ]
+ ];
- const REQUEST_ACTIONS_BOARDS = array(
- 'addAttachmentToCard',
- 'addChecklistToCard',
- 'addMemberToCard',
- 'commentCard',
- 'copyCommentCard',
- 'convertToCardFromCheckItem',
- 'createCard',
- 'copyCard',
- 'deleteAttachmentFromCard',
- 'emailCard',
- 'moveCardFromBoard',
- 'moveCardToBoard',
- 'removeChecklistFromCard',
- 'removeMemberFromCard',
- 'updateCard:idList',
- 'updateCard:closed',
- 'updateCard:due',
- 'updateCard:dueComplete',
- 'updateCheckItemStateOnCard',
- 'updateCustomFieldItem',
- 'addMemberToBoard',
- 'addToOrganizationBoard',
- 'copyBoard',
- 'createBoard',
- 'createCustomField',
- 'createList',
- 'deleteCard',
- 'deleteCustomField',
- 'disablePlugin',
- 'disablePowerUp',
- 'enablePlugin',
- 'enablePowerUp',
- 'makeAdminOfBoard',
- 'makeNormalMemberOfBoard',
- 'makeObserverOfBoard',
- 'moveListFromBoard',
- 'moveListToBoard',
- 'removeFromOrganizationBoard',
- 'unconfirmedBoardInvitation',
- 'unconfirmedOrganizationInvitation',
- 'updateBoard',
- 'updateCustomField',
- 'updateList:closed'
- );
+ /*
+ * This was extracted from webpack on a Trello page, e.g. trello.com/b/g9mdhdzg
+ * In the browser's inspector/debugger go to the Debugger (Firefox) or
+ * Sources (Chromium) tab, these values can be found at:
+ * webpack:///resources/strings/actions/en.json
+ */
+ const ACTION_TEXTS = [
+ 'action_accept_enterprise_join_request'
+ => '{memberCreator} added team {organization} to the enterprise {enterprise}',
+ 'action_add_attachment_to_card'
+ => '{memberCreator} attached {attachment} to {card} {attachmentPreview}',
+ 'action_add_attachment_to_card@card'
+ => '{memberCreator} attached {attachment} to this card {attachmentPreview}',
+ 'action_add_checklist_to_card'
+ => '{memberCreator} added {checklist} to {card}',
+ 'action_add_checklist_to_card@card'
+ => '{memberCreator} added {checklist} to this card',
+ 'action_add_label_to_card'
+ => '{memberCreator} added the {label} label to {card}',
+ 'action_add_label_to_card@card'
+ => '{memberCreator} added the {label} label to this card',
+ 'action_add_organization_to_enterprise'
+ => '{memberCreator} added team {organization} to the enterprise {enterprise}',
+ 'action_add_to_organization_board'
+ => '{memberCreator} added {board} to {organization}',
+ 'action_add_to_organization_board@board'
+ => '{memberCreator} added this board to {organization}',
+ 'action_added_a_due_date'
+ => '{memberCreator} set {card} to be due {date}',
+ 'action_added_a_due_date@card'
+ => '{memberCreator} set this card to be due {date}',
+ 'action_added_list_to_board'
+ => '{memberCreator} added list {list} to {board}',
+ 'action_added_list_to_board@board'
+ => '{memberCreator} added {list} to this board',
+ 'action_added_member_to_board'
+ => '{memberCreator} added {member} to {board}',
+ 'action_added_member_to_board@board'
+ => '{memberCreator} added {member} to this board',
+ 'action_added_member_to_board_as_admin'
+ => '{memberCreator} added {member} to {board} as an admin',
+ 'action_added_member_to_board_as_admin@board'
+ => '{memberCreator} added {member} to this board as an admin',
+ 'action_added_member_to_board_as_observer'
+ => '{memberCreator} added {member} to {board} as an observer',
+ 'action_added_member_to_board_as_observer@board'
+ => '{memberCreator} added {member} to this board as an observer',
+ 'action_added_member_to_card'
+ => '{memberCreator} added {member} to {card}',
+ 'action_added_member_to_card@card'
+ => '{memberCreator} added {member} to this card',
+ 'action_added_member_to_organization'
+ => '{memberCreator} added {member} to {organization}',
+ 'action_added_member_to_organization_as_admin'
+ => '{memberCreator} added {member} to {organization} as an admin',
+ 'action_admins_visibility'
+ => 'its admins',
+ 'action_another_board'
+ => 'another board',
+ 'action_archived_card'
+ => '{memberCreator} archived {card}',
+ 'action_archived_card@card'
+ => '{memberCreator} archived this card',
+ 'action_archived_list'
+ => '{memberCreator} archived list {list}',
+ 'action_became_a_normal_user_in_organization'
+ => '{memberCreator} became a normal user in {organization}',
+ 'action_became_a_normal_user_on'
+ => '{memberCreator} became a normal user on {board}',
+ 'action_became_a_normal_user_on@board'
+ => '{memberCreator} became a normal user on this board',
+ 'action_became_an_admin_of_organization'
+ => '{memberCreator} became an admin of {organization}',
+ 'action_board_perm_level'
+ => '{memberCreator} made {board} visible to {level}',
+ 'action_board_perm_level@board'
+ => '{memberCreator} made this board visible to {level}',
+ 'action_calendar'
+ => 'calendar',
+ 'action_cardAging'
+ => 'card aging',
+ 'action_changed_a_due_date'
+ => '{memberCreator} changed the due date of {card} to {date}',
+ 'action_changed_a_due_date@card'
+ => '{memberCreator} changed the due date of this card to {date}',
+ 'action_changed_board_background'
+ => '{memberCreator} changed the background of {board}',
+ 'action_changed_board_background@board'
+ => '{memberCreator} changed the background of this board',
+ 'action_changed_description_of_card'
+ => '{memberCreator} changed description of {card}',
+ 'action_changed_description_of_card@card'
+ => '{memberCreator} changed description of this card',
+ 'action_changed_description_of_organization'
+ => '{memberCreator} changed description of {organization}',
+ 'action_changed_display_name_of_organization'
+ => '{memberCreator} changed display name of {organization}',
+ 'action_changed_name_of_organization'
+ => '{memberCreator} changed name of {organization}',
+ 'action_changed_website_of_organization'
+ => '{memberCreator} changed website of {organization}',
+ 'action_closed_board'
+ => '{memberCreator} closed {board}',
+ 'action_closed_board@board'
+ => '{memberCreator} closed this board',
+ 'action_comment_on_card'
+ => '{memberCreator} {contextOn} {card} {comment}',
+ 'action_comment_on_card@card'
+ => '{memberCreator} {comment}',
+ 'action_completed_checkitem'
+ => '{memberCreator} completed {checkitem} on {card}',
+ 'action_completed_checkitem@card'
+ => '{memberCreator} completed {checkitem} on this card',
+ 'action_convert_to_card_from_checkitem'
+ => '{memberCreator} converted {card} from a checklist item on {cardSource}',
+ 'action_convert_to_card_from_checkitem@card'
+ => '{memberCreator} converted this card from a checklist item on {cardSource}',
+ 'action_convert_to_card_from_checkitem@cardSource'
+ => '{memberCreator} converted {card} from a checklist item on this card',
+ 'action_copy_board'
+ => '{memberCreator} copied this board from {board}',
+ 'action_copy_card'
+ => '{memberCreator} copied {card} from {cardSource} in list {list}',
+ 'action_copy_card@card'
+ => '{memberCreator} copied this card from {cardSource} in list {list}',
+ 'action_copy_comment_from_card'
+ => '{memberCreator} copied comment by {member} from card {card} {comment}',
+ 'action_create_board'
+ => '{memberCreator} created {board}',
+ 'action_create_board@board'
+ => '{memberCreator} created this board',
+ 'action_create_card'
+ => '{memberCreator} added {card} to {list}',
+ 'action_create_card@card'
+ => '{memberCreator} added this card to {list}',
+ 'action_create_custom_field'
+ => '{memberCreator} created the {customField} custom field on {board}',
+ 'action_create_custom_field@board'
+ => '{memberCreator} created the {customField} custom field on this board',
+ 'action_create_enterprise_join_request'
+ => '{memberCreator} requested to add team {organization} to the enterprise {enterprise}',
+ 'action_created_an_invitation_to_board'
+ => '{memberCreator} created an invitation to {board}',
+ 'action_created_an_invitation_to_board@board'
+ => '{memberCreator} created an invitation to this board',
+ 'action_created_an_invitation_to_organization'
+ => '{memberCreator} created an invitation to {organization}',
+ 'action_created_checklist_on_board'
+ => '{memberCreator} created {checklist} on {board}',
+ 'action_created_checklist_on_board@board'
+ => '{memberCreator} created {checklist} on this board',
+ 'action_created_organization'
+ => '{memberCreator} created {organization}',
+ 'action_decline_enterprise_join_request'
+ => '{memberCreator} declined the request to add team {organization} to the enterprise {enterprise}',
+ 'action_delete_attachment_from_card'
+ => '{memberCreator} deleted the {attachment} attachment from {card}',
+ 'action_delete_attachment_from_card@card'
+ => '{memberCreator} deleted the {attachment} attachment from this card',
+ 'action_delete_card'
+ => '{memberCreator} deleted card #{idCard} from {list}',
+ 'action_delete_custom_field'
+ => '{memberCreator} deleted the {customField} custom field from {board}',
+ 'action_delete_custom_field@board'
+ => '{memberCreator} deleted the {customField} custom field from this board',
+ 'action_deleted_account'
+ => '[deleted account]',
+ 'action_deleted_an_invitation_to_board'
+ => '{memberCreator} deleted an invitation to {board}',
+ 'action_deleted_an_invitation_to_board@board'
+ => '{memberCreator} deleted an invitation to this board',
+ 'action_deleted_an_invitation_to_organization'
+ => '{memberCreator} deleted an invitation to {organization}',
+ 'action_deleted_checkitem'
+ => '{memberCreator} deleted task {checkitem} on {checklist}',
+ 'action_disabled_calendar_feed'
+ => '{memberCreator} disabled the iCalendar feed on {board}',
+ 'action_disabled_calendar_feed@board'
+ => '{memberCreator} disabled the iCalendar feed on this board',
+ 'action_disabled_card_covers'
+ => '{memberCreator} disabled card cover images on {board}',
+ 'action_disabled_card_covers@board'
+ => '{memberCreator} disabled card cover images on this board',
+ 'action_disabled_commenting'
+ => '{memberCreator} disabled commenting on {board}',
+ 'action_disabled_commenting@board'
+ => '{memberCreator} disabled commenting on this board',
+ 'action_disabled_inviting'
+ => '{memberCreator} disabled inviting on {board}',
+ 'action_disabled_inviting@board'
+ => '{memberCreator} disabled inviting on this board',
+ 'action_disabled_plugin'
+ => '{memberCreator} disabled the {plugin} Power-Up',
+ 'action_disabled_powerup'
+ => '{memberCreator} disabled the {powerup} Power-Up',
+ 'action_disabled_self_join'
+ => '{memberCreator} disabled self join on {board}',
+ 'action_disabled_self_join@board'
+ => '{memberCreator} disabled self join on this board',
+ 'action_disabled_voting'
+ => '{memberCreator} disabled voting on {board}',
+ 'action_disabled_voting@board'
+ => '{memberCreator} disabled voting on this board',
+ 'action_due_date_change'
+ => '{memberCreator}',
+ 'action_email_card'
+ => '{memberCreator} emailed {card} to {list}',
+ 'action_email_card@card'
+ => '{memberCreator} emailed this card to {list}',
+ 'action_email_card_from'
+ => '{memberCreator} emailed {card} to {list} from {from}',
+ 'action_email_card_from@card'
+ => '{memberCreator} emailed this card to {list} from {from}',
+ 'action_enabled_calendar_feed'
+ => '{memberCreator} enabled the iCalendar feed on {board}',
+ 'action_enabled_calendar_feed@board'
+ => '{memberCreator} enabled the iCalendar feed on this board',
+ 'action_enabled_card_covers'
+ => '{memberCreator} enabled card cover images on {board}',
+ 'action_enabled_card_covers@board'
+ => '{memberCreator} enabled card cover images on this board',
+ 'action_enabled_plugin'
+ => '{memberCreator} enabled the {plugin} Power-Up',
+ 'action_enabled_powerup'
+ => '{memberCreator} enabled the {powerup} Power-Up',
+ 'action_enabled_self_join'
+ => '{memberCreator} enabled self join on {board}',
+ 'action_enabled_self_join@board'
+ => '{memberCreator} enabled self join on this board',
+ 'action_hid_board'
+ => '{memberCreator} hid {board}',
+ 'action_hid_board@board'
+ => '{memberCreator} hid this board',
+ 'action_invited_an_unconfirmed_member_to_board'
+ => '{memberCreator} invited an unconfirmed member to {board}',
+ 'action_invited_an_unconfirmed_member_to_board@board'
+ => '{memberCreator} invited an unconfirmed member to this board',
+ 'action_invited_an_unconfirmed_member_to_organization'
+ => '{memberCreator} invited an unconfirmed member to {organization}',
+ 'action_joined_board'
+ => '{memberCreator} joined {board}',
+ 'action_joined_board@board'
+ => '{memberCreator} joined this board',
+ 'action_joined_board_by_invitation_link'
+ => '{memberCreator} joined {board} with an invitation link from {memberInviter}',
+ 'action_joined_board_by_invitation_link@board'
+ => '{memberCreator} joined this board with an invitation link from {memberInviter}',
+ 'action_joined_organization'
+ => '{memberCreator} joined {organization}',
+ 'action_joined_organization_by_invitation_link'
+ => '{memberCreator} joined {organization} with an invitation link from {memberInviter}',
+ 'action_left_board'
+ => '{memberCreator} left {board}',
+ 'action_left_board@board'
+ => '{memberCreator} left this board',
+ 'action_left_organization'
+ => '{memberCreator} left {organization}',
+ 'action_made_a_normal_user_in_organization'
+ => '{memberCreator} made {member} a normal user in {organization}',
+ 'action_made_a_normal_user_on'
+ => '{memberCreator} made {member} a normal user on {board}',
+ 'action_made_a_normal_user_on@board'
+ => '{memberCreator} made {member} a normal user on this board',
+ 'action_made_admin_of_board'
+ => '{memberCreator} made {member} an admin of {board}',
+ 'action_made_admin_of_board@board'
+ => '{memberCreator} made {member} an admin of this board',
+ 'action_made_an_admin_of_organization'
+ => '{memberCreator} made {member} an admin of {organization}',
+ 'action_made_commenting_on'
+ => '{memberCreator} made commenting on {board} available to {level}',
+ 'action_made_commenting_on@board'
+ => '{memberCreator} made commenting on this board available to {level}',
+ 'action_made_inviting_on'
+ => '{memberCreator} made inviting on {board} available to {level}',
+ 'action_made_inviting_on@board'
+ => '{memberCreator} made inviting on this board available to {level}',
+ 'action_made_observer_of_board'
+ => '{memberCreator} made {member} an observer of {board}',
+ 'action_made_observer_of_board@board'
+ => '{memberCreator} made {member} an observer of this board',
+ 'action_made_self_admin_of_board'
+ => '{memberCreator} made themselves an admin of {board}',
+ 'action_made_self_admin_of_board@board'
+ => '{memberCreator} made themselves an admin of this board',
+ 'action_made_self_observer_of_board'
+ => '{memberCreator} became an observer of {board}',
+ 'action_made_self_observer_of_board@board'
+ => '{memberCreator} became an observer of this board',
+ 'action_made_voting_on'
+ => '{memberCreator} made voting on {board} available to {level}',
+ 'action_made_voting_on@board'
+ => '{memberCreator} made voting on this board available to {level}',
+ 'action_marked_checkitem_incomplete'
+ => '{memberCreator} marked {checkitem} incomplete on {card}',
+ 'action_marked_checkitem_incomplete@card'
+ => '{memberCreator} marked {checkitem} incomplete on this card',
+ 'action_marked_the_due_date_complete'
+ => '{memberCreator} marked the due date on {card} complete',
+ 'action_marked_the_due_date_complete@card'
+ => '{memberCreator} marked the due date complete',
+ 'action_marked_the_due_date_incomplete'
+ => '{memberCreator} marked the due date on {card} incomplete',
+ 'action_marked_the_due_date_incomplete@card'
+ => '{memberCreator} marked the due date incomplete',
+ 'action_member_joined_card'
+ => '{memberCreator} joined {card}',
+ 'action_member_joined_card@card'
+ => '{memberCreator} joined this card',
+ 'action_member_left_card'
+ => '{memberCreator} left {card}',
+ 'action_member_left_card@card'
+ => '{memberCreator} left this card',
+ 'action_members_visibility'
+ => 'its members',
+ 'action_move_card_from_board'
+ => '{memberCreator} transferred {card} to {board}',
+ 'action_move_card_from_board@card'
+ => '{memberCreator} transferred this card to {board}',
+ 'action_move_card_from_list_to_list'
+ => '{memberCreator} moved {card} from {listBefore} to {listAfter}',
+ 'action_move_card_from_list_to_list@card'
+ => '{memberCreator} moved this card from {listBefore} to {listAfter}',
+ 'action_move_card_to_board'
+ => '{memberCreator} transferred {card} from {board}',
+ 'action_move_card_to_board@card'
+ => '{memberCreator} transferred this card from {board}',
+ 'action_move_list_from_board'
+ => '{memberCreator} transferred {list} to {board}',
+ 'action_move_list_to_board'
+ => '{memberCreator} transferred {list} from {board}',
+ 'action_moved_card_higher'
+ => '{memberCreator} moved {card} higher',
+ 'action_moved_card_higher@card'
+ => '{memberCreator} moved this card higher',
+ 'action_moved_card_lower'
+ => '{memberCreator} moved {card} lower',
+ 'action_moved_card_lower@card'
+ => '{memberCreator} moved this card lower',
+ 'action_moved_checkitem_higher'
+ => '{memberCreator} moved {checkitem} higher in the checklist {checklist}',
+ 'action_moved_checkitem_lower'
+ => '{memberCreator} moved {checkitem} higher in the checklist {checklist}',
+ 'action_moved_list_left'
+ => '{memberCreator} moved list {list} left on {board}',
+ 'action_moved_list_left@board'
+ => '{memberCreator} moved {list} left on this board',
+ 'action_moved_list_right'
+ => '{memberCreator} moved list {list} right on {board}',
+ 'action_moved_list_right@board'
+ => '{memberCreator} moved {list} right on this board',
+ 'action_observers_visibility'
+ => 'members and observers',
+ 'action_on'
+ => 'on',
+ 'action_org_visibility'
+ => 'members of its team',
+ 'action_public_visibility'
+ => 'the public',
+ 'action_remove_checklist_from_card'
+ => '{memberCreator} removed {checklist} from {card}',
+ 'action_remove_checklist_from_card@card'
+ => '{memberCreator} removed {checklist} from this card',
+ 'action_remove_from_organization_board'
+ => '{memberCreator} removed {board} from {organization}',
+ 'action_remove_from_organization_board@board'
+ => '{memberCreator} removed this board from {organization}',
+ 'action_remove_label_from_card'
+ => '{memberCreator} removed the {label} label from {card}',
+ 'action_remove_label_from_card@card'
+ => '{memberCreator} removed the {label} label from this card',
+ 'action_remove_organization_from_enterprise'
+ => '{memberCreator} removed team {organization} from the enterprise {enterprise}',
+ 'action_removed_a_due_date'
+ => '{memberCreator} removed the due date from {card}',
+ 'action_removed_a_due_date@card'
+ => '{memberCreator} removed the due date from this card',
+ 'action_removed_from_board'
+ => '{memberCreator} removed {member} from {board}',
+ 'action_removed_from_board@board'
+ => '{memberCreator} removed {member} from this board',
+ 'action_removed_member_from_card'
+ => '{memberCreator} removed {member} from {card}',
+ 'action_removed_member_from_card@card'
+ => '{memberCreator} removed {member} from this card',
+ 'action_removed_member_from_organization'
+ => '{memberCreator} removed {member} from {organization}',
+ 'action_removed_vote_for_card'
+ => '{memberCreator} removed vote for {card}',
+ 'action_removed_vote_for_card@card'
+ => '{memberCreator} removed vote for this card',
+ 'action_rename_custom_field'
+ => '{memberCreator} renamed the {customField} custom field on {board} (from {name})',
+ 'action_rename_custom_field@board'
+ => '{memberCreator} renamed the {customField} custom field on this board (from {name})',
+ 'action_renamed_card'
+ => '{memberCreator} renamed {card} (from {name})',
+ 'action_renamed_card@card'
+ => '{memberCreator} renamed this card (from {name})',
+ 'action_renamed_checkitem'
+ => '{memberCreator} renamed {checkitem} (from {name})',
+ 'action_renamed_checklist'
+ => '{memberCreator} renamed {checklist} (from {name})',
+ 'action_renamed_list'
+ => '{memberCreator} renamed list {list} (from {name})',
+ 'action_reopened_board'
+ => '{memberCreator} re-opened {board}',
+ 'action_reopened_board@board'
+ => '{memberCreator} re-opened this board',
+ 'action_sent_card_to_board'
+ => '{memberCreator} sent {card} to the board',
+ 'action_sent_card_to_board@card'
+ => '{memberCreator} sent this card to the board',
+ 'action_sent_list_to_board'
+ => '{memberCreator} sent list {list} to the board',
+ 'action_set_card_aging_mode_pirate'
+ => '{memberCreator} changed card aging to pirate mode',
+ 'action_set_card_aging_mode_regular'
+ => '{memberCreator} changed card aging to regular mode',
+ 'action_update_board_desc'
+ => '{memberCreator} changed description of {board}',
+ 'action_update_board_desc@board'
+ => '{memberCreator} changed description of this board',
+ 'action_update_board_name'
+ => '{memberCreator} renamed {board} (from {name})',
+ 'action_update_board_name@board'
+ => '{memberCreator} renamed this board (from {name})',
+ 'action_update_custom_field'
+ => '{memberCreator} updated the {customField} custom field on {board}',
+ 'action_update_custom_field@board'
+ => '{memberCreator} updated the {customField} custom field on this board',
+ 'action_update_custom_field_item'
+ => '{memberCreator} updated the value for the {customFieldItem} custom field on {card}',
+ 'action_update_custom_field_item@card'
+ => '{memberCreator} updated the value for the {customFieldItem} custom field on this card',
+ 'action_updated_their_bio'
+ => '{memberCreator} updated their bio',
+ 'action_updated_their_display_name'
+ => '{memberCreator} updated their display name',
+ 'action_updated_their_initials'
+ => '{memberCreator} updated their initials',
+ 'action_updated_their_username'
+ => '{memberCreator} updated their username',
+ 'action_vote_on_card'
+ => '{memberCreator} voted for {card}',
+ 'action_vote_on_card@card'
+ => '{memberCreator} voted for this card',
+ 'action_voting'
+ => 'voting',
+ 'action_withdraw_enterprise_join_request'
+ => '{memberCreator} withdrew a request to add team {organization} to the enterprise {enterprise}'
+ ];
- const REQUEST_ACTIONS_CARDS = array(
- 'addAttachmentToCard',
- 'addChecklistToCard',
- 'addMemberToCard',
- 'commentCard',
- 'copyCommentCard',
- 'convertToCardFromCheckItem',
- 'createCard',
- 'copyCard',
- 'deleteAttachmentFromCard',
- 'emailCard',
- 'moveCardFromBoard',
- 'moveCardToBoard',
- 'removeChecklistFromCard',
- 'removeMemberFromCard',
- 'updateCard:idList',
- 'updateCard:closed',
- 'updateCard:due',
- 'updateCard:dueComplete',
- 'updateCheckItemStateOnCard',
- 'updateCustomFieldItem'
- );
+ const REQUEST_ACTIONS_BOARDS = [
+ 'addAttachmentToCard',
+ 'addChecklistToCard',
+ 'addMemberToCard',
+ 'commentCard',
+ 'copyCommentCard',
+ 'convertToCardFromCheckItem',
+ 'createCard',
+ 'copyCard',
+ 'deleteAttachmentFromCard',
+ 'emailCard',
+ 'moveCardFromBoard',
+ 'moveCardToBoard',
+ 'removeChecklistFromCard',
+ 'removeMemberFromCard',
+ 'updateCard:idList',
+ 'updateCard:closed',
+ 'updateCard:due',
+ 'updateCard:dueComplete',
+ 'updateCheckItemStateOnCard',
+ 'updateCustomFieldItem',
+ 'addMemberToBoard',
+ 'addToOrganizationBoard',
+ 'copyBoard',
+ 'createBoard',
+ 'createCustomField',
+ 'createList',
+ 'deleteCard',
+ 'deleteCustomField',
+ 'disablePlugin',
+ 'disablePowerUp',
+ 'enablePlugin',
+ 'enablePowerUp',
+ 'makeAdminOfBoard',
+ 'makeNormalMemberOfBoard',
+ 'makeObserverOfBoard',
+ 'moveListFromBoard',
+ 'moveListToBoard',
+ 'removeFromOrganizationBoard',
+ 'unconfirmedBoardInvitation',
+ 'unconfirmedOrganizationInvitation',
+ 'updateBoard',
+ 'updateCustomField',
+ 'updateList:closed'
+ ];
- private $feedName = '';
- private $feedURI = '';
+ const REQUEST_ACTIONS_CARDS = [
+ 'addAttachmentToCard',
+ 'addChecklistToCard',
+ 'addMemberToCard',
+ 'commentCard',
+ 'copyCommentCard',
+ 'convertToCardFromCheckItem',
+ 'createCard',
+ 'copyCard',
+ 'deleteAttachmentFromCard',
+ 'emailCard',
+ 'moveCardFromBoard',
+ 'moveCardToBoard',
+ 'removeChecklistFromCard',
+ 'removeMemberFromCard',
+ 'updateCard:idList',
+ 'updateCard:closed',
+ 'updateCard:due',
+ 'updateCard:dueComplete',
+ 'updateCheckItemStateOnCard',
+ 'updateCustomFieldItem'
+ ];
- private function queryAPI($path, $params = array()) {
- $data = json_decode(getContents('https://trello.com/1/'
- . $path
- . '?'
- . http_build_query($params)));
- return $data;
- }
+ private $feedName = '';
+ private $feedURI = '';
- private function renderAction($action, $textOnly = false) {
- if(!array_key_exists($action->display->translationKey, self::ACTION_TEXTS)) {
- return '';
- }
+ private function queryAPI($path, $params = [])
+ {
+ $data = json_decode(getContents('https://trello.com/1/'
+ . $path
+ . '?'
+ . http_build_query($params)));
+ return $data;
+ }
- $strings = array();
- $entities = (array)$action->display->entities;
+ private function renderAction($action, $textOnly = false)
+ {
+ if (!array_key_exists($action->display->translationKey, self::ACTION_TEXTS)) {
+ return '';
+ }
- foreach($entities as $entity_name => $entity) {
- $type = $entity->type;
- if($type === 'attachmentPreview'
- && !$textOnly
- && isset($entity->originalUrl)) {
- $string = '<p><a href="'
- . $entity->originalUrl
- . '"><img src="'
- . $entity->previewUrl
- . '"></a></p>';
- } elseif($type === 'card' && !$textOnly) {
- $string = '<a href="https://trello.com/c/'
- . $entity->shortLink
- . '">'
- . $entity->text
- . '</a>';
- } elseif($type === 'member' && !$textOnly) {
- $string = '<a href="https://trello.com/'
- . $entity->username
- . '">'
- . $entity->text
- . '</a>';
- } elseif($type === 'date') {
- $string = gmdate('M j, Y \a\t g:i A T', strtotime($entity->date));
- } elseif($type === 'translatable') {
- $string = self::ACTION_TEXTS[$entity->translationKey];
- } else {
- if(isset($entity->text)) {
- $string = $entity->text;
- } else {
- $string = '';
- }
- }
- $strings['{' . $entity_name . '}'] = $string;
- }
+ $strings = [];
+ $entities = (array)$action->display->entities;
- return str_replace(array_keys($strings),
- array_values($strings),
- self::ACTION_TEXTS[$action->display->translationKey]);
- }
+ foreach ($entities as $entity_name => $entity) {
+ $type = $entity->type;
+ if (
+ $type === 'attachmentPreview'
+ && !$textOnly
+ && isset($entity->originalUrl)
+ ) {
+ $string = '<p><a href="'
+ . $entity->originalUrl
+ . '"><img src="'
+ . $entity->previewUrl
+ . '"></a></p>';
+ } elseif ($type === 'card' && !$textOnly) {
+ $string = '<a href="https://trello.com/c/'
+ . $entity->shortLink
+ . '">'
+ . $entity->text
+ . '</a>';
+ } elseif ($type === 'member' && !$textOnly) {
+ $string = '<a href="https://trello.com/'
+ . $entity->username
+ . '">'
+ . $entity->text
+ . '</a>';
+ } elseif ($type === 'date') {
+ $string = gmdate('M j, Y \a\t g:i A T', strtotime($entity->date));
+ } elseif ($type === 'translatable') {
+ $string = self::ACTION_TEXTS[$entity->translationKey];
+ } else {
+ if (isset($entity->text)) {
+ $string = $entity->text;
+ } else {
+ $string = '';
+ }
+ }
+ $strings['{' . $entity_name . '}'] = $string;
+ }
- public function collectData() {
- $apiParams = array(
- 'actions_display' => 'true',
- 'fields' => 'name,url'
- );
- switch($this->queriedContext) {
- case 'Board':
- $apiParams['actions'] = implode(',', self::REQUEST_ACTIONS_BOARDS);
- $data = $this->queryAPI('boards/' . $this->getInput('b'), $apiParams);
- break;
- case 'Card':
- $apiParams['actions'] = implode(',', self::REQUEST_ACTIONS_CARDS);
- $data = $this->queryAPI('cards/' . $this->getInput('c'), $apiParams);
- break;
- default:
- returnClientError('Invalid context');
- }
+ return str_replace(
+ array_keys($strings),
+ array_values($strings),
+ self::ACTION_TEXTS[$action->display->translationKey]
+ );
+ }
- $this->feedName = $data->name;
- $this->feedURI = $data->url;
+ public function collectData()
+ {
+ $apiParams = [
+ 'actions_display' => 'true',
+ 'fields' => 'name,url'
+ ];
+ switch ($this->queriedContext) {
+ case 'Board':
+ $apiParams['actions'] = implode(',', self::REQUEST_ACTIONS_BOARDS);
+ $data = $this->queryAPI('boards/' . $this->getInput('b'), $apiParams);
+ break;
+ case 'Card':
+ $apiParams['actions'] = implode(',', self::REQUEST_ACTIONS_CARDS);
+ $data = $this->queryAPI('cards/' . $this->getInput('c'), $apiParams);
+ break;
+ default:
+ returnClientError('Invalid context');
+ }
- foreach($data->actions as $action) {
- $item = array();
+ $this->feedName = $data->name;
+ $this->feedURI = $data->url;
- $item['title'] = $this->renderAction($action, true);
- $item['timestamp'] = strtotime($action->date);
- $item['author'] = $action->memberCreator->fullName;
- $item['categories'] = array(
- 'trello',
- $action->data->board->name,
- $action->type
- );
- if(isset($action->data->card)) {
- $item['categories'][] = $action->data->card->name;
- $item['uri'] = 'https://trello.com/c/'
- . $action->data->card->shortLink
- . '#action-'
- . $action->id;
- } else {
- $item['uri'] = 'https://trello.com/b/'
- . $action->data->board->shortLink;
- }
- $item['content'] = $this->renderAction($action, false);
- if(isset($action->data->attachment->url)) {
- $item['enclosures'] = array($action->data->attachment->url);
- }
+ foreach ($data->actions as $action) {
+ $item = [];
- $this->items[] = $item;
- }
- }
+ $item['title'] = $this->renderAction($action, true);
+ $item['timestamp'] = strtotime($action->date);
+ $item['author'] = $action->memberCreator->fullName;
+ $item['categories'] = [
+ 'trello',
+ $action->data->board->name,
+ $action->type
+ ];
+ if (isset($action->data->card)) {
+ $item['categories'][] = $action->data->card->name;
+ $item['uri'] = 'https://trello.com/c/'
+ . $action->data->card->shortLink
+ . '#action-'
+ . $action->id;
+ } else {
+ $item['uri'] = 'https://trello.com/b/'
+ . $action->data->board->shortLink;
+ }
+ $item['content'] = $this->renderAction($action, false);
+ if (isset($action->data->attachment->url)) {
+ $item['enclosures'] = [$action->data->attachment->url];
+ }
- public function detectParameters($url) {
- $regex = '/^(https?:\/\/)?trello\.com\/([bc])\/([^\/?\n]+)/';
- if(preg_match($regex, $url, $matches) > 0) {
- return array($matches[2] => $matches[3]);
- } else {
- return null;
- }
- }
+ $this->items[] = $item;
+ }
+ }
- public function getURI() {
- switch($this->queriedContext) {
- case 'Board':
- case 'Card':
- return $this->feedURI;
- default: return parent::getURI();
- }
- }
+ public function detectParameters($url)
+ {
+ $regex = '/^(https?:\/\/)?trello\.com\/([bc])\/([^\/?\n]+)/';
+ if (preg_match($regex, $url, $matches) > 0) {
+ return [$matches[2] => $matches[3]];
+ } else {
+ return null;
+ }
+ }
- public function getName() {
- switch($this->queriedContext) {
- case 'Board':
- case 'Card':
- return $this->feedName;
- default: return parent::getName();
- }
- }
+ public function getURI()
+ {
+ switch ($this->queriedContext) {
+ case 'Board':
+ case 'Card':
+ return $this->feedURI;
+ default:
+ return parent::getURI();
+ }
+ }
+
+ public function getName()
+ {
+ switch ($this->queriedContext) {
+ case 'Board':
+ case 'Card':
+ return $this->feedName;
+ default:
+ return parent::getName();
+ }
+ }
}