diff --git a/changes_log-gets-rating_vs_master.txt b/changes_log-gets-rating_vs_master.txt new file mode 100644 index 0000000..91edb96 --- /dev/null +++ b/changes_log-gets-rating_vs_master.txt @@ -0,0 +1,2482 @@ +diff --git a/service/changeVoteForTag.php b/service/changeVoteForTag.php +new file mode 100644 +index 0000000..1c227bc +--- /dev/null ++++ b/service/changeVoteForTag.php +@@ -0,0 +1,107 @@ ++loadXML($xml_post); ++ ++if (!$dom) { ++ send_error(1, 'Error: resource isn\'t XML document.'); ++ die(); ++} ++ ++if (!$dom->schemaValidate('schemes/changeVoteForTag.xsd')) { ++ send_error(1, 'Error: not valid input XML document.'); ++ die(); ++} ++ ++$auth_token_element = $dom->getElementsByTagName('auth_token'); ++$vote_id_element = $dom->getElementsByTagName('vote'); ++$latitude_element = $dom->getElementsByTagName('latitude'); ++$longitude_element = $dom->getElementsByTagName('longitude'); ++$altitude_element = $dom->getElementsByTagName('altitude'); ++ ++$auth_token = $auth_token_element->item(0)->nodeValue; ++$vote = $vote_id_element->item(0)->nodeValue; ++$latitude = $latitude_element->item(0)->nodeValue; ++$longitude = $longitude_element->item(0)->nodeValue; ++$altitude = $altitude_element->item(0)->nodeValue; ++ ++ ++//recieve user's id ++auth_set_token($auth_token); ++$dbconn = pg_connect(GEO2TAG_DB_STRING); ++ ++try { ++ $user_db_id = auth_get_db_id($dbconn); ++} catch (Exception $ex) { ++ send_error(1, $ex->getMessage()); ++ die(); ++} ++ ++$user_id = (int) $user_db_id; ++ ++$voting_channel_positive = 'vote+'. $user_id . '+positive'; ++$voting_channel_negative = 'vote+' . $user_id . '+negative'; ++ ++// recieve channels' id ++ ++try { ++$positive_channel_id = get_channel_id($dbconn, $voting_channel_positive); ++} catch (Exception $ex) { ++ send_error(1, $ex->getMessage()); ++ die(); ++} ++ ++try { ++$negative_channel_id = get_channel_id($dbconn, $voting_channel_negative); ++} catch (Exception $ex) { ++ send_error(1, $ex->getMessage()); ++ die(); ++} ++ ++$channel_array = array(); ++$channel_array[0] = $positive_channel_id; ++$channel_array[1] = $negative_channel_id; ++$channel_array[2] = $user_id; ++ ++// write tag ++try { ++$change_vote_for_point = change_vote($dbconn, $latitude, $longitude, $altitude, $channel_array, $vote); ++} catch (Exception $ex) { ++ send_error(1, $ex->getMessage()); ++ die(); ++} ++ ++$xml = ''; ++ ++$xml_vote = htmlspecialchars($change_vote_for_point); ++ ++ ++$xml .= "${xml_vote}"; ++ ++send_result(0, 'success', $xml); ++?> +diff --git a/service/datatypes/point.inc b/service/datatypes/point.inc +index b07dcb8..f51e8b2 100644 +--- a/service/datatypes/point.inc ++++ b/service/datatypes/point.inc +@@ -14,6 +14,10 @@ class Point { + public $altitude = 0; + public $time; + public $uuid; ++ public $rating = 0; ++ public $rating_positive = 0; ++ public $rating_negative = 0; ++ + + public $access = true; + public $category_id; +@@ -124,7 +128,9 @@ class Point { + + $xml .= '' . htmlspecialchars($this->time) . ''; + $xml .= '' . htmlspecialchars($this->uuid) . ''; +- ++ $xml .= '' . htmlspecialchars($this->rating) . ''; ++ $xml .= '' . htmlspecialchars($this->rating_positive) . ''; ++ $xml .= '' . htmlspecialchars($this->rating_negative) . ''; + $xml .= '' . ($this->access ? "rw" : "r") . ''; + + if ($this->category_id) { +@@ -184,12 +190,16 @@ class Point { + $point->uuid = $row[7]; + } + +- if (array_key_exists(9, $row)) { +- $point->category_id = (int) $row[9]; ++ $point->rating_positive = $row[8]; ++ $point->rating_negative = $row[9]; ++ $point->rating = $row[8]-$row[9]; ++ ++ if (array_key_exists(10, $row)) { ++ $point->category_id = (int) $row[10]; + } + +- if (array_key_exists(8, $row)) { +- $point->access = $row[8] === 't'; ++ if (array_key_exists(11, $row)) { ++ $point->access = $row[11] === 't'; + } + + return $point; +diff --git a/service/deleteVoteForTag.php b/service/deleteVoteForTag.php +new file mode 100644 +index 0000000..db66f7e +--- /dev/null ++++ b/service/deleteVoteForTag.php +@@ -0,0 +1,103 @@ ++loadXML($xml_post); ++ ++if (!$dom) { ++ send_error(1, 'Error: resource isn\'t XML document.'); ++ die(); ++} ++ ++if (!$dom->schemaValidate('schemes/deleteVoteForTag.xsd')) { ++ send_error(1, 'Error: not valid input XML document.'); ++ die(); ++} ++ ++$auth_token_element = $dom->getElementsByTagName('auth_token'); ++$user_vote_element = $dom->getElementsByTagName('user_vote'); ++$latitude_element = $dom->getElementsByTagName('latitude'); ++$longitude_element = $dom->getElementsByTagName('longitude'); ++$altitude_element = $dom->getElementsByTagName('altitude'); ++ ++$auth_token = $auth_token_element->item(0)->nodeValue; ++$user_vote = $user_vote_element->item(0)->nodeValue; ++$latitude = $latitude_element->item(0)->nodeValue; ++$longitude = $longitude_element->item(0)->nodeValue; ++$altitude = $altitude_element->item(0)->nodeValue; ++ ++//recieve user's id ++auth_set_token($auth_token); ++$dbconn = pg_connect(GEO2TAG_DB_STRING); ++ ++try { ++ $user_db_id = auth_get_db_id($dbconn); ++} catch (Exception $ex) { ++ send_error(1, $ex->getMessage()); ++ die(); ++} ++ ++$user_id = (int) $user_db_id; ++ ++$channel_array = array(); ++ ++// recieve channels' id ++if ($user_vote == '1') { ++ $voting_channel_positive = 'vote+'. $user_id . '+positive'; ++try { ++ $positive_channel_id = get_channel_id($dbconn, $voting_channel_positive); ++} catch (Exception $ex) { ++ send_error(1, $ex->getMessage()); ++ die(); ++} ++ ++$channel_array[] = $positive_channel_id; ++} ++else if ($user_vote == '2') { ++ $voting_channel_negative = 'vote+' . $user_id . '+negative'; ++try { ++ $negative_channel_id = get_channel_id($dbconn, $voting_channel_negative); ++} catch (Exception $ex) { ++ send_error(1, $ex->getMessage()); ++ die(); ++} ++ ++$channel_array[] = $negative_channel_id; ++} ++ ++$channel_array[] = $user_id; ++ ++// delete tag ++try { ++ $delete_vote_for_point = delete_vote($dbconn, $latitude, $longitude, $altitude, $channel_array); ++} catch (Exception $ex) { ++ send_error(1, $ex->getMessage()); ++ die(); ++} ++ ++send_result(0, 'success', $delete_vote_for_point); ++?> +diff --git a/service/getUserVote.php b/service/getUserVote.php +new file mode 100644 +index 0000000..16802e9 +--- /dev/null ++++ b/service/getUserVote.php +@@ -0,0 +1,108 @@ ++loadXML($xml_post); ++ ++if (!$dom) { ++ send_error(1, 'Error: resource isn\'t XML document.'); ++ die(); ++} ++ ++if (!$dom->schemaValidate('schemes/getUserVote.xsd')) { ++ send_error(1, 'Error: not valid input XML document.'); ++ die(); ++} ++ ++$auth_token_element = $dom->getElementsByTagName('auth_token'); ++$latitude_element = $dom->getElementsByTagName('latitude'); ++$longitude_element = $dom->getElementsByTagName('longitude'); ++$altitude_element = $dom->getElementsByTagName('altitude'); ++ ++$auth_token = $auth_token_element->item(0)->nodeValue; ++$latitude = $latitude_element->item(0)->nodeValue; ++$longitude = $longitude_element->item(0)->nodeValue; ++$altitude = $altitude_element->item(0)->nodeValue; ++ ++//recieve user's id ++auth_set_token($auth_token); ++$dbconn = pg_connect(GEO2TAG_DB_STRING); ++ ++try { ++ $user_db_id = auth_get_db_id($dbconn); ++} catch (Exception $ex) { ++ send_error(1, $ex->getMessage()); ++ die(); ++} ++ ++$user_id = (int) $user_db_id; ++ ++$query = "SELECT channel.name FROM channel INNER JOIN tag ON channel.id = tag.channel_id "; ++$query .= "WHERE tag.latitude = ${latitude} AND tag.longitude = ${longitude} "; ++$query .= "AND tag.altitude = ${altitude} AND tag.user_id = ${user_id} AND (channel.name LIKE '%+positive' "; ++$query .= "OR channel.name LIKE '%+negative')"; ++ ++ ++if (!pg_query($dbconn, $query)) { ++ send_error(1, "Can't select tag (getUserVote)"); ++ die(); ++} else { ++ $result = pg_query($dbconn, $query); ++} ++ ++$row = pg_fetch_row($result); ++ ++if (!$row) { ++ ++$xml_type = htmlspecialchars('no vote'); ++$xml = "${xml_type}"; ++ ++send_result(0, 'success', $xml); ++} ++ ++else { ++ ++if(strstr($row[0], 'pos')) { ++ ++$channel_type = 'positive'; ++ ++} ++ ++if(strstr($row[0], 'neg')) { ++ ++$channel_type = 'negative'; ++ ++} ++ ++ ++$xml_type = htmlspecialchars($channel_type); ++$xml = "${xml_type}"; ++ ++send_result(0, 'success', $xml); ++ ++} ++?> +diff --git a/service/include/GoogleAuth.php b/service/include/GoogleAuth.php +index 78d85a2..0dc7664 100644 +--- a/service/include/GoogleAuth.php ++++ b/service/include/GoogleAuth.php +@@ -6,12 +6,14 @@ require_once 'config.php'; + require_once 'config.inc'; + + //http://oss.fruct.org/projects/gets/service/include/GoogleAuth.php ++/* + if (defined("AUTH_REDIRECT_URL")) { + $redirectUri = AUTH_REDIRECT_URL; + } else { + $redirectUri = 'http://' . GETS_SERVER_URL .'/include/GoogleAuth.php'; + } +-//$redirectUri = 'http://' . $_SERVER['HTTP_HOST'] . '/service/include/GoogleAuth.php'; ++*/ ++$redirectUri = 'http://gets.cs.petrsu.ru/gets-rating/gets/service/include/GoogleAuth.php'; + + $client = new Google_Client(); + $client->setAccessType('offline'); +diff --git a/service/include/config.inc b/service/include/config.inc +index 1af59eb..b5c812d 100644 +--- a/service/include/config.inc ++++ b/service/include/config.inc +@@ -1,19 +1,19 @@ + +diff --git a/service/include/voting.inc b/service/include/voting.inc +new file mode 100644 +index 0000000..6a7abb9 +--- /dev/null ++++ b/service/include/voting.inc +@@ -0,0 +1,255 @@ ++ +diff --git a/service/loadPoints.php b/service/loadPoints.php +index 56af28b..4618346 100644 +--- a/service/loadPoints.php ++++ b/service/loadPoints.php +@@ -2,14 +2,12 @@ + include_once('include/methods_url.inc'); + include_once('include/utils.inc'); + include_once('datatypes/point.inc'); +- + include_once('include/header.inc'); + + try { + $dom = get_input_dom('schemes/loadPoints.xsd'); + $gets_token = get_request_argument($dom, "auth_token", null); +- +- ++ + $auth_token = get_request_argument($dom, 'auth_token'); + $category_id = get_request_argument($dom, 'category_id'); + $space_arg = get_request_argument($dom, 'space'); +@@ -54,7 +52,7 @@ try { + } + + $email_where_arr[] = "users.email='${private_email_escaped}'"; +- $access_row = "users.email='${private_email_escaped}' AS permission"; ++ $access_row = "users.email='${private_email_escaped}'"; + } else { + $private_email = null; + $access_row = 'false AS permission'; +@@ -65,17 +63,35 @@ try { + $email_where_arr[] = "users.email='${email_escaped}'"; + } + +- $query = "SELECT DISTINCT ON(tag.id) tag.time, tag.label, tag.latitude, tag.longitude, +- tag.altitude, tag.description, tag.url, tag.id, ${access_row}, category.id FROM tag "; ++ ++ // rating and load points query ++ $query = "WITH rating_channels_positive AS (SELECT subscribe.channel_id FROM subscribe INNER JOIN channel ON channel.id=subscribe.channel_id ++ WHERE subscribe.user_id = 91 AND channel.name LIKE 'vote+%+positive'), "; ++ ++ $query .= "rating_channels_negative AS (SELECT subscribe.channel_id FROM subscribe INNER JOIN channel ON channel.id=subscribe.channel_id ++ WHERE subscribe.user_id = 91 AND channel.name LIKE 'vote+%+negative'), "; ++ ++ $query .= "rating_tags_positive AS (SELECT tag.id, tag.latitude, tag.longitude, tag.altitude, tag.label FROM tag ++ INNER JOIN rating_channels_positive ON tag.channel_id = rating_channels_positive.channel_id), "; ++ ++ $query .= "rating_tags_negative AS (SELECT tag.id, tag.latitude, tag.longitude, tag.altitude, tag.label FROM tag ++ INNER JOIN rating_channels_negative ON tag.channel_id = rating_channels_negative.channel_id), "; ++ ++ if ($access_row == 'false AS permission') { ++ $query .= "response_tags AS (SELECT DISTINCT ON(tag.id) tag.time, tag.label, tag.latitude, tag.longitude, tag.altitude, ++ tag.description, tag.url, tag.id as tid, category.id as cat FROM tag "; ++ } else { ++ $query .= "response_tags AS (SELECT DISTINCT ON(tag.id) tag.time, tag.label, tag.latitude, tag.longitude, tag.altitude, ++ tag.description, tag.url, tag.id as tid, ${access_row} as acc, category.id as cat FROM tag "; ++ } ++ + $query .= 'INNER JOIN channel ON tag.channel_id = channel.id '; + $query .= 'INNER JOIN subscribe ON channel.id = subscribe.channel_id '; + $query .= 'INNER JOIN users ON subscribe.user_id=users.id '; +- + $query .= 'INNER JOIN category ON safe_cast_to_json(channel.description)->>\'category_id\'=category.id::text '; + $query .= 'INNER JOIN users AS project_users ON category.owner_id = project_users.id '; +- ++ + $email_where = '(' . implode(' OR ', $email_where_arr) . ')'; +- + $where_arr[] = $email_where; + if ($category_id) { + $where_arr[] = "category.id=${category_id}"; +@@ -85,10 +101,58 @@ try { + + // Distance 'where' + if ($is_radius_filter) { +- $where_arr[] = "gets_geo_distance(tag.latitude, tag.longitude, ${latitude}, ${longitude}) < ${radius}"; ++ $where_arr[] = " gets_geo_distance(tag.latitude, tag.longitude, ${latitude}, ${longitude}) < ${radius}"; ++ } ++ ++ $query .= 'WHERE ' . implode(' AND ', $where_arr); ++ $query .= " AND channel.name NOT LIKE '%+positive' AND channel.name NOT LIKE '%+negative'), "; ++ ++ if ($access_row == 'false AS permission') { ++ $query .= 'response_tags_positive AS (SELECT response_tags.time, response_tags.label, response_tags.latitude, ++ response_tags.longitude, response_tags.altitude, response_tags.description, response_tags.url, response_tags.tid, ++ response_tags.cat, COUNT(rating_tags_positive.latitude) as positive_count FROM rating_tags_positive '; ++ ++ $query .= 'RIGHT JOIN response_tags USING (latitude, longitude, altitude) GROUP BY response_tags.latitude, response_tags.longitude, ++ response_tags.altitude, response_tags.label, response_tags.time, response_tags.description, response_tags.url, ++ response_tags.cat, response_tags.tid), '; ++ } else { ++ $query .= 'response_tags_positive AS (SELECT response_tags.time, response_tags.label, response_tags.latitude, response_tags.longitude, ++ response_tags.altitude, response_tags.description, response_tags.url, response_tags.tid, response_tags.acc, response_tags.cat, ++ COUNT(rating_tags_positive.latitude) as positive_count FROM rating_tags_positive '; ++ $query .= 'RIGHT JOIN response_tags USING (latitude, longitude, altitude) GROUP BY response_tags.latitude, response_tags.longitude, ++ response_tags.altitude, response_tags.label, response_tags.time, response_tags.description, response_tags.url, ++ response_tags.cat, response_tags.acc, response_tags.tid), '; ++ } ++ ++ if ($access_row == 'false AS permission') { ++ $query .= 'response_tags_negative AS (SELECT response_tags.time, response_tags.label, response_tags.latitude, response_tags.longitude, ++ response_tags.altitude, response_tags.description, response_tags.url, response_tags.tid, response_tags.cat, ++ COUNT(rating_tags_negative.latitude) as negative_count FROM rating_tags_negative '; ++ ++ $query .= 'RIGHT JOIN response_tags USING (latitude, longitude, altitude) GROUP BY response_tags.latitude, response_tags.longitude, ++ response_tags.altitude, response_tags.label, response_tags.time, response_tags.description, response_tags.url, ++ response_tags.cat, response_tags.tid) '; ++ } else { ++ $query .= 'response_tags_negative AS (SELECT response_tags.time, response_tags.label, response_tags.latitude, response_tags.longitude, ++ response_tags.altitude, response_tags.description, response_tags.url, response_tags.tid, response_tags.acc, response_tags.cat, ++ COUNT(rating_tags_negative.latitude) as negative_count FROM rating_tags_negative '; ++ $query .= 'RIGHT JOIN response_tags USING (latitude, longitude, altitude) GROUP BY response_tags.latitude, response_tags.longitude, ++ response_tags.altitude, response_tags.label, response_tags.time, response_tags.description, response_tags.url, ++ response_tags.cat, response_tags.acc, response_tags.tid) '; ++ } ++ ++ if ($access_row == 'false AS permission') { ++ $query .= 'SELECT response_tags_positive.time, response_tags_positive.label, response_tags_positive.latitude, response_tags_positive.longitude, ++ response_tags_positive.altitude, response_tags_positive.description, response_tags_positive.url, response_tags_positive.tid, ++ response_tags_positive.positive_count, response_tags_negative.negative_count, response_tags_positive.cat ++ FROM response_tags_positive INNER JOIN response_tags_negative USING (latitude, longitude)'; ++ } else { ++ $query .= 'SELECT response_tags_positive.time, response_tags_positive.label, response_tags_positive.latitude, response_tags_positive.longitude, ++ response_tags_positive.altitude, response_tags_positive.description, response_tags_positive.url, response_tags_positive.tid, ++ response_tags_positive.positive_count, response_tags_negative.negative_count, response_tags_positive.cat, response_tags_positive.acc ++ FROM response_tags_positive INNER JOIN response_tags_negative USING (latitude, longitude)'; + } + +- $query .= 'WHERE ' . implode(' AND ', $where_arr) . ' ORDER BY tag.id ASC, permission DESC;'; + $result = pg_query($dbconn, $query); + + $xml = ''; +@@ -107,9 +171,10 @@ try { + + send_result(0, 'success', $xml); + +- include_once('include/php-ga.inc'); ++ //include_once('include/php-ga.inc'); + } catch (GetsAuthException $e) { + send_error(1, "Can't revoke token"); + } catch (Exception $e) { + send_error($e->getCode(), $e->getMessage()); + } ++?> +\ No newline at end of file +diff --git a/service/voteForTag.php b/service/voteForTag.php +new file mode 100644 +index 0000000..91850b6 +--- /dev/null ++++ b/service/voteForTag.php +@@ -0,0 +1,107 @@ ++loadXML($xml_post); ++ ++if (!$dom) { ++ send_error(1, 'Error: resource isn\'t XML document.'); ++ die(); ++} ++ ++if (!$dom->schemaValidate('schemes/voteForTag.xsd')) { ++ send_error(1, 'Error: not valid input XML document.'); ++ die(); ++} ++ ++$auth_token_element = $dom->getElementsByTagName('auth_token'); ++$vote_id_element = $dom->getElementsByTagName('vote'); ++$latitude_element = $dom->getElementsByTagName('latitude'); ++$longitude_element = $dom->getElementsByTagName('longitude'); ++$altitude_element = $dom->getElementsByTagName('altitude'); ++ ++$auth_token = $auth_token_element->item(0)->nodeValue; ++$vote = $vote_id_element->item(0)->nodeValue; ++$latitude = $latitude_element->item(0)->nodeValue; ++$longitude = $longitude_element->item(0)->nodeValue; ++$altitude = $altitude_element->item(0)->nodeValue; ++ ++ ++//recieve user's id ++auth_set_token($auth_token); ++$dbconn = pg_connect(GEO2TAG_DB_STRING); ++ ++try { ++ $user_db_id = auth_get_db_id($dbconn); ++} catch (Exception $ex) { ++ send_error(1, $ex->getMessage()); ++ die(); ++} ++ ++$ch_user_id = (int) $user_db_id; ++ ++// add voting channels ++$description_array = array(); ++$description_array['description'] = 'channel for voting'; ++$description_array['category_id'] = 40; ++$description_array['lang'] = 'en_US'; ++$description_data = json_encode($description_array); ++ ++$ch_data_array = array(); ++$ch_data_array['name'] = 0; ++$ch_data_array['description'] = $description_data; ++$ch_data_array['url'] = 'no url'; ++$ch_data_array['owner_id'] = $ch_user_id; ++ ++$added_channel_array = add_voting_channels($dbconn, $ch_data_array, $ch_user_id); ++ ++if (!$added_channel_array) { ++ send_error(1, "No channel's id"); ++ die(); ++} ++ ++// subscribe admin on voting channels ++$admin_token=receive_public_token(); ++auth_set_token($admin_token); ++ ++$admin_subscribed_positive_channel = subscribe_voting_channel($dbconn, $added_channel_array[0]); ++$admin_subscribed_negative_channel = subscribe_voting_channel($dbconn, $added_channel_array[1]); ++ ++// write tag in voting channel ++$voted_tag = write_tag_in_voting_channel($dbconn, $latitude, $longitude, $altitude, $added_channel_array, $vote); ++if (!$voted_tag) { ++ send_error(1, "Can't write voting tag in DB"); ++ die(); ++} ++ ++$xml = ''; ++$xml_vote = htmlspecialchars($voted_tag); ++$xml .= "${xml_vote}"; ++$xml .= ''; ++ ++send_result(0, 'success', $xml); ++?> +diff --git a/web-client/dist/actions/changeVote.php b/web-client/dist/actions/changeVote.php +new file mode 100644 +index 0000000..2ce4533 +--- /dev/null ++++ b/web-client/dist/actions/changeVote.php +@@ -0,0 +1,25 @@ ++1User doesn\'t authorize'); ++} ++ ++if (filter_input(INPUT_SERVER, 'REQUEST_METHOD') == 'POST') { ++ $post_data_json = file_get_contents('php://input'); ++ $post_data_array = json_decode($post_data_json, true); ++ $auth_token_array = array(); ++ $auth_token_array['auth_token'] = $_SESSION['g2t_token']; ++ $combined_array = array_merge($auth_token_array, $post_data_array); ++ $data = array2xml($combined_array, 'params', false); ++ echo process_request(CHANGE_VOTE_FOR_POINT_METHOD_URL, '' . $data . '', 'Content-Type: text/xml'); ++} else { ++ die('1Not POST request'); ++} ++?> +\ No newline at end of file +diff --git a/web-client/dist/actions/deleteVote.php b/web-client/dist/actions/deleteVote.php +new file mode 100644 +index 0000000..be148ce +--- /dev/null ++++ b/web-client/dist/actions/deleteVote.php +@@ -0,0 +1,25 @@ ++1User doesn\'t authorize'); ++} ++ ++if (filter_input(INPUT_SERVER, 'REQUEST_METHOD') == 'POST') { ++ $post_data_json = file_get_contents('php://input'); ++ $post_data_array = json_decode($post_data_json, true); ++ $auth_token_array = array(); ++ $auth_token_array['auth_token'] = $_SESSION['g2t_token']; ++ $combined_array = array_merge($auth_token_array, $post_data_array); ++ $data = array2xml($combined_array, 'params', false); ++ echo process_request(DELETE_VOTE_FOR_POINT_METHOD_URL, '' . $data . '', 'Content-Type: text/xml'); ++} else { ++ die('1Not POST request'); ++} ++?> +\ No newline at end of file +diff --git a/web-client/dist/actions/generateActionNames.php b/web-client/dist/actions/generateActionNames.php +index 855d91d..2212802 100644 +--- a/web-client/dist/actions/generateActionNames.php ++++ b/web-client/dist/actions/generateActionNames.php +@@ -18,7 +18,10 @@ $js_file .= 'var UPDATE_POINT_ACTION = "' . $base_url . 'updatePoint.php";'; + $js_file .= 'var UPLOAD_FILE_ACTION = "' . $base_url . 'uploadFile.php";'; + $js_file .= 'var PUBLISH_ACTION = "' . $base_url . 'publish.php";'; + $js_file .= 'var UNPUBLISH_ACTION = "' . $base_url . 'unpublish.php";'; +- ++$js_file .= 'var VOTE_FOR_POINT_ACTION = "' . $base_url . 'voteForPoint.php";'; ++$js_file .= 'var GET_USER_VOTE_ACTION = "' . $base_url . 'getVote.php";'; ++$js_file .= 'var CHANGE_VOTE_ACTION = "' . $base_url . 'changeVote.php";'; ++$js_file .= 'var DELETE_VOTE_ACTION = "' . $base_url . 'deleteVote.php";'; + $js_file .= 'var RETRANSLATOR_ACTION = "' . $base_url . 'retranslator.php";'; + + echo $js_file; +diff --git a/web-client/dist/actions/getVote.php b/web-client/dist/actions/getVote.php +new file mode 100644 +index 0000000..550c20f +--- /dev/null ++++ b/web-client/dist/actions/getVote.php +@@ -0,0 +1,25 @@ ++1User doesn\'t authorize'); ++} ++ ++if (filter_input(INPUT_SERVER, 'REQUEST_METHOD') == 'POST') { ++ $post_data_json = file_get_contents('php://input'); ++ $post_data_array = json_decode($post_data_json, true); ++ $auth_token_array = array(); ++ $auth_token_array['auth_token'] = $_SESSION['g2t_token']; ++ $combined_array = array_merge($auth_token_array, $post_data_array); ++ $data = array2xml($combined_array, 'params', false); ++ echo process_request(GET_VOTE_FOR_POINT_METHOD_URL, '' . $data . '', 'Content-Type: text/xml'); ++} else { ++ die('1Not POST request'); ++} ++?> +\ No newline at end of file +diff --git a/web-client/dist/actions/utils/config.inc b/web-client/dist/actions/utils/config.inc +index 444f594..5a8683f 100644 +--- a/web-client/dist/actions/utils/config.inc ++++ b/web-client/dist/actions/utils/config.inc +@@ -1,5 +1,6 @@ + +\ No newline at end of file +diff --git a/web-client/dist/actions/utils/methods_url.inc b/web-client/dist/actions/utils/methods_url.inc +index a1e975f..98f0de8 100644 +--- a/web-client/dist/actions/utils/methods_url.inc ++++ b/web-client/dist/actions/utils/methods_url.inc +@@ -22,4 +22,8 @@ define('USER_LOGIN', 'http://' . GETS_SERVER_URL . 'userLogin.php'); + define('UPDATE_POINT', 'http://' . GETS_SERVER_URL . 'updatePoint.php'); + define('PUBLISH', 'http://' . GETS_SERVER_URL . 'publish.php'); + define('UNPUBLISH', 'http://' . GETS_SERVER_URL . 'unpublish.php'); ++define('VOTE_FOR_POINT_METHOD_URL', 'http://' . GETS_SERVER_URL . 'voteForTag.php'); ++define('GET_VOTE_FOR_POINT_METHOD_URL', 'http://' . GETS_SERVER_URL . 'getUserVote.php'); ++define('CHANGE_VOTE_FOR_POINT_METHOD_URL', 'http://' . GETS_SERVER_URL . 'changeVoteForTag.php'); ++define('DELETE_VOTE_FOR_POINT_METHOD_URL', 'http://' . GETS_SERVER_URL . 'deleteVoteForTag.php'); + ?> +\ No newline at end of file +diff --git a/web-client/dist/actions/voteForPoint.php b/web-client/dist/actions/voteForPoint.php +new file mode 100644 +index 0000000..6125f8d +--- /dev/null ++++ b/web-client/dist/actions/voteForPoint.php +@@ -0,0 +1,25 @@ ++1User doesn\'t authorize'); ++} ++ ++if (filter_input(INPUT_SERVER, 'REQUEST_METHOD') == 'POST') { ++ $post_data_json = file_get_contents('php://input'); ++ $post_data_array = json_decode($post_data_json, true); ++ $auth_token_array = array(); ++ $auth_token_array['auth_token'] = $_SESSION['g2t_token']; ++ $combined_array = array_merge($auth_token_array, $post_data_array); ++ $data = array2xml($combined_array, 'params', false); ++ echo process_request(VOTE_FOR_POINT_METHOD_URL, '' . $data . '', 'Content-Type: text/xml'); ++} else { ++ die('1Not POST request'); ++} ++?> +\ No newline at end of file +diff --git a/web-client/dist/scripts/gets/controllers/PointsPage.Ctrl.js b/web-client/dist/scripts/gets/controllers/PointsPage.Ctrl.js +index 7e67205..cbb003c 100644 +--- a/web-client/dist/scripts/gets/controllers/PointsPage.Ctrl.js ++++ b/web-client/dist/scripts/gets/controllers/PointsPage.Ctrl.js +@@ -465,7 +465,175 @@ PointsPage.prototype.initPage = function() { + } + } + }); ++ ++ ++ // Vote for point (positive) handler ++ $(this.document).on('click', '#point-info-vote-like', function(e) { ++ e.preventDefault(); ++ ++ var userVotePositive = self._points.getUserVotePositive(); ++ var userVoteNegative = self._points.getUserVoteNegative(); ++ ++ // Positive vote and no negative vote ++ if(userVotePositive && !userVoteNegative) { ++ //MessageBox.showMessage('You have already voted for this point, but you can change your mind (click "Dislike")', MessageBox.SUCCESS_MESSAGE); ++ try { ++ // Delete user's vote on positive vote and change button's icon ++ self._points.deleteVoteForPoint('1'); ++ self._pointInfo.changeVoteButtonClass('#point-info-vote-like', 'glyphicon-star', 'glyphicon-star-empty'); ++ ++ // MessageBox.showMessage('Your vote was deleted', MessageBox.SUCCESS_MESSAGE); ++ ++ // Get and show points' info with new rating from server ++ var formData = $(self.document).find('#point-main-form').serializeArray(); ++ self._points.downLoadPoints(formData, function () { ++ var pointList = self._points.getPointList(); ++ ++ // Show new points' info ++ self.showPointInfo(); ++ }); ++ } catch (Exception) { ++ MessageBox.showMessage(Exception.toString(), MessageBox.ERROR_MESSAGE); ++ } ++ } ++ ++ // No positive vote and negative vote ++ if(!userVotePositive && userVoteNegative) { ++ try { ++ // Change user's vote on positive vote and change buttons' icons ++ self._points.changeVoteForPoint('1'); ++ self._pointInfo.changeVoteButtonClass('#point-info-vote-like', 'glyphicon-star-empty', 'glyphicon-star'); ++ self._pointInfo.changeVoteButtonClass('#point-info-vote-dislike', 'glyphicon-star', 'glyphicon-star-empty'); ++ ++ // MessageBox.showMessage('Your vote was changed on "Like"', MessageBox.SUCCESS_MESSAGE); ++ ++ // Get and show points' info with new rating from server ++ var formData = $(self.document).find('#point-main-form').serializeArray(); ++ self._points.downLoadPoints(formData, function () { ++ var pointList = self._points.getPointList(); ++ ++ // Show new points' info ++ self.showPointInfo(); ++ }); ++ } catch (Exception) { ++ MessageBox.showMessage(Exception.toString(), MessageBox.ERROR_MESSAGE); ++ } ++ } ++ // No positive vote and no negative vote ++ if(!userVotePositive && !userVoteNegative) { ++ try { ++ // Accept user's positive vote and change buttons' icons ++ self._points.voteForPoint('1'); ++ self._pointInfo.changeVoteButtonClass('#point-info-vote-like', 'glyphicon-star-empty', 'glyphicon-star'); ++ userVotePositive = self._points.getUserVotePositive(); ++ ++ if(userVotePositive === 'voted first') { ++ // MessageBox.showMessage('Voted success ("Like")', MessageBox.SUCCESS_MESSAGE); ++ } ++ ++ // Get and show points' info with new rating from server ++ var formData = $(self.document).find('#point-main-form').serializeArray(); ++ self._points.downLoadPoints(formData, function () { ++ var pointList = self._points.getPointList(); ++ ++ // Show new points' info ++ self.showPointInfo(); ++ }); ++ ++ } catch (Exception) { ++ ++ MessageBox.showMessage(Exception.toString(), MessageBox.ERROR_MESSAGE); ++ } ++ ++ } ++ ++ }); + ++ ++ // Vote for point (negative) handler ++ $(this.document).on('click', '#point-info-vote-dislike', function(e) { ++ e.preventDefault(); ++ ++ var userVotePositive = self._points.getUserVotePositive(); ++ var userVoteNegative = self._points.getUserVoteNegative(); ++ ++ // No positive vote and negative vote ++ if(userVoteNegative && !userVotePositive) { ++ //MessageBox.showMessage('You have already voted for this point, but you can change your mind (click "Like")', MessageBox.SUCCESS_MESSAGE); ++ try { ++ // Delete user's vote on positive vote and change button's icon ++ self._points.deleteVoteForPoint('2'); ++ self._pointInfo.changeVoteButtonClass('#point-info-vote-dislike', 'glyphicon-star', 'glyphicon-star-empty'); ++ ++ // MessageBox.showMessage('Your vote was deleted', MessageBox.SUCCESS_MESSAGE); ++ ++ // Get and show points' info with new rating from server ++ var formData = $(self.document).find('#point-main-form').serializeArray(); ++ self._points.downLoadPoints(formData, function () { ++ var pointList = self._points.getPointList(); ++ ++ // Show new points' info ++ self.showPointInfo(); ++ }); ++ } catch (Exception) { ++ MessageBox.showMessage(Exception.toString(), MessageBox.ERROR_MESSAGE); ++ } ++ ++ } ++ ++ // Positive vote and no negative vote ++ if(userVotePositive && !userVoteNegative) { ++ try { ++ // Change user's vote on negative vote and change buttons' icons ++ self._points.changeVoteForPoint('-1'); ++ self._pointInfo.changeVoteButtonClass('#point-info-vote-dislike', 'glyphicon-star-empty', 'glyphicon-star'); ++ self._pointInfo.changeVoteButtonClass('#point-info-vote-like', 'glyphicon-star', 'glyphicon-star-empty'); ++ ++ // MessageBox.showMessage('Your vote changed on "Dislike"', MessageBox.SUCCESS_MESSAGE); ++ ++ // Get and show points' info with new rating from server ++ var formData = $(self.document).find('#point-main-form').serializeArray(); ++ self._points.downLoadPoints(formData, function () { ++ var pointList = self._points.getPointList(); ++ ++ // Show new points' info ++ self.showPointInfo(); ++ }); ++ ++ } catch (Exception) { ++ MessageBox.showMessage(Exception.toString(), MessageBox.ERROR_MESSAGE); ++ } ++ } ++ ++ // No positive vote and no negative vote ++ if(!userVotePositive && !userVoteNegative) { ++ try { ++ // Accept user's negative vote and change buttons' icons ++ self._points.voteForPoint('-1'); ++ self._pointInfo.changeVoteButtonClass('#point-info-vote-dislike', 'glyphicon-star', 'glyphicon-star-empty'); ++ ++ userVoteNegative = self._points.getUserVoteNegative(); ++ ++ if(userVoteNegative === 'voted first') { ++ //MessageBox.showMessage('Voted success ("Dislike")', MessageBox.SUCCESS_MESSAGE); ++ } ++ ++ // Get and show points' info with new rating from server ++ var formData = $(self.document).find('#point-main-form').serializeArray(); ++ self._points.downLoadPoints(formData, function () { ++ var pointList = self._points.getPointList(); ++ ++ // Show new points' info ++ self.showPointInfo(); ++ }); ++ ++ } catch (Exception) { ++ MessageBox.showMessage(Exception.toString(), MessageBox.ERROR_MESSAGE); ++ } ++ } ++ }); ++ ++ + this.downloadPointsHandler(); + // get user's coordinates + if (this.window.navigator.geolocation) { +@@ -517,6 +685,7 @@ PointsPage.prototype.showPointsMain = function() { + }; + + PointsPage.prototype.showPointInfo = function() { ++ + try { + this._headerView.changeOption($(this._pointInfo.getView()).data('pagetitle'), 'glyphicon-chevron-left', '#form=main'); + +@@ -525,9 +694,37 @@ PointsPage.prototype.showPointInfo = function() { + throw new GetsWebClientException('Track Page Error', 'showPointInfo, hash parameter point uuid undefined'); + } + this._points.findPointInPointList(pointUUID); +- ++ + Logger.debug(this._points.getPoint()); +- this._pointInfo.placePointInPointInfo(this._points.getPoint(), this._user.isLoggedIn()); ++ ++ var userVote = null; ++ ++ if (this._user.isLoggedIn()) { ++ this._points.getUserVote(); ++ userVote = this._points.getVote(); ++ } ++ ++ // Clear positive and negative votes ++ this._points.setUserVoteNegative(null); ++ this._points.setUserVotePositive(null); ++ ++ // Set user's vote for point (positive vote) ++ if (this._points.userVote === 1) { ++ this._points.setUserVoteNegative(null); ++ this._points.setUserVotePositive('already voted'); ++ } ++ // Set user's vote for point (negative vote) ++ if (this._points.userVote === 2) { ++ this._points.setUserVoteNegative('already voted'); ++ this._points.setUserVotePositive(null); ++ } ++ // Set user's vote for point (no vote (user hasn't voted yet)) ++ if (this._points.userVote === 3) { ++ this._points.setUserVoteNegative(null); ++ this._points.setUserVotePositive(null); ++ } ++ ++ this._pointInfo.placePointInPointInfo(this._points.getPoint(), this._user.isLoggedIn(), userVote); + + this.currentView.hideView(); + this.currentView = this._pointInfo; +@@ -609,12 +806,14 @@ PointsPage.prototype.downloadPointsHandler = function() { + + this._points.downLoadPoints(formData, function () { + var pointList = that._points.getPointList(); ++ + that._mapCtrl.removePointsFromMap(); + that._pointsMain.placePointsInPointList(pointList); + that._mapCtrl.placePointsOnMap(pointList, { + url: '#form=' + PointsPage.POINT_INFO + '&point_uuid=', + text: $(that._pointInfo.getView()).data('putpoint') + }); ++ + that._pointsMain.hideOverlay(); + }); + } catch (Exception) { +diff --git a/web-client/dist/scripts/gets/models/Points.Class.js b/web-client/dist/scripts/gets/models/Points.Class.js +index 29568ed..889dadd 100644 +--- a/web-client/dist/scripts/gets/models/Points.Class.js ++++ b/web-client/dist/scripts/gets/models/Points.Class.js +@@ -12,6 +12,9 @@ + */ + function PointsClass() { + this.pointList = null; ++ this.userVote = null; ++ this.userVotePositive = null; ++ this.userVoteNegative = null; + this.point = null; + this.needPointListUpdate = false; + this.needPointUpdate = false; +@@ -345,6 +348,233 @@ PointsClass.prototype.removePoint = function (callback) { + } + }; + ++/** ++ * Vote for point ++ * ++ * @param {String} vote user's vote (positive or negative). ++ */ ++ ++PointsClass.prototype.voteForPoint = function (vote, callback) { ++ var point = this.getPoint(); ++ if (point.latitude === 0) { ++ throw new GetsWebClientException('Points Error', 'voteForPoint, getPoint - no point'); ++ } ++ ++ var request = {}; ++ var coords = point.coordinates.split(','); ++ request.latitude = coords[1]; ++ request.longitude = coords[0]; ++ request.altitude = coords[2]; ++ request.vote = vote; ++ ++ var voteForPointRequest = $.ajax({ ++ url: VOTE_FOR_POINT_ACTION, ++ type: 'POST', ++ async: false, ++ contentType: 'application/json', ++ dataType: 'xml', ++ data: JSON.stringify(request) ++ }); ++ ++ point_uiid = point.uuid; ++ voteForPointRequest.fail(function(jqXHR, textStatus) { ++ throw new GetsWebClientException('Points Error', 'voteForPoint, voteForPointRequest failed ' + textStatus); ++ }); ++ ++ if (($(voteForPointRequest.responseText).find('vote').text() === 'already voted') && (vote === '1')) { ++ this.userVotePositive = 'already voted'; ++ } ++ if (($(voteForPointRequest.responseText).find('vote').text() === 'already voted') && (vote === '-1')) { ++ this.userVoteNegative = 'already voted'; ++ } ++ ++ if (($(voteForPointRequest.responseText).find('vote').text() === 'voted first') && (vote === '1')) { ++ this.userVotePositive = 'voted first'; ++ } ++ ++ if (($(voteForPointRequest.responseText).find('vote').text() === 'voted first') && (vote === '-1')) { ++ this.userVoteNegative = 'voted first'; ++ } ++ ++ if ($(voteForPointRequest.responseText).find('code').text() !== '0') { ++ throw new GetsWebClientException('Points Error', ' ' + $(voteForPointRequest.responseText).find('message').text()); ++ } ++ ++ if (callback) { ++ callback(); ++ } ++ ++}; ++ ++/** ++ * Get user's vote for point ++ * ++ * ++ */ ++ ++PointsClass.prototype.getUserVote = function () { ++ var point = this.getPoint(); ++ if (!point) { ++ throw new GetsWebClientException('Points Error', 'getUserVote, no point'); ++ } ++ ++ var request = {}; ++ var coords = point.coordinates.split(','); ++ request.latitude = coords[1]; ++ request.longitude = coords[0]; ++ request.altitude = coords[2]; ++ ++ var getUserVoteRequest = $.ajax({ ++ url: GET_USER_VOTE_ACTION, ++ type: 'POST', ++ async: false, ++ contentType: 'application/json', ++ dataType: 'xml', ++ data: JSON.stringify(request) ++ }); ++ ++ getUserVoteRequest.fail(function(jqXHR, textStatus) { ++ if (textStatus !== "User doesn't authorize") { ++ throw new GetsWebClientException('Points Error', 'getUserVoteRequest failed ' + textStatus); ++ } ++ }); ++ ++ getUserVoteRequest.fail(function(jqXHR, textStatus) { ++ throw new GetsWebClientException('Points Error', 'getUserVoteRequest failed ' + textStatus); ++ }); ++ ++ if ($(getUserVoteRequest.responseText).find('code').text() !== '0') { ++ throw new GetsWebClientException('Channel Error', 'getUserVoteRequest, ' + $(getUserVoteRequest.responseText).find('message').text()); ++ } ++ ++ //Logger.debug(jqXHR.responseText); ++ var channelTypeElement = null; ++ channelTypeElement = $(getUserVoteRequest.responseText).find('type').length ? $(getUserVoteRequest.responseText).find('type').text() : ''; ++ ++ var channelType = null; ++ ++ if(channelTypeElement === 'positive') { ++ channelType = 1; ++ } ++ else if(channelTypeElement === 'negative') { ++ channelType = 2; ++ } ++ else if(channelTypeElement === 'no vote') { ++ channelType = 3; ++ } ++ ++ this.userVote = channelType; ++ ++}; ++ ++/** ++ * Change user's vote for point ++ * ++ * ++ */ ++ ++PointsClass.prototype.changeVoteForPoint = function (vote, callback) { ++ var point = this.getPoint(); ++ if (!point) { ++ throw new GetsWebClientException('Points Error', 'changeVoteForPoint, no point'); ++ } ++ ++ var request = {}; ++ var coords = point.coordinates.split(','); ++ request.latitude = coords[1]; ++ request.longitude = coords[0]; ++ request.altitude = coords[2]; ++ request.vote = vote; ++ ++ var changeVoteForPointRequest = $.ajax({ ++ url: CHANGE_VOTE_ACTION, ++ type: 'POST', ++ async: false, ++ contentType: 'application/json', ++ dataType: 'xml', ++ data: JSON.stringify(request) ++ }); ++ ++ changeVoteForPointRequest.fail(function(jqXHR, textStatus) { ++ throw new GetsWebClientException('Points Error', 'changeVoteForPoint, changeVoteForPointRequest failed ' + textStatus); ++ }); ++ ++ if (($(changeVoteForPointRequest.responseText).find('vote').text() !== null) && (vote =='1')) { ++ this.userVotePositive = 'voted'; ++ this.userVoteNegative = null; ++ } ++ if (($(changeVoteForPointRequest.responseText).find('vote').text() !== null) && (vote =='-1')) { ++ this.userVoteNegative = 'voted'; ++ this.userVotePositive = null; ++ } ++ ++ if ($(changeVoteForPointRequest.responseText).find('code').text() !== '0') { ++ throw new GetsWebClientException('Points Error', ' ' + $(changeVoteForPointRequest.responseText).find('message').text()); ++ } ++ ++ if (callback) { ++ callback(); ++ } ++ ++}; ++ ++/** ++ * Delete user's vote for point ++ * ++ * ++ */ ++ ++PointsClass.prototype.deleteVoteForPoint = function (userVote, callback) { ++ ++/* ++ var userVote = this.getVote(); ++ if (!userVote) { ++ throw new GetsWebClientException('Points Error', 'deleteVoteForPoint, no userVote'); ++ } ++*/ ++ var point = this.getPoint(); ++ if (!point) { ++ throw new GetsWebClientException('Points Error', 'deleteVoteForPoint, no point'); ++ } ++ ++ var request = {}; ++ var coords = point.coordinates.split(','); ++ request.latitude = coords[1]; ++ request.longitude = coords[0]; ++ request.altitude = coords[2]; ++ request.user_vote = userVote; ++ ++ var deleteVoteForPointRequest = $.ajax({ ++ url: DELETE_VOTE_ACTION, ++ type: 'POST', ++ async: false, ++ contentType: 'application/json', ++ dataType: 'xml', ++ data: JSON.stringify(request) ++ }); ++ ++ deleteVoteForPointRequest.fail(function(jqXHR, textStatus) { ++ throw new GetsWebClientException('Points Error', 'deleteVoteForPoint, deleteVoteForPointRequest failed ' + textStatus); ++ }); ++ ++ if (($(deleteVoteForPointRequest.responseText).find('code').text() === '0') && (userVote === '1')) { ++ this.userVotePositive = null; ++ } ++ ++ if (($(deleteVoteForPointRequest.responseText).find('code').text() === '0') && (userVote === '2')) { ++ this.userVoteNegative = null; ++ } ++ ++ if ($(deleteVoteForPointRequest.responseText).find('code').text() !== '0') { ++ throw new GetsWebClientException('Points Error', ' ' + $(deleteVoteForPointRequest.responseText).find('message').text()); ++ } ++ ++ if (callback) { ++ callback(); ++ } ++ ++}; ++ + PointsClass.prototype.findPointInPointList = function(uuid) { + if (!uuid || !this.pointList) { + return; +@@ -357,6 +587,17 @@ PointsClass.prototype.findPointInPointList = function(uuid) { + } + }; + ++ ++PointsClass.prototype.setUserVoteNegative = function(status) { ++ this.userVoteNegative = status; ++ return this.userVoteNegative; ++}; ++ ++PointsClass.prototype.setUserVotePositive = function(status) { ++ this.userVotePositive = status; ++ return this.userVotePositive; ++}; ++ + /** + * Getters + */ +@@ -375,4 +616,21 @@ PointsClass.prototype.getPoint = function() { + + PointsClass.prototype.setPoint = function(point) { + this.point = point; +-}; +\ No newline at end of file ++}; ++ ++PointsClass.prototype.getUserVoteNegative = function() { ++ return this.userVoteNegative; ++}; ++ ++PointsClass.prototype.getVote = function() { ++ if (!this.userVote) { ++ throw new GetsWebClientException('Points Error', 'getVote, vote undefined or null'); ++ } ++ return this.userVote; ++}; ++ ++PointsClass.prototype.getUserVotePositive = function() { ++ return this.userVotePositive; ++}; ++ ++ +diff --git a/web-client/dist/scripts/gets/views/PointInfo.View.js b/web-client/dist/scripts/gets/views/PointInfo.View.js +index 11ba8fd..c87fc65 100644 +--- a/web-client/dist/scripts/gets/views/PointInfo.View.js ++++ b/web-client/dist/scripts/gets/views/PointInfo.View.js +@@ -22,7 +22,29 @@ function PointInfo(document, pointInfo) { + * @param {Object} point Object contains point info. + * @param {Boolean} isAuth Variable indicates is user authorized. + */ +-PointInfo.prototype.placePointInPointInfo = function(point, isAuth) { ++PointInfo.prototype.placePointInPointInfo = function(point, isAuth, userVote) { ++ ++ // Set "star-empty" buttons' icons ++ this.changeVoteButtonClass('#point-info-vote-like', 'glyphicon-star-empty', 'glyphicon-star-empty'); ++ this.changeVoteButtonClass('#point-info-vote-dislike', 'glyphicon-star-empty', 'glyphicon-star-empty'); ++ ++ // Show user's vote for point (positive vote) ++ if (userVote === 1) { ++ this.changeVoteButtonClass('#point-info-vote-like', 'glyphicon-star-empty', 'glyphicon-star'); ++ } ++ ++ // Show user's vote for point (negative vote) ++ if (userVote === 2) { ++ this.changeVoteButtonClass('#point-info-vote-dislike', 'glyphicon-star-empty', 'glyphicon-star'); ++ ++ } ++ ++ // Show user's vote for point (no vote (this user hasn't voted yet)) ++ if (userVote === 3) { ++ this.changeVoteButtonClass('#point-info-vote-like', 'glyphicon-star-empty', 'glyphicon-star-empty'); ++ this.changeVoteButtonClass('#point-info-vote-dislike', 'glyphicon-star-empty', 'glyphicon-star-empty'); ++ } ++ + // Get all elements + var nameElement = $(this.pointInfo).find('#point-info-name'); + var coordsElementLat = $(this.pointInfo).find('#point-info-coords-lat'); +@@ -103,20 +125,35 @@ PointInfo.prototype.placePointInPointInfo = function(point, isAuth) { + + var pointsInfoEdit = $('#point-info-edit'); + var pointsInfoRemove = $('#point-info-remove'); ++ var pointsVotePositive = $('#point-info-vote-like'); ++ var pointsVoteNegative = $('#point-info-vote-dislike'); + + $(pointsInfoEdit).attr('href', '#form=point_edit' + (point.track ? ('&track_id=' + point.track) : '') + '&point_uuid=' + point.uuid); + +- if (!isAuth || point.access === 'r') { ++ if ((!isAuth) || point.access === 'r') { + $(pointsInfoEdit).on('click', function(e) { + e.preventDefault(); + }); + $(pointsInfoEdit).addClass('disabled'); + $(pointsInfoRemove).addClass('disabled'); ++ + } else { + $(pointsInfoEdit).off('click'); +- $(pointsInfoEdit).removeClass('disabled'); +- $(pointsInfoRemove).removeClass('disabled'); ++ $(pointsInfoEdit).addClass('disabled'); ++ $(pointsInfoRemove).addClass('disabled'); ++ ++ } ++ ++ if (!isAuth) { ++ $(pointsVotePositive).addClass('disabled'); ++ $(pointsVoteNegative).addClass('disabled'); ++ } else { ++ $(pointsVotePositive).removeClass('disabled'); ++ $(pointsVoteNegative).removeClass('disabled'); ++ + } ++ ++ + }; + + PointInfo.prototype.getView = function() { +@@ -151,5 +188,8 @@ PointInfo.prototype.prevImage = function() { + $(photoElement).find('img').attr('src', this.photos[this.photoIndex]); + }; + +- ++PointInfo.prototype.changeVoteButtonClass = function(button_id, oldClass, newClass) { ++ $(button_id).find('span').removeClass(oldClass); ++ $(button_id).find('span').addClass(newClass); ++}; + +diff --git a/web-client/dist/widgets/PointInfo.inc b/web-client/dist/widgets/PointInfo.inc +index bf79634..068143a 100644 +--- a/web-client/dist/widgets/PointInfo.inc ++++ b/web-client/dist/widgets/PointInfo.inc +@@ -12,7 +12,7 @@ echo ' ++ + + +
+@@ -68,7 +68,20 @@ echo ' +
++ ++
++ +
+ '; +- +-?> +\ No newline at end of file ++?> +diff --git a/web-client/src/scripts/gets/controllers/PointsPage.Ctrl.js b/web-client/src/scripts/gets/controllers/PointsPage.Ctrl.js +index 7e67205..4c0cb6a 100644 +--- a/web-client/src/scripts/gets/controllers/PointsPage.Ctrl.js ++++ b/web-client/src/scripts/gets/controllers/PointsPage.Ctrl.js +@@ -12,6 +12,9 @@ + * @param {Object} window window dom object of the current page. + */ + function PointsPage(document, window) { ++ if (!window.hasOwnProperty('location')) { ++ throw new GetsWebClientException('Points Page Error', 'PointsPage, windowObj argument is not a window object'); ++ } + this.document = document; + this.window = window; + +@@ -27,8 +30,6 @@ function PointsPage(document, window) { + this._pointsMain = null; + this._headerView = null; + this._pointInfo = null; +- this._pointAdd = null; +- this._pointEdit = null; + + this.currentView = null; + } +@@ -36,8 +37,7 @@ function PointsPage(document, window) { + // Forms + PointsPage.MAIN = 'main'; + PointsPage.POINT_INFO = 'point_info'; +-PointsPage.ADD_POINT = 'point_add'; +-PointsPage.EDIT_POINT = 'point_edit'; ++PointsPage.ADD_POINT = 'add_point'; + + PointsPage.prototype.changeForm = function() { + var form = this._utils.getHashVar('form'); +@@ -47,11 +47,10 @@ PointsPage.prototype.changeForm = function() { + } else if (form === PointsPage.POINT_INFO) { + this.showPointInfo(); + } else if (form === PointsPage.ADD_POINT) { +- this.showAddPoint(); +- } else if (form === PointsPage.EDIT_POINT) { +- this.showEditPoint(); ++ //this.showAddPoint(); + } else if (typeof form === 'undefined') { +- this.window.location.replace('#form=' + PointsPage.MAIN); ++ this.window.location.hash = 'form=' + PointsPage.MAIN; ++ this.showPointsMain(); + } + }; + +@@ -60,38 +59,32 @@ PointsPage.prototype.initPage = function() { + + try { + // Init models +- if (!this._points) { ++ if (this._points == null) { + this._points = new PointsClass(); + } +- if (!this._categories) { ++ if (this._categories == null) { + this._categories = new CategoriesClass(); + } +- if (!this._user) { ++ if (this._user == null) { + this._user = new UserClass(this.window); + this._user.fetchAuthorizationStatus(); + Logger.debug('is Auth: ' + this._user.isLoggedIn()); + } +- if (!this._utils) { ++ if (this._utils == null) { + this._utils = new UtilsClass(this.window); + } + + // Init views +- if (!this._pointsMain) { ++ if (this._pointsMain == null) { + this._pointsMain = new PointsMain(this.document, $(this.document).find('#points-main-page')); + this._pointsMain.initView(this._user.isLoggedIn()); + } +- if (!this._headerView) { ++ if (this._headerView == null) { + this._headerView = new HeaderView(this.document, $(this.document).find('.navbar')); + } +- if (!this._pointInfo) { ++ if (this._pointInfo == null) { + this._pointInfo = new PointInfo(this.document, $(this.document).find('#point-info-page')); + } +- if (!this._pointAdd) { +- this._pointAdd = new PointAdd(this.document, $(this.document).find('#edit-point-page')); +- } +- if (!this._pointEdit) { +- this._pointEdit = new PointEdit(this.document, $(this.document).find('#edit-point-page')); +- } + + // Init map + if (this._mapCtrl == null) { +@@ -108,11 +101,20 @@ PointsPage.prototype.initPage = function() { + //Init first page + this.currentView = this._pointsMain; + this.changeForm(); +- ++ + // Init Points main + this._pointsMain.toggleOverlay(); + this._pointsMain.setLatitude(this._mapCtrl.getMapCenter().lat); + this._pointsMain.setLongitude(this._mapCtrl.getMapCenter().lng); ++ var formDataInit = $(this.document).find('#point-main-form').serializeArray(); ++ this._points.downLoadPoints(formDataInit, function() { ++ Logger.debug(self._points.getPointList()); ++ self._pointsMain.placePointsInPointList(self._points.getPointList()); ++ self._mapCtrl.removePointsFromMap(); ++ self._mapCtrl.placePointsOnMap(self._points.getPointList()); ++ ++ self._pointsMain.toggleOverlay(); ++ }); + + + // Hash change handler +@@ -120,7 +122,7 @@ PointsPage.prototype.initPage = function() { + Logger.debug('hashchanged'); + self.changeForm(); + }); +- ++ + // Sign in handler + $(this.document).on('click', '#sign-in-btn', function(e) { + e.preventDefault(); +@@ -130,106 +132,6 @@ PointsPage.prototype.initPage = function() { + // Sign out handler + $(this.document).on('click', '#sign-out-btn', function(e) { + e.preventDefault(); +- self._user.logout(); +- }); +- +- // Use default active radius +- $(this.document).on('change', '#edit-point-radius-default', function(e) { +- e.preventDefault(); +- if($(this).is(":checked")) { +- $(self.document).find('#edit-point-active-radius-input').val($(this).data('defaultValue')).attr('disabled', 'disabled'); +- Logger.debug('checked'); +- } else { +- $(self.document).find('#edit-point-active-radius-input').removeAttr('disabled'); +- } +- }); +- +- // Add Point Handler +- $(this.document).on('submit', '#edit-point-form', function(e) { +- e.preventDefault(); +- var form = self._utils.getHashVar('form'); +- if (form === PointsPage.ADD_POINT) { +- self.addPointHandler(this, false); +- } else if (form === PointsPage.EDIT_POINT) { +- self.addPointHandler(this, true); +- } +- }); +- +- /*$('.dropdown').hover( +- function () { +- $(this).addClass('open'); +- }, +- function () { +- $(this).removeClass('open'); +- } +- );*/ +- +- // Create/remove temp marker (Use map) handler +- $(this.document).on('click', '#edit-point-use-map', function (e){ +- e.preventDefault(); +- var form = self._utils.getHashVar('form'); +- if(!$(this).hasClass('active') && (form === PointsPage.ADD_POINT || form === PointsPage.EDIT_POINT)) { +- $(this).addClass('active'); +- var coords = null; +- var settings = $(self.document).find('#edit-point-use-map-settings li a.marked-list-item').data('item'); +- +- if (settings === 'center') { +- coords = self._mapCtrl.getMapCenter(); +- } else if (settings === 'location') { +- if (self._user.isCoordsSet()) { +- coords = self._user.getUsersGeoPosition(); +- } +- } +- +- self._pointAdd.setLatLng( +- Math.floor(coords.lat * 1000000) / 1000000, +- Math.floor(coords.lng * 1000000) / 1000000 +- ); +- self._mapCtrl.createTempMarker(coords.lat, coords.lng, function (position) { +- self._pointAdd.setLatLng( +- Math.floor(position.lat * 1000000) / 1000000, +- Math.floor(position.lng * 1000000) / 1000000 +- ); +- }); +- } else { +- $(this).removeClass('active'); +- self._mapCtrl.removeTempMarker(); +- } +- }); +- +- // Use different settings for Use map button +- $(this.document).on('click', '#edit-point-use-map-settings li a', function (e){ +- e.preventDefault(); +- +- $(self.document).find('#edit-point-use-map-settings li a').removeClass('marked-list-item'); +- +- if ($(this).hasClass('marked-list-item')) { +- $(this).removeClass('marked-list-item'); +- } else { +- $(this).addClass('marked-list-item'); +- } +- +- var useMapButton = $(self.document).find('#edit-point-use-map'); +- if($(useMapButton).hasClass('active')) { +- $(useMapButton).removeClass('active'); +- $(useMapButton).click(); +- } +- }); +- +- // Use different modes for coords input +- $(this.document).on('click', '#edit-point-coords-input-type li a', function (e){ +- e.preventDefault(); +- +- $(self.document).find('#edit-point-coords-input-type li a').removeClass('marked-list-item'); +- +- if ($(this).hasClass('marked-list-item')) { +- $(this).removeClass('marked-list-item'); +- } else { +- $(this).addClass('marked-list-item'); +- } +- +- var type = $(self.document).find('#edit-point-coords-input-type li a.marked-list-item').data('item'); +- self._pointAdd.switchCoordsInputFormat(type); + }); + + // Create/remove search area +@@ -250,12 +152,23 @@ PointsPage.prototype.initPage = function() { + + // + $(this.document).on('submit', '#point-main-form', function(e) { +- e.preventDefault(); +- self.downloadPointsHandler(); ++ e.preventDefault(); ++ self._pointsMain.toggleOverlay(); ++ ++ var formData = $(this).serializeArray(); ++ Logger.debug(formData); ++ self._points.downLoadPoints(formData, function() { ++ self._pointsMain.placePointsInPointList(self._points.getPointList(false)); ++ self._mapCtrl.placePointsOnMap(self._points.getPointList()); ++ ++ self._pointsMain.toggleOverlay(); ++ }); + }); +- ++ + //dragend +- this._mapCtrl.setMapCallback('dragend', function(e){ ++ this._mapCtrl.setMapCallback('dragend', function(e){ ++ self._pointsMain.toggleOverlay(); ++ + var center = self._mapCtrl.getMapCenter(); + self._pointsMain.setLatitude(Math.floor(center.lat * 10000) / 10000); + self._pointsMain.setLongitude(Math.floor(center.lng * 10000) / 10000); +@@ -265,219 +178,36 @@ PointsPage.prototype.initPage = function() { + self._pointsMain.getLongitude(), + self._pointsMain.getRadius() * 1000 + ); +- +- var size = self._mapCtrl.getMapSize(); +- if (size.x / 4 < e.distance || size.y / 4 < e.distance) { +- self.downloadPointsHandler(); +- } +- }); +- +- // upload picture show/hide handler +- $(this.document).on('click', '#edit-point-picture-toggle-upload', function (e){ +- e.preventDefault(); +- var upload = $(self.document).find('#edit-point-picture-upload'); +- if ($(upload).hasClass('hidden')) { +- $(upload).removeClass('hidden').addClass('show'); +- $(self.document).find('#edit-point-picture-input-url').attr('disabled', 'disabled'); +- // scroll to upload element +- $(self.document).find('#edit-point-page .action-menu-inner-content').animate({ +- scrollTop: $('#edit-point-picture-input-file-upload').offset().top +- }, 2000); +- } else { +- $(upload).removeClass('show').addClass('hidden'); +- $(self.document).find('#edit-point-picture-input-url').removeAttr('disabled'); +- } +- }); +- +- // Upload picture handler +- $(this.document).on('click', '#edit-point-picture-input-file-upload', function (e) { +- e.preventDefault(); +- self._pointAdd.toggleOverlay(); +- try { +- var imageFile = $(self.document).find('#edit-point-picture-input-file').get(0).files[0]; +- if (typeof imageFile !== 'undefined') { +- self._utils.uploadFile({ +- file: imageFile +- }, function (url) { +- $(self.document).find('.edit-point-picture-input-url').last().val(url); +- $(self.document).find('#edit-point-picture-upload').removeClass('show').addClass('hidden'); +- $(self.document).find('#edit-point-picture-input-url').removeAttr('disabled'); +- self._pointAdd.toggleOverlay(); +- }); +- } +- } catch (Exception) { +- MessageBox.showMessage(Exception.toString(), MessageBox.ERROR_MESSAGE); +- } +- }); +- +- $(this.document).on('change', '#edit-point-picture-input-file', function(e) { +- e.preventDefault(); +- if ($(this).val() !== '') { +- $(self.document).find('#edit-point-picture-input-file-upload').removeClass('disabled'); +- } else { +- $(self.document).find('#edit-point-picture-input-file-upload').addClass('disabled'); +- } +- }); +- +- // Clear file input handler +- $(this.document).on('click', '#edit-point-picture-input-file-clear', function(e) { +- e.preventDefault(); +- self._utils.resetFileInput($(self.document).find('#edit-point-picture-input-file')); +- }); +- +- $(this.document).on('click', '#edit-point-picture-input-file-cancel', function (e){ +- $(self.document).find('#edit-point-picture-upload').removeClass('show').addClass('hidden'); +- $(self.document).find('#edit-point-picture-input-url').removeAttr('disabled'); +- }); +- +- // photos controls +- $(this.document).on('click', '#point-info-image-prev', function (e){ +- e.preventDefault(); +- self._pointInfo.prevImage(); +- }); +- +- $(this.document).on('click', '#point-info-image-next', function (e){ +- e.preventDefault(); +- self._pointInfo.nextImage(); +- }); +- +- // handle add picture input +- $(this.document).on('click', '#edit-point-picture-add-input', function (e){ +- e.preventDefault(); +- try { +- self._pointAdd.addPictureInputField(); +- } catch (Exception) { +- Logger.debug(Exception.toString()); +- MessageBox.showMessage(Exception.toString(), MessageBox.WARNING_MESSAGE); +- } +- }); +- +- // handle delete picture input +- $(this.document).on('click', '#edit-point-picture-input-delete', function (e){ +- e.preventDefault(); +- self._pointAdd.deletePictureInputField($(this).data('pictureIndex')); +- }); +- +- // upload audio show/hide handler +- $(this.document).on('click', '#edit-point-audio-toggle-upload', function (e){ +- e.preventDefault(); +- var upload = $(self.document).find('#edit-point-audio-upload'); +- if ($(upload).hasClass('hidden')) { +- $(upload).removeClass('hidden').addClass('show'); +- $(self.document).find('#edit-point-audio-input-url').attr('disabled', 'disabled'); +- // scroll to upload element +- $(self.document).find('#edit-point-page .action-menu-inner-content').animate({ +- scrollTop: $('#edit-point-audio-input-file-upload').offset().top +- }, 2000); +- } else { +- $(upload).removeClass('show').addClass('hidden'); +- $(self.document).find('#edit-point-audio-input-url').removeAttr('disabled'); +- } +- }); +- +- // Upload audio handler +- $(this.document).on('click', '#edit-point-audio-input-file-upload', function (e) { +- e.preventDefault(); +- self._pointAdd.toggleOverlay(); +- try { +- var audioFile = $(self.document).find('#edit-point-audio-input-file').get(0).files[0]; +- if (typeof audioFile !== 'undefined') { +- self._utils.uploadFile({ +- file: audioFile +- }, function (url) { +- $(self.document).find('#edit-point-audio-input-url').val(url); +- $(self.document).find('#edit-point-audio-upload').removeClass('show').addClass('hidden'); +- $(self.document).find('#edit-point-audio-input-url').removeAttr('disabled'); +- self._pointAdd.toggleOverlay(); +- }); +- } +- } catch (Exception) { +- MessageBox.showMessage(Exception.toString(), MessageBox.ERROR_MESSAGE); +- } +- }); +- +- $(this.document).on('change', '#edit-point-audio-input-file', function(e) { +- e.preventDefault();//id="edit-point-audio-input-file-upload" +- if ($(this).val() !== '') { +- $(self.document).find('#edit-point-audio-input-file-upload').removeClass('disabled'); +- } else { +- $(self.document).find('#edit-point-audio-input-file-upload').addClass('disabled'); +- } +- }); +- +- // Clear file input handler +- $(this.document).on('click', '#edit-point-audio-input-file-clear', function(e) { +- e.preventDefault(); +- self._utils.resetFileInput($(self.document).find('#edit-point-audio-input-file')); +- }); +- +- $(this.document).on('click', '#edit-point-audio-input-file-cancel', function (e){ +- $(self.document).find('#edit-point-audio-upload').removeClass('show').addClass('hidden'); +- $(self.document).find('#edit-point-audio-input-url').removeAttr('disabled'); +- }); +- +- // Add field handler +- $(this.document).on('click', '#edit-point-add-field-open', function(e) { +- e.preventDefault(); +- if (!$(self.document).find('#edit-point-add-field-open-button').hasClass('hidden')) { +- $(self.document).find('#edit-point-add-field-open-button').addClass('hidden'); +- $(self.document).find('#edit-point-add-field-input-box').removeClass('hidden').addClass('show'); +- $(self.document).find('#edit-point-add-field-control-buttons').removeClass('hidden').addClass('show'); +- +- $(self.document).find('#edit-point-page .action-menu-inner-content').animate({ +- scrollTop: $('#edit-point-add-field-input-box').offset().top +- }, 2000); +- } +- }); +- +- $(this.document).on('click', '#edit-point-add-field-save', function(e) { +- e.preventDefault();//edit-point-add-field-save class="form-group" +- var extendedData = $(self.document).find('#edit-point-extended-data'); +- var extendedDataHTML = $(extendedData).html(); +- var fieldName = $(self.document).find('#edit-point-add-field-input-name').val(); +- var fieldValue = $(self.document).find('#edit-point-add-field-input-value').val(); +- extendedDataHTML += '
'; +- $(extendedData).html(extendedDataHTML); + +- // close +- $(self.document).find('#edit-point-add-field-cancel').click(); ++ var formDataInit = $(self.document).find('#point-main-form').serializeArray(); ++ self._points.downLoadPoints(formDataInit, function () { ++ self._pointsMain.placePointsInPointList(self._points.getPointList()); ++ self._mapCtrl.removePointsFromMap(); ++ self._mapCtrl.placePointsOnMap(self._points.getPointList()); ++ ++ self._pointsMain.toggleOverlay(); ++ }); + }); + +- // Close add field handler +- $(this.document).on('click', '#edit-point-add-field-cancel', function(e) { +- e.preventDefault(); +- $(self.document).find('#edit-point-add-field-input').val(''); +- $(self.document).find('#edit-point-add-field-open-button').removeClass('hidden').addClass('show'); +- $(self.document).find('#edit-point-add-field-input-box').removeClass('show').addClass('hidden'); +- $(self.document).find('#edit-point-add-field-control-buttons').removeClass('show').addClass('hidden'); +- }); +- +- // Remove point handler +- $(this.document).on('click', '#point-info-remove', function(e) { +- e.preventDefault(); +- if (confirm($(self._pointInfo.getView()).find('#point-info-remove').data('removetext'))) { +- try { +- self._points.removePoint(); +- self.window.location.replace('#form=' + PointsPage.MAIN); +- MessageBox.showMessage($(self._pointInfo.getView()).data('messagesuccessRemove'), MessageBox.SUCCESS_MESSAGE); +- } catch (Exception) { +- MessageBox.showMessage(Exception.toString(), MessageBox.ERROR_MESSAGE); +- } +- } +- }); + +- this.downloadPointsHandler(); + // get user's coordinates + if (this.window.navigator.geolocation) { +- this.window.navigator.geolocation.getCurrentPosition(function(position) { ++ this.window.navigator.geolocation.getCurrentPosition(function(position) { ++ self._pointsMain.toggleOverlay(); ++ + Logger.debug(position); + self._user.setUserGeoPosition(position); + self._mapCtrl.setMapCenter(position.coords.latitude, position.coords.longitude); + self._pointsMain.setLatitude(Math.floor(position.coords.latitude * 10000) / 10000); + self._pointsMain.setLongitude(Math.floor(position.coords.longitude * 10000) / 10000); +- +- self.downloadPointsHandler(); +- ++ var formDataInit = $(self.document).find('#point-main-form').serializeArray(); ++ self._points.downLoadPoints(formDataInit, function() { ++ self._pointsMain.placePointsInPointList(self._points.getPointList()); ++ self._mapCtrl.removePointsFromMap(); ++ self._mapCtrl.placePointsOnMap(self._points.getPointList()); ++ ++ self._pointsMain.toggleOverlay(); ++ }); + }, this.handleGeoLocationError); + } else { + Logger.debug('geolocation is not supported by this browser'); +@@ -518,15 +248,14 @@ PointsPage.prototype.showPointsMain = function() { + + PointsPage.prototype.showPointInfo = function() { + try { +- this._headerView.changeOption($(this._pointInfo.getView()).data('pagetitle'), 'glyphicon-chevron-left', '#form=main'); ++ this._headerView.changeOption('Point Info', 'glyphicon-chevron-left', '#form=main'); + +- var pointUUID = decodeURIComponent(this._utils.getHashVar('point_uuid')); +- if (!pointUUID) { +- throw new GetsWebClientException('Track Page Error', 'showPointInfo, hash parameter point uuid undefined'); ++ var pointName = decodeURIComponent(this._utils.getHashVar('point_name')); ++ if (!pointName) { ++ throw new GetsWebClientException('Track Page Error', 'showPointInfo, hash parameter pointName undefined'); + } +- this._points.findPointInPointList(pointUUID); ++ this._points.findPointInPointList(pointName); + +- Logger.debug(this._points.getPoint()); + this._pointInfo.placePointInPointInfo(this._points.getPoint(), this._user.isLoggedIn()); + + this.currentView.hideView(); +@@ -538,88 +267,3 @@ PointsPage.prototype.showPointInfo = function() { + } + }; + +-PointsPage.prototype.showAddPoint = function() { +- try { +- this._headerView.changeOption($(this._pointAdd.getView()).data('pagetitleAdd'), 'glyphicon-chevron-left', '#form=main'); +- this._utils.clearAllInputFields(this._pointAdd.getView()); +- this._pointAdd.removeCustomFields(); +- +- this._pointAdd.placeCategoriesInPointAdd(this._categories.getCategories()); +- +- this.currentView.hideView(); +- this.currentView = this._pointAdd; +- this.currentView.showView(); +- } catch (Exception) { +- MessageBox.showMessage(Exception.toString(), MessageBox.ERROR_MESSAGE); +- Logger.error(Exception.toString()); +- } +-}; +- +-PointsPage.prototype.showEditPoint = function() { +- try { +- var point = this._points.getPoint(); +- this._headerView.changeOption($(this._pointEdit.getView()).data('pagetitleEdit'), 'glyphicon-chevron-left', '#form=point_info&point_uuid=' + point.uuid); +- this._pointEdit.removeCustomFields(); +- this._pointEdit.placePointInPointEdit(point); +- this._pointEdit.placeCategoriesInPointAdd(this._categories.getCategories(), point.category_id); +- this._pointAdd.defaultCoordsInputFormat(); +- +- this.currentView.hideView(); +- this.currentView = this._pointEdit; +- this.currentView.showView(); +- } catch (Exception) { +- MessageBox.showMessage(Exception.toString(), MessageBox.ERROR_MESSAGE); +- Logger.error(Exception.toString()); +- } +-}; +- +-PointsPage.prototype.addPointHandler = function(formData, update) { +- var that = this; +- try { +- var latlng = this._pointAdd.getLatLng(); +- if (this._utils.checkCoordsInput( +- latlng.lat, +- latlng.lng, +- $(formData).find('#edit-point-alt-input').val() +- )) { +- this._pointAdd.toggleOverlay(); +- +- var paramsObj = $(formData).serializeArray(); +- paramsObj.push({name: 'latitude', value: latlng.lat}); +- paramsObj.push({name: 'longitude', value: latlng.lng}); +- this._points.addPoint(paramsObj, update, function () { +- that.window.location.replace('#form=' + PointsPage.MAIN); +- var message = update ? $(that._pointAdd.getView()).data('messagesuccessEdit') : $(that._pointAdd.getView()).data('messagesuccessAdd'); +- MessageBox.showMessage(message, MessageBox.SUCCESS_MESSAGE); +- }); +- } +- } catch (Exception) { +- MessageBox.showMessage(Exception.toString(), MessageBox.ERROR_MESSAGE); +- Logger.error(Exception.toString()); +- } finally { +- this._pointAdd.toggleOverlay(); +- } +-}; +- +-PointsPage.prototype.downloadPointsHandler = function() { +- var that = this; +- try { +- this._pointsMain.showOverlay(); +- var formData = $(this.document).find('#point-main-form').serializeArray(); +- +- this._points.downLoadPoints(formData, function () { +- var pointList = that._points.getPointList(); +- that._mapCtrl.removePointsFromMap(); +- that._pointsMain.placePointsInPointList(pointList); +- that._mapCtrl.placePointsOnMap(pointList, { +- url: '#form=' + PointsPage.POINT_INFO + '&point_uuid=', +- text: $(that._pointInfo.getView()).data('putpoint') +- }); +- that._pointsMain.hideOverlay(); +- }); +- } catch (Exception) { +- MessageBox.showMessage(Exception.toString(), MessageBox.ERROR_MESSAGE); +- Logger.error(Exception.toString()); +- } +-}; +- +diff --git a/web-client/src/widgets/PointInfo.inc b/web-client/src/widgets/PointInfo.inc +index bf79634..a6dc651 100644 +--- a/web-client/src/widgets/PointInfo.inc ++++ b/web-client/src/widgets/PointInfo.inc +@@ -1,72 +1,36 @@ + ++echo '