$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";
Exemplo n.º 2
0
/**
 * 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);
}
Exemplo n.º 3
0
Arquivo: r.php Projeto: ntamvl/board
/**
 * 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);
    }
}