$activity['revisions'] = $revisions; unset($dif); if (!empty($revisions['new_value'])) { foreach ($revisions['new_value'] as $key => $value) { if ($key != 'is_archived' && $key != 'is_deleted' && $key != 'created' && $key != 'modified' && $key != 'is_offline' && $key != 'uuid' && $key != 'to_date' && $key != 'temp_id' && $activity['type'] != 'moved_card_checklist_item' && $activity['type'] != 'add_card_desc' && $activity['type'] != 'add_card_duedate' && $activity['type'] != 'delete_card_duedate' && $activity['type'] != 'add_background' && $activity['type'] != 'change_background' && $activity['type'] != 'change_visibility') { $old_val = isset($revisions['old_value'][$key]) && $revisions['old_value'][$key] != null && $revisions['old_value'][$key] != 'null' ? $revisions['old_value'][$key] : ''; $new_val = isset($revisions['new_value'][$key]) && $revisions['new_value'][$key] != null && $revisions['new_value'][$key] != 'null' ? $revisions['new_value'][$key] : ''; $dif[] = nl2br(getRevisiondifference($old_val, $new_val)); } if ($activity['type'] == 'add_card_desc' || $activity['type'] == 'add_card_desc' || $activity['type'] == ' edit_card_duedate' || $activity['type'] == 'add_background' || $activity['type'] == 'change_background' || $activity['type'] == 'change_visibility') { $dif[] = $revisions['new_value'][$key]; } } } else { if (!empty($revisions['old_value']) && isset($activity['type']) && $activity['type'] == 'delete_card_comment') { $dif[] = nl2br(getRevisiondifference($revisions['old_value'], '')); } } if (isset($dif)) { $activity['difference'] = $dif; } if (!empty($activity['difference'][0])) { $search = array('<del', '<ins'); $replace = array('<del style="padding: 0px 3px;font-size: 90%;line-height: 1;text-align: center;white-space: nowrap;vertical-align: baseline;background: #e5bdb2;color: #a82400;margin-left: 3px;"', '<ins style="padding: 0px 3px;font-size: 90%;line-height: 1;text-align: center;white-space: nowrap;vertical-align: baseline;background: #d1e1ad;color: #405a04;text-decoration: none;margin-right: 3px;"'); $difference = str_replace($search, $replace, $activity['difference'][0]); $activity['comment'] .= '<div style="margin:5px 0px 0px 43px"><div style="background-color: #ffffff;border: 1px solid #dddddd;border-radius: 4px;display: block;line-height: 1.42857;margin:7px 0;padding: 4px;transition: all 0.2s ease-in-out 0s;"><div style="padding:3px 0px 0px 0px;margin:0px">' . $difference . '</div></div></div>'; } } $comment = findAndReplaceVariables($activity); $mail_content .= '<div>' . "\n"; $mail_content .= '<div style="float:left">' . $user_avatar . '</div>' . "\n";
/** * Common method to handle DELETE method * * @param string $r_resource_cmd URL * @param array $r_resource_vars Array generated from URL * @param array $r_resource_filters Array generated from URL query string * * @return mixed */ function r_delete($r_resource_cmd, $r_resource_vars, $r_resource_filters) { global $r_debug, $db_lnk, $authUser, $_server_domain_url; $sql = false; $pg_params = array(); $response = array(); switch ($r_resource_cmd) { case '/users/?': // delete users $qry_val_arr = array($r_resource_vars['users']); $s_result = pg_query_params($db_lnk, 'SELECT username FROM users WHERE id = $1', $qry_val_arr); $username = pg_fetch_assoc($s_result); $foreign_id['user_id'] = $r_resource_vars['users']; $comment = '##USER_NAME## deleted "' . $username['username'] . '"'; $response['activity'] = insertActivity($authUser['id'], $comment, 'delete_user', $foreign_id); $sql = 'DELETE FROM users WHERE id= $1'; array_push($pg_params, $r_resource_vars['users']); break; case '/organizations/?/organizations_users/?': // delete organization user $qry_val_arr = array($r_resource_vars['organizations_users']); $s_result = pg_query_params($db_lnk, 'SELECT username, organization_id, name, full_name FROM organizations_users_listing WHERE id = $1', $qry_val_arr); $previous_value = pg_fetch_assoc($s_result); $foreign_ids['organization_id'] = $previous_value['organization_id']; $comment = '##USER_NAME## removed member "' . $previous_value['full_name'] . '" from organization'; $response['activity'] = insertActivity($authUser['id'], $comment, 'delete_organization_user', $foreign_ids, '', $r_resource_vars['organizations_users']); $sql = 'DELETE FROM organizations_users WHERE id= $1'; array_push($pg_params, $r_resource_vars['organizations_users']); $conditions = array($previous_value['organization_id'], $r_resource_vars['organizations_users']); pg_query_params($db_lnk, 'DELETE FROM boards_users WHERE board_id IN (SELECT id FROM boards WHERE organization_id = $1) AND user_id = $2', $conditions); break; case '/boards/?/boards_users/?': // delete board user $qry_val_arr = array($r_resource_vars['boards_users']); $s_result = pg_query_params($db_lnk, 'SELECT username, full_name, board_id, user_id, board_name FROM boards_users_listing WHERE id = $1', $qry_val_arr); $previous_value = pg_fetch_assoc($s_result); $foreign_ids['board_id'] = $previous_value['board_id']; $comment = '##USER_NAME## removed member "' . $previous_value['username'] . '" from board'; $response['activity'] = insertActivity($authUser['id'], $comment, 'delete_board_user', $foreign_ids, '', $r_resource_vars['boards_users']); $sql = 'DELETE FROM boards_users WHERE id= $1'; $conditions = array($previous_value['board_id']); $cards = pg_query_params($db_lnk, 'SELECT id FROM cards WHERE board_id = $1', $conditions); while ($row = pg_fetch_assoc($cards)) { $conditions = array($row['id'], $previous_value['user_id']); pg_query_params($db_lnk, 'DELETE FROM cards_users WHERE card_id = $1 AND user_id = $2', $conditions); } array_push($pg_params, $r_resource_vars['boards_users']); break; case '/boards/?/lists/?': // delete lists $qry_val_arr = array($r_resource_vars['lists']); $s_result = pg_query_params($db_lnk, 'SELECT name, board_id, position FROM lists WHERE id = $1', $qry_val_arr); $previous_value = pg_fetch_assoc($s_result); $foreign_id['board_id'] = $r_resource_vars['boards']; $foreign_id['list_id'] = $r_resource_vars['lists']; $comment = '##USER_NAME## deleted "' . $previous_value['name'] . '"'; $response['activity'] = insertActivity($authUser['id'], $comment, 'delete_list', $foreign_id); $sql = 'DELETE FROM lists WHERE id= $1'; array_push($pg_params, $r_resource_vars['lists']); break; case '/boards/?/lists': // delete Archived lists $qry_val_arr = array($r_resource_vars['boards']); $sql = 'DELETE FROM lists WHERE board_id = $1 AND is_archived = true'; array_push($pg_params, $r_resource_vars['boards']); break; case '/boards/?/cards': // delete Archived cards $qry_val_arr = array($r_resource_vars['boards']); $sql = 'DELETE FROM cards WHERE board_id = $1 AND is_archived = true'; array_push($pg_params, $r_resource_vars['boards']); break; case '/organizations/?': // delete organization $qry_val_arr = array($r_resource_vars['organizations']); $foreign_id['organization_id'] = $r_resource_vars['organizations']; $comment = '##USER_NAME## deleted organization'; $response['activity'] = insertActivity($authUser['id'], $comment, 'delete_organization', $foreign_id); $data = array(0, 2, $foreign_id['organization_id']); pg_query_params($db_lnk, 'UPDATE boards SET organization_id = $1, board_visibility = $2 WHERE organization_id = $3', $data); $conditions = array($foreign_id['organization_id']); $s_result = pg_query_params($db_lnk, 'SELECT user_id FROM organizations WHERE id = $1', $conditions); $organization = pg_fetch_assoc($s_result); $conditions = array($organization['user_id'], $foreign_id['organization_id']); pg_query_params($db_lnk, 'DELETE FROM organizations_users WHERE user_id = $1 AND organization_id = $2', $conditions); $sql = 'DELETE FROM organizations WHERE id= $1'; array_push($pg_params, $r_resource_vars['organizations']); break; case '/boards/?/labels/?': // delete Labels in Filter $sql = 'DELETE FROM cards_labels WHERE board_id = $1 AND label_id = $2'; array_push($pg_params, $r_resource_vars['boards'], $r_resource_vars['labels']); break; case '/boards/?/lists/?/cards/?': // delete card $qry_val_arr = array($r_resource_vars['cards']); $s_result = pg_query_params($db_lnk, 'SELECT name, board_id, position FROM cards WHERE id = $1', $qry_val_arr); $previous_value = pg_fetch_assoc($s_result); $foreign_id['board_id'] = $r_resource_vars['boards']; $foreign_id['list_id'] = $r_resource_vars['lists']; $foreign_id['card_id'] = $r_resource_vars['cards']; $comment = '##USER_NAME## deleted card ' . $previous_value['name']; $response['activity'] = insertActivity($authUser['id'], $comment, 'delete_card', $foreign_id); $sql = 'DELETE FROM cards WHERE id = $1'; array_push($pg_params, $r_resource_vars['cards']); break; case '/boards/?/lists/?/cards/?/card_voters/?': // delete card voters $sql = 'DELETE FROM card_voters WHERE id = $1'; array_push($pg_params, $r_resource_vars['card_voters']); $qry_val_arr = array($r_resource_vars['cards']); $previous_value = executeQuery('SELECT name FROM cards WHERE id = $1', $qry_val_arr); $foreign_ids['board_id'] = $r_resource_vars['boards']; $foreign_ids['list_id'] = $r_resource_vars['lists']; $foreign_ids['card_id'] = $r_resource_vars['cards']; $comment = '##USER_NAME## unvoted this card ##CARD_LINK##'; $response['activity'] = insertActivity($authUser['id'], $comment, 'unvote_card', $foreign_ids, null, $r_resource_vars['card_voters']); break; case '/boards/?/lists/?/cards/?/comments/?': // comment DELETE $qry_val_arr = array($r_resource_vars['comments']); $revisions = executeQuery('SELECT comment, revisions FROM activities WHERE id = $1 OR foreign_id = $1 ORDER BY id desc limit 1', $qry_val_arr); $comment = '##USER_NAME## deleted comment in card ##CARD_LINK##'; if (!empty($revisions['revisions'])) { $revision = unserialize($revisions['revisions']); $revisions_del['comment'] = $comment; $revisions_del['old_value'] = $revision['new_value']['comment']; $revisions_del['new_value'] = ''; $revisions_del = serialize($revisions_del); } else { $revisions_del['comment'] = $comment; $revisions_del['old_value'] = $revisions['comment']; $revisions_del['new_value'] = ''; $revisions_del = serialize($revisions_del); } $sql = 'DELETE FROM activities WHERE id = $1'; array_push($pg_params, $r_resource_vars['comments']); $qry_val_arr = array($r_resource_vars['cards']); $previous_value = executeQuery('SELECT name FROM cards WHERE id = $1', $qry_val_arr); $foreign_ids['board_id'] = $r_resource_vars['boards']; $foreign_ids['list_id'] = $r_resource_vars['lists']; $foreign_ids['card_id'] = $r_resource_vars['cards']; $response['activity'] = insertActivity($authUser['id'], $comment, 'delete_card_comment', $foreign_ids, $revisions_del, $r_resource_vars['comments']); if (!empty($response['activity']['revisions']) && trim($response['activity']['revisions']) != '') { $revisions = unserialize($response['activity']['revisions']); } if (!empty($revisions) && $response['activity']['type'] != 'moved_card_checklist_item') { if (!empty($revisions['new_value'])) { foreach ($revisions['new_value'] as $key => $value) { if ($key != 'is_archived' && $key != 'is_deleted' && $key != 'created' && $key != 'modified' && $key != 'is_offline' && $key != 'uuid' && $key != 'to_date' && $key != 'temp_id' && $activity_type != 'moved_card_checklist_item' && $activity_type != 'add_card_desc' && $activity_type != 'add_card_duedate' && $activity_type != 'delete_card_duedate' && $activity_type != 'add_background' && $activity_type != 'change_background' && $activity_type != 'change_visibility') { $old_val = isset($revisions['old_value'][$key]) ? $revisions['old_value'][$key] : ''; $new_val = isset($revisions['new_value'][$key]) ? $revisions['new_value'][$key] : ''; $dif[] = nl2br(getRevisiondifference($old_val, $new_val)); } if ($activity_type == 'add_card_desc' || $activity_type == 'edit_card_duedate' || $activity_type == 'add_background' || $activity_type == 'change_background' || $activity_type == 'change_visibility') { $dif[] = $revisions['new_value'][$key]; } } } else { if (!empty($revisions['old_value']) && isset($response['activity']['type']) && $response['activity']['type'] == 'delete_card_comment') { $dif[] = nl2br(getRevisiondifference($revisions['old_value'], '')); } } } if (isset($dif)) { $response['activity']['difference'] = $dif; } break; case '/boards/?/lists/?/cards/?/attachments/?': //delete card attachment $sql = 'DELETE FROM card_attachments WHERE id = $1'; array_push($pg_params, $r_resource_vars['attachments']); $foreign_ids['board_id'] = $r_resource_vars['boards']; $foreign_ids['list_id'] = $r_resource_vars['lists']; $foreign_ids['card_id'] = $r_resource_vars['cards']; $comment = '##USER_NAME## deleted attachment from card ##CARD_LINK##'; $response['activity'] = insertActivity($authUser['id'], $comment, 'delete_card_attachment', $foreign_ids, null, $r_resource_vars['attachments']); break; case '/boards/?/lists/?/cards/?/checklists/?': // delete checklist $qry_val_arr = array($r_resource_vars['checklists']); $s_result = pg_query_params($db_lnk, 'SELECT name FROM checklists WHERE id = $1', $qry_val_arr); $checklist = pg_fetch_assoc($s_result); pg_query_params($db_lnk, 'DELETE FROM checklist_items WHERE checklist_id = $1', $qry_val_arr); $foreign_ids['board_id'] = $r_resource_vars['boards']; $foreign_ids['list_id'] = $r_resource_vars['lists']; $foreign_ids['card_id'] = $r_resource_vars['cards']; $comment = '##USER_NAME## deleted checklist ' . $checklist['name'] . ' from card ##CARD_LINK##'; $response['activity'] = insertActivity($authUser['id'], $comment, 'delete_checklist', $foreign_ids, null, $r_resource_vars['checklists']); $sql = 'DELETE FROM checklists WHERE id = $1'; array_push($pg_params, $r_resource_vars['checklists']); break; case '/boards/?/lists/?/cards/?/checklists/?/items/?': // delete items $foreign_ids['board_id'] = $r_resource_vars['boards']; $foreign_ids['list_id'] = $r_resource_vars['lists']; $foreign_ids['card_id'] = $r_resource_vars['cards']; $comment = '##USER_NAME## deleted checklist ##CHECKLIST_NAME## item from card ##CARD_LINK##'; $response['activity'] = insertActivity($authUser['id'], $comment, 'delete_checklist_item', $foreign_ids, null, $r_resource_vars['items']); $sql = 'DELETE FROM checklist_items WHERE id = $1'; array_push($pg_params, $r_resource_vars['items']); break; case '/boards/?/lists/?/cards/?/cards_users/?': // delete card_user $foreign_ids['board_id'] = $r_resource_vars['boards']; $foreign_ids['list_id'] = $r_resource_vars['lists']; $foreign_ids['card_id'] = $r_resource_vars['cards']; $comment = '##USER_NAME## deleted member from card ##CARD_LINK##'; $response['activity'] = insertActivity($authUser['id'], $comment, 'delete_card_users', $foreign_ids, null, $r_resource_vars['cards_users']); $sql = 'DELETE FROM cards_users WHERE id = $1'; array_push($pg_params, $r_resource_vars['cards_users']); break; case '/oauth/clients/?': $sql = 'DELETE FROM oauth_clients WHERE id= $1'; array_push($pg_params, $r_resource_vars['clients']); break; case '/oauth/applications/?': $conditions = array($r_resource_vars['applications']); pg_query_params($db_lnk, 'DELETE FROM oauth_access_tokens WHERE client_id = $1', $conditions); pg_query_params($db_lnk, 'DELETE FROM oauth_refresh_tokens WHERE client_id = $1', $conditions); $sql = false; break; case '/webhooks/?': $sql = 'DELETE FROM webhooks WHERE id= $1'; array_push($pg_params, $r_resource_vars['webhooks']); break; default: header($_SERVER['SERVER_PROTOCOL'] . ' 501 Not Implemented', true, 501); break; } if (!empty($sql)) { $result = pg_query_params($db_lnk, $sql, $pg_params); $response['error'] = array('code' => !$result ? 1 : 0); } echo json_encode($response); }
/** * Common method to handle PUT method * * @param $r_resource_cmd * @param $r_resource_vars * @param $r_resource_filters * @param $r_put * @return mixed */ function r_put($r_resource_cmd, $r_resource_vars, $r_resource_filters, $r_put) { global $r_debug, $db_lnk, $authUser, $thumbsizes, $_server_domain_url; $fields = 'modified'; $values = array('now()'); $sfields = ''; $pg_params = array(); $emailFindReplace = $response = array(); $res_status = true; $sql = $json = false; $table_name = ''; $id = ''; unset($r_put['temp_id']); switch ($r_resource_cmd) { case '/users/activation/?': //users activation $user = executeQuery('SELECT * FROM users WHERE id = $1 AND is_email_confirmed = $2', array($r_put['id'], 'false')); if ($user && md5($user['username']) == $r_put['hash']) { $sql = pg_query_params($db_lnk, "UPDATE users SET is_email_confirmed = \$1, is_active = \$2 WHERE id = \$3", array('true', 'true', $r_put['id'])); if ($sql) { $emailFindReplace = array('mail' => 'welcome', '##USERNAME##' => $user['username'], 'to' => $user['email']); sendMail($emailFindReplace); $response['success'] = 'Your activation has been confirmed . You can now login to the site'; } else { $response['error'] = 'Invalid Activation URL'; } } else { $response['error'] = 'Invalid Activation URL'; } break; case '/organizations/?': $json = true; $table_name = 'organizations'; $id = $r_resource_vars['organizations']; if (isset($r_put['logo_url']) && $r_put['logo_url'] == 'NULL') { foreach ($thumbsizes['Organization'] as $key => $value) { $mediadir = dirname(dirname(dirname(dirname(__FILE__)))) . '/client/img/' . $key . '/Organization/' . $id; $list = glob($mediadir . '.*'); @unlink($list[0]); } } $organization = executeQuery('SELECT id FROM ' . $table_name . ' WHERE id = $1', array($r_resource_vars['organizations'])); break; case '/organizations_users/?': $json = true; $table_name = 'organizations_users'; $id = $r_resource_vars['organizations_users']; $organizations_user = executeQuery('SELECT id FROM ' . $table_name . ' WHERE id = $1', array($r_resource_vars['organizations_users'])); break; case '/boards_users/?': $json = true; $table_name = 'boards_users'; $id = $r_resource_vars['boards_users']; $boards_users = executeQuery('SELECT id FROM ' . $table_name . ' WHERE id = $1', array($r_resource_vars['boards_users'])); break; case '/boards/?': $table_name = 'boards'; $id = $r_resource_vars['boards']; $previous_value = executeQuery('SELECT * FROM ' . $table_name . ' WHERE id = $1', array($r_resource_vars['boards'])); $board_visibility = array('Private', 'Organization', 'Public'); $foreign_ids['board_id'] = $r_resource_vars['boards']; if (isset($r_put['board_visibility'])) { $comment = $authUser['username'] . ' changed visibility to ' . $board_visibility[$r_put['board_visibility']]; $activity_type = 'change_visibility'; } else { if (!empty($r_put['is_closed'])) { $comment = $authUser['username'] . ' closed ##BOARD_NAME## board.'; $activity_type = 'reopen_board'; } else { if (isset($r_put['is_closed'])) { $comment = $authUser['username'] . ' reopened ##BOARD_NAME## board.'; $activity_type = 'reopen_board'; } else { if (isset($r_put['name'])) { $comment = $authUser['username'] . ' renamed ##BOARD_NAME## board.'; $activity_type = 'edit_board'; } else { if (isset($r_put['background_picture_url']) || isset($r_put['background_pattern_url']) || isset($r_put['background_color'])) { if (empty($previous_value['background_picture_url']) && empty($previous_value['background_pattern_url']) && empty($previous_value['background_color'])) { $comment = $authUser['username'] . ' added background to board "' . $previous_value['name'] . '"'; $activity_type = 'add_background'; } else { $comment = $authUser['username'] . ' changed backgound to board "' . $previous_value['name'] . '"'; $activity_type = 'change_background'; } } } } } } break; case '/boards/?/lists/?': //lists update $json = true; $table_name = 'lists'; $id = $r_resource_vars['lists']; if (isset($r_put['position']) || isset($r_put['is_archived'])) { $s_sql = 'SELECT name, board_id, position FROM ' . $table_name . ' WHERE id = $1'; $s_result = pg_query_params($db_lnk, $s_sql, array($r_resource_vars['lists'])); $previous_value = pg_fetch_assoc($s_result); } $foreign_ids['board_id'] = $r_resource_vars['boards']; $foreign_ids['list_id'] = $r_resource_vars['lists']; if (isset($r_put['board_id']) && !empty($r_put['board_id'])) { pg_query_params($db_lnk, 'UPDATE cards SET board_id = $1 WHERE list_id = $2', array($r_put['board_id'], $r_resource_vars['lists'])); pg_query_params($db_lnk, 'UPDATE card_attachments SET board_id = $1 WHERE list_id = $2', array($r_put['board_id'], $r_resource_vars['lists'])); } if (isset($r_put['position'])) { $comment = $authUser['username'] . ' changed list ' . $previous_value['name'] . ' position.'; $activity_type = 'change_list_position'; $start = $end = 0; if ($previous_value['position'] > $r_put['position']) { $start = $r_put['position']; $end = $previous_value['position']; $postion = ' position + 1'; } else { $start = $previous_value['position']; $end = $r_put['position']; $postion = ' position - 1'; } } else { if (isset($previous_value) && isset($r_put['is_archived'])) { $id = $r_resource_vars['lists']; $foreign_ids['board_id'] = $r_resource_vars['boards']; $foreign_ids['list_id'] = $r_resource_vars['lists']; $comment = $authUser['username'] . ' archived ##LIST_NAME##'; $activity_type = 'archive_list'; } else { $id = $r_resource_vars['lists']; $comment = $authUser['username'] . ' renamed this list.'; $activity_type = 'edit_list'; } } break; case '/boards/?/lists/?/cards': //card list_id(move cards all in this list) update $json = true; $table_name = 'cards'; $id = $r_resource_vars['lists']; $foreign_ids['board_id'] = $r_resource_vars['boards']; $foreign_ids['list_id'] = $r_resource_vars['lists']; $old_list = executeQuery('SELECT name FROM lists WHERE id = $1', array($foreign_ids['list_id'])); if (!empty($r_put['list_id'])) { pg_query_params($db_lnk, 'UPDATE card_attachments SET list_id = $1 WHERE list_id = $2', array($r_put['list_id'], $foreign_ids['list_id'])); pg_query_params($db_lnk, 'UPDATE cards_labels SET list_id = $1 WHERE list_id = $2', array($r_put['list_id'], $foreign_ids['list_id'])); $new_list = executeQuery('SELECT name FROM lists WHERE id = $1', array($r_put['list_id'])); $comment = $authUser['username'] . ' moved cards FROM ' . $old_list['name'] . ' to ' . $new_list['name']; $activity_type = 'moved_list_card'; $revisions['old_value']['list_id'] = $foreign_ids['list_id']; $revisions['new_value'] = $r_put; } else { if (isset($r_put['is_archived']) && !empty($r_put['is_archived'])) { $comment = $authUser['username'] . ' archived cards in ' . $old_list['name']; $activity_type = 'archived_card'; } else { $comment = $authUser['username'] . ' edited ' . $old_list['name'] . ' card in this board.'; $activity_type = 'edit_card'; } } break; case '/boards/?/lists/?/cards/?': //cards update $table_name = 'cards'; $id = $r_resource_vars['cards']; $foreign_ids['board_id'] = $r_resource_vars['boards']; $foreign_ids['list_id'] = $r_resource_vars['lists']; $foreign_ids['card_id'] = $r_resource_vars['cards']; $activity_type = 'edit_card'; $id = $r_resource_vars['cards']; $s_result = pg_query_params($db_lnk, 'SELECT name, board_id, list_id, position, description, due_date FROM ' . $table_name . ' WHERE id = $1', array($r_resource_vars['cards'])); $previous_value = pg_fetch_assoc($s_result); if (isset($r_put['position'])) { $start = $end = 0; if ($previous_value['position'] > $r_put['position']) { $start = $r_put['position']; $end = $previous_value['position']; $postion = ' position + 1'; } else { $start = $previous_value['position']; $end = $r_put['position']; $postion = ' position - 1'; } if (!empty($r_put['list_id'])) { $foreign_ids['list_id'] = $r_put['list_id']; pg_query_params($db_lnk, 'UPDATE card_attachments SET list_id = $1 WHERE list_id = $2', array($r_put['list_id'], $r_resource_vars['lists'])); } $comment = '##USER_NAME## moved this card to different position.'; $activity_type = 'change_card_position'; } if (isset($previous_value) && isset($r_put['is_archived'])) { if ($r_put['is_archived']) { $comment = '##USER_NAME## archived ##CARD_LINK##'; } else { $comment = '##USER_NAME## send back ' . $previous_value['name'] . ' to board'; } $foreign_ids['board_id'] = $r_resource_vars['boards']; $foreign_ids['list_id'] = $r_resource_vars['lists']; } if (isset($r_put['due_date']) && ($r_put['due_date'] != 'NULL' && $r_put['due_date'] != '')) { if (isset($previous_value['due_date']) && ($previous_value['due_date'] != 'NULL' && $previous_value['due_date'] != '')) { $comment = '##USER_NAME## updated due date to this card ##CARD_LINK##'; $activity_type = 'edit_card_duedate'; } else { $comment = '##USER_NAME## SET due date to this card ##CARD_LINK##'; $activity_type = 'add_card_duedate'; } } else { if (isset($r_put['due_date']) && ($r_put['due_date'] == 'NULL' || $r_put['due_date'] == '')) { $comment = '##USER_NAME## deleted due date FROM this card ##CARD_LINK##'; $activity_type = 'delete_card_duedate'; } } if (isset($previous_value['board_id']) && isset($r_put['board_id']) && $r_put['board_id'] != $previous_value['board_id']) { $comment = '##USER_NAME## moved this card to different board.'; } if (isset($previous_value['name']) && isset($r_put['name']) && $r_put['name'] != $previous_value['name']) { $comment = '##USER_NAME## renamed ##CARD_LINK##'; } if (!isset($previous_value['description']) && isset($r_put['description'])) { $comment = '##USER_NAME## added card description in ##CARD_LINK## - ##DESCRIPTION##'; $activity_type = 'add_card_desc'; } else { if (isset($previous_value) && isset($r_put['description']) && $r_put['description'] != $previous_value['description']) { if (empty($r_put['description'])) { $comment = '##USER_NAME## removed description from ##CARD_LINK##'; } else { $comment = '##USER_NAME## updated description on ##CARD_LINK## - ##DESCRIPTION##'; } $activity_type = 'edit_card_desc'; } } if (isset($previous_value['list_id']) && isset($r_put['list_id']) && $r_put['list_id'] != $previous_value['list_id']) { $s_result = pg_query_params($db_lnk, 'SELECT name FROM lists WHERE id = $1', array($r_put['list_id'])); $list_value = pg_fetch_assoc($s_result); $comment = '##USER_NAME## moved this card (' . $previous_value['name'] . ') to different list (' . $list_value['name'] . ').'; } unset($r_put['start']); break; case '/boards/?/lists/?/cards/?/comments/?': // comment update $table_name = 'activities'; $id = $r_resource_vars['comments']; $foreign_ids['board_id'] = $r_resource_vars['boards']; $foreign_ids['list_id'] = $r_resource_vars['lists']; $foreign_ids['card_id'] = $r_resource_vars['cards']; $comment = '##USER_NAME## updated comment to this card ##CARD_LINK##'; $activity_type = 'update_card_comment'; break; case '/boards/?/lists/?/cards/?/checklists/?': $table_name = 'checklists'; $id = $r_resource_vars['checklists']; $foreign_ids['board_id'] = $r_resource_vars['boards']; $foreign_ids['list_id'] = $r_resource_vars['lists']; $foreign_ids['card_id'] = $r_resource_vars['cards']; $comment = '##USER_NAME## updated checklist of card "##CARD_LINK##"'; unset($r_put['checklists_items']); unset($r_put['created']); unset($r_put['modified']); unset($r_put['checklist_item_completed_count']); unset($r_put['checklist_item_count']); unset($r_put['is_offline']); unset($r_put['list_id']); unset($r_put['board_id']); if (isset($r_put['position']) && !empty($r_put['position'])) { $comment .= ' position'; } $activity_type = 'update_card_checklist'; break; case '/boards/?/lists/?/cards/?/checklists/?/items/?': $table_name = 'checklist_items'; $id = $r_resource_vars['items']; $foreign_ids['board_id'] = $r_resource_vars['boards']; $foreign_ids['list_id'] = $r_resource_vars['lists']; $foreign_ids['card_id'] = $r_resource_vars['cards']; unset($r_put['created']); unset($r_put['modified']); unset($r_put['is_offline']); unset($r_put['list_id']); unset($r_put['board_id']); $prev_value = executeQuery('SELECT * FROM ' . $table_name . ' WHERE id = $1', array($r_resource_vars['items'])); $activity_type = 'update_card_checklist_item'; if (isset($r_put['is_completed']) && $r_put['is_completed'] == 'true') { $comment = '##USER_NAME## updated ##CHECKLIST_ITEM_NAME## as completed on card ##CARD_LINK##'; } else { if (isset($r_put['position'])) { $comment = $authUser['username'] . ' moved checklist item on card ##CARD_LINK##'; if (isset($r_put['checklist_id']) && $r_put['checklist_id'] != $prev_value['checklist_id']) { $activity_type = 'moved_card_checklist_item'; } } else { if (isset($r_put['is_completed']) && $r_put['is_completed'] == 'false') { $comment = '##USER_NAME## updated ##CHECKLIST_ITEM_NAME## as incomplete on card ##CARD_LINK##'; } else { $comment = '##USER_NAME## updated item name as ##CHECKLIST_ITEM_NAME## in card ##CARD_LINK##'; } } } break; case '/activities/undo/?': $activity = executeQuery('SELECT * FROM activities WHERE id = $1', array($r_resource_vars['undo'])); if (!empty($activity['revisions']) && trim($activity['revisions']) != '') { $revisions = unserialize($activity['revisions']); if ($activity['type'] == 'update_card_checklist_item') { $table_name = 'checklist_items'; $id = $activity['foreign_id']; $r_put = $revisions['old_value']; $foreign_ids['board_id'] = $activity['board_id']; $foreign_ids['list_id'] = $activity['list_id']; $foreign_ids['card_id'] = $activity['card_id']; $comment = '##USER_NAME## undo this card ##CARD_LINK## checklist item ##CHECKLIST_ITEM_NAME##'; $activity_type = 'update_card_checklist_item'; $response['undo']['checklist_item'] = $r_put; $response['undo']['checklist_item']['id'] = $id; } else { if ($activity['type'] == 'update_card_checklist') { $table_name = 'checklists'; $id = $activity['foreign_id']; $r_put = $revisions['old_value']; $foreign_ids['board_id'] = $activity['board_id']; $foreign_ids['list_id'] = $activity['list_id']; $foreign_ids['card_id'] = $activity['card_id']; $comment = '##USER_NAME## undo this card ##CARD_LINK## checklist ##CHECKLIST_NAME##'; $activity_type = 'update_card_checklist'; $response['undo']['checklist'] = $r_put; $response['undo']['checklist']['id'] = $id; } else { if (!empty($activity['card_id'])) { $table_name = 'cards'; $id = $activity['card_id']; $r_put = $revisions['old_value']; $foreign_ids['board_id'] = $activity['board_id']; $foreign_ids['list_id'] = $activity['list_id']; $foreign_ids['card_id'] = $activity['card_id']; $comment = '##USER_NAME## undo this card ##CARD_LINK##'; $activity_type = 'edit_card'; $response['undo']['card'] = $r_put; $response['undo']['card']['id'] = $id; } else { if (!empty($activity['list_id'])) { $table_name = 'lists'; $id = $activity['list_id']; $r_put = $revisions['old_value']; $foreign_ids['board_id'] = $activity['board_id']; $foreign_ids['list_id'] = $activity['list_id']; $comment = '##USER_NAME## undo this list.'; $activity_type = 'edit_list'; $response['undo']['list'] = $r_put; $response['undo']['list']['id'] = $id; } else { if (!empty($activity['board_id'])) { $table_name = 'boards'; $id = $activity['board_id']; $r_put = $revisions['old_value']; $foreign_ids['board_id'] = $activity['board_id']; $comment = '##USER_NAME## undo this board.'; $activity_type = 'edit_board'; $response['undo']['board'] = $r_put; $response['undo']['board']['id'] = $id; } } } } } } break; case '/users/?': //users $table_name = 'users'; $id = $r_resource_vars['users']; break; case '/email_templates/?': //email template update $json = true; $table_name = 'email_templates'; $id = $r_resource_vars['email_templates']; $response['success'] = 'Email Template has been updated successfully.'; break; case '/boards/?/board_subscribers/?': //boards subscribers update $json = true; $table_name = 'board_subscribers'; $id = $r_resource_vars['board_subscribers']; $response['success'] = 'Updated successfully.'; $response['id'] = $id; break; case '/boards/?/lists/?/list_subscribers/?': //lists update $json = true; $table_name = 'list_subscribers'; $id = $r_resource_vars['list_subscribers']; break; default: header($_SERVER['SERVER_PROTOCOL'] . ' 501 Not Implemented', true, 501); break; } if (!empty($table_name) && !empty($id)) { $put = getbindValues($table_name, $r_put); if ($table_name == 'users') { unset($put['ip_id']); } foreach ($put as $key => $value) { if ($key != 'id') { $fields .= ', ' . $key; if ($value === false) { array_push($values, 'false'); } elseif ($value === 'NULL' || $value === 'NULL') { array_push($values, NULL); } else { array_push($values, $value); } } if ($key != 'id' && $key != 'position') { $sfields .= empty($sfields) ? $key : ", " . $key; } } if (!empty($comment)) { $revision = ''; if ($activity_type != 'reopen_board' && $activity_type != 'moved_list_card' && $activity_type != 'moved_card_checklist_item') { $revisions['old_value'] = executeQuery('SELECT ' . $sfields . ' FROM ' . $table_name . ' WHERE id = $1', array($id)); unset($r_put['position']); unset($r_put['id']); $revisions['new_value'] = $r_put; $revision = serialize($revisions); } $foreign_id = $id; if ($activity_type == 'moved_list_card') { $foreign_id = $r_put['list_id']; } $response['activity'] = insertActivity($authUser['id'], $comment, $activity_type, $foreign_ids, $revision, $foreign_id); if (!empty($response['activity']['revisions']) && trim($response['activity']['revisions']) != '') { $revisions = unserialize($response['activity']['revisions']); } if (!empty($revisions) && !empty($revisions['new_value']) && $response['activity']['type'] != 'moved_card_checklist_item') { foreach ($revisions['new_value'] as $key => $value) { if ($key != 'is_archived' && $key != 'is_deleted' && $key != 'created' && $key != 'modified' && $key != 'is_offline' && $key != 'uuid' && $key != 'to_date' && $key != 'temp_id' && $activity_type != 'moved_card_checklist_item' && $activity_type != 'add_card_desc' && $activity_type != 'add_card_duedate' && $activity_type != 'delete_card_duedate' && $activity_type != 'add_background' && $activity_type != 'change_background' && $activity_type != 'change_visibility') { $old_val = isset($revisions['old_value'][$key]) ? $revisions['old_value'][$key] : ''; $new_val = isset($revisions['new_value'][$key]) ? $revisions['new_value'][$key] : ''; $dif[] = nl2br(getRevisiondifference($old_val, $new_val)); } if ($activity_type == 'add_card_desc' || $activity_type == 'edit_card_duedate' || $activity_type == 'add_background' || $activity_type == 'change_background' || $activity_type == 'change_visibility') { $dif[] = $revisions['new_value'][$key]; } } } if (isset($dif)) { $response['activity']['difference'] = $dif; } if (isset($r_put['description'])) { $response['activity']['description'] = $r_put['description']; } } if ($r_resource_cmd == '/users/?') { $user = executeQuery('SELECT boards_users FROM users_listing WHERE id = $1', array($r_resource_vars['users'])); $board_ids = array(); if (!empty($user['boards_users'])) { $boards_users = json_decode($user['boards_users'], true); foreach ($boards_users as $boards_user) { $board_ids[] = $boards_user['board_id']; } } $board_id = implode(',', $board_ids); $last_activity_status = executeQuery('SELECT * FROM activities_listing al WHERE board_id IN ( $1 ) ORDER BY id DESC LIMIT 1', array($board_id)); } $val = ''; for ($i = 1, $len = count($values); $i <= $len; $i++) { $val .= '$' . $i; $val .= $i != $len ? ', ' : ''; } array_push($values, $id); $query = 'UPDATE ' . $table_name . ' SET (' . $fields . ') = (' . $val . ') WHERE id = ' . '$' . $i; if ($r_resource_cmd == '/boards/?/lists/?/cards') { $query = 'UPDATE ' . $table_name . ' SET (' . $fields . ') = (' . $val . ') WHERE list_id = ' . '$' . $i; } $result = pg_query_params($db_lnk, $query, $values); } if (!empty($sql) && !empty($json)) { if ($table_name == 'organizations') { $sql = 'SELECT row_to_json(d) FROM (SELECT * FROM organizations_listing ul WHERE id = $1) as d '; array_push($pg_params, $r_resource_vars['organizations']); } elseif ($table_name == 'organizations_users') { $sql = 'SELECT row_to_json(d) FROM (SELECT * FROM organizations_users_listing ul WHERE id = $1) as d '; array_push($pg_params, $r_resource_vars['organizations_users']); } elseif ($table_name == 'lists') { $sql = 'SELECT row_to_json(d) FROM (SELECT * FROM lists_listing WHERE id = $1) as d '; array_push($pg_params, $r_resource_vars['lists']); } elseif ($table_name == 'cards' && !empty($r_resource_vars['cards'])) { $sql = 'SELECT row_to_json(d) FROM (SELECT * FROM cards_listing WHERE id = $1) as d '; array_push($pg_params, $r_resource_vars['cards']); } elseif ($table_name == 'cards' && !empty($r_resource_vars['lists'])) { $sql = 'SELECT row_to_json(d) FROM (SELECT * FROM cards_listing WHERE list_id = $1) as d '; array_push($pg_params, $r_resource_vars['lists']); } if ($result = pg_query_params($db_lnk, $sql, $pg_params)) { $data = array(); $count = pg_num_rows($result); $i = 0; while ($row = pg_fetch_row($result)) { if ($i == 0 && $count > 1) { echo '['; } echo $row[0]; $i++; if ($i < $count) { echo ','; } else { if ($count > 1) { echo ']'; } } } pg_free_result($result); } } else { echo json_encode($response); } }