summaryrefslogtreecommitdiff
path: root/www
diff options
context:
space:
mode:
Diffstat (limited to 'www')
-rw-r--r--www/add.php10
-rw-r--r--www/get.php3
-rw-r--r--www/reorder.php75
-rw-r--r--www/scripts/main.js123
4 files changed, 198 insertions, 13 deletions
diff --git a/www/add.php b/www/add.php
index 7b9d99f..e5c1a18 100644
--- a/www/add.php
+++ b/www/add.php
@@ -34,7 +34,7 @@ try
$cmd = $db->prepare("INSERT INTO pm_store " .
"(description, groupname, username, password) ".
- "values " .
+ "VALUES " .
"(:description, :group, :username, :password)");
$cmd->bindParam(":description", $description);
$cmd->bindParam(":group", $group);
@@ -42,7 +42,13 @@ try
$cmd->bindParam(":password", $password);
$cmd->execute();
- $result["id"] = $db->lastInsertId();
+ $id = $db->lastInsertId();
+
+ $result["id"] = $id;
+
+ $update = $db->prepare("UPDATE pm_store SET display = :id WHERE id = :id");
+ $update->bindParam(":id", $id);
+ $update->execute();
$db = null;
}
diff --git a/www/get.php b/www/get.php
index d42e57e..c41fafc 100644
--- a/www/get.php
+++ b/www/get.php
@@ -29,7 +29,7 @@ try
$index = 0;
- foreach ($db->query("SELECT * FROM pm_store ORDER BY id") as $row)
+ foreach ($db->query("SELECT * FROM pm_store ORDER BY display") as $row)
{
$data = array();
$data["id"] = $row["id"];
@@ -37,6 +37,7 @@ try
$data["group"] = $row["groupname"];
$data["username"] = $row["username"];
$data["password"] = $row["password"];
+ $data["display"] = $row["display"];
$result[$index++] = $data;
}
diff --git a/www/reorder.php b/www/reorder.php
new file mode 100644
index 0000000..375ee62
--- /dev/null
+++ b/www/reorder.php
@@ -0,0 +1,75 @@
+<?php
+
+/*
+ PassMan - simple password manager
+ Copyright (C) 2018 Ian Cowburn
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+require 'config.php';
+require 'common.php';
+
+$result = array();
+
+try
+{
+ $db = ConnectDB();
+
+ $from_id = $_REQUEST["from_id"];
+ $to_id = $_REQUEST["to_id"];
+ $from_display = 0;
+ $to_display = 0;
+
+ $cmd = $db->prepare("SELECT display FROM pm_store ".
+ "WHERE id = :id");
+ $cmd->bindParam(":id", $from_id);
+ $cmd->execute();
+
+ $data = $cmd->fetch();
+
+ $from_display = $data["display"];
+
+ $cmd->bindParam(":id", $to_id);
+ $cmd->execute();
+
+ $data = $cmd->fetch();
+
+ $to_display = $data["display"];
+
+ $from_update = $db->prepare("UPDATE pm_store SET display = :to_display " .
+ "WHERE id = :from_id");
+ $from_update->bindParam(":to_display", $to_display);
+ $from_update->bindParam(":from_id", $from_id);
+ $from_update->execute();
+
+ $to_update = $db->prepare("UPDATE pm_store SET display = :from_display " .
+ "WHERE id = :to_id");
+ $to_update->bindParam(":from_display", $from_display);
+ $to_update->bindParam(":to_id", $to_id);
+ $to_update->execute();
+
+ $result["status"] = true;
+
+ $db = null;
+}
+catch(PDOException $e)
+{
+ $result["error"] = "DB error:" . $e->getMessage();
+}
+
+header("Content-type:application/json");
+echo json_encode($result);
+
+?>
diff --git a/www/scripts/main.js b/www/scripts/main.js
index 0ed2cf5..79fb0b7 100644
--- a/www/scripts/main.js
+++ b/www/scripts/main.js
@@ -170,6 +170,21 @@ function AddSmallLink(node, text, func, id)
node.appendChild(anchor);
}
+function AddSmallLinkPrevNext(node, text, func, id, prev, next)
+{
+ var anchor = document.createElement("a");
+
+ anchor.href = "#";
+ anchor.onclick = func;
+ anchor.text = text;
+ anchor.className = "smalltext";
+ anchor.dataset.pmId = id;
+ anchor.dataset.pmPrevId = prev;
+ anchor.dataset.pmNextId = next;
+
+ node.appendChild(anchor);
+}
+
function AddSmallLinkUpDown(node, text, down_func, up_func, id)
{
var anchor = document.createElement("a");
@@ -197,7 +212,7 @@ function AddElement(node, elementname)
node.appendChild(elem);
}
-function AddRow(table, id, desc, username, password, rowcount)
+function AddRow(table, id, prev_id, next_id, desc, username, password, rowcount)
{
var tr = document.createElement("tr");
@@ -232,7 +247,26 @@ function AddRow(table, id, desc, username, password, rowcount)
AddText(td, "\u00a0");
AddText(td, "\u00a0");
AddSmallLinkUpDown(td, "Show", DoShow, DoHide, id);
+
+ if (next_id != -1 || prev_id != -1)
+ {
+ if (prev_id != -1)
+ {
+ AddText(td, "\u00a0");
+ AddText(td, "\u00a0");
+ AddSmallLinkPrevNext(td, "Up", DoUp, id, prev_id, next_id);
+ }
+
+ if (next_id != -1)
+ {
+ AddText(td, "\u00a0");
+ AddText(td, "\u00a0");
+ AddSmallLinkPrevNext(td, "Down", DoDown, id, prev_id, next_id);
+ }
+ }
+
AddElement(td, "br");
+
AddSmallLink(td, "Copy Username", DoCopyUsername, id);
AddText(td, "\u00a0");
AddText(td, "\u00a0");
@@ -244,6 +278,21 @@ function AddRow(table, id, desc, username, password, rowcount)
table.appendChild(tr);
}
+function GetGroupRows()
+{
+ var result = [];
+
+ for(var f = 0; f < globalDb.length; f++)
+ {
+ if (globalDb[f].group == globalCurrentGroup)
+ {
+ result.push(globalDb[f]);
+ }
+ }
+
+ return result;
+}
+
function LoadTable()
{
var table = document.getElementById("DataTable");
@@ -252,20 +301,34 @@ function LoadTable()
var rowcount = 0;
- for(var f = 0; f < globalDb.length; f++)
+ var rows = GetGroupRows();
+
+ for(var f = 0; f < rows.length; f++)
{
- if (globalDb[f].group == globalCurrentGroup)
+ var prevId = -1;
+ var nextId = -1;
+
+ if (f > 0)
{
- AddRow(table,
- globalDb[f].id,
- globalDb[f].description,
- globalDb[f].username,
- Decrypt(globalDb[f].password),
- rowcount++);
+ prevId = rows[f-1].id;
}
+
+ if (f < rows.length - 1)
+ {
+ nextId = rows[f+1].id;
+ }
+
+ AddRow(table,
+ rows[f].id,
+ prevId,
+ nextId,
+ rows[f].description,
+ rows[f].username,
+ Decrypt(rows[f].password),
+ rowcount++);
}
- AddRow(table, -1, "", "", "", rowcount++);
+ AddRow(table, -1, -1, -1, "", "", "", rowcount++);
}
function RefreshDataAsync()
@@ -466,4 +529,44 @@ function DoHide()
elem.type = "password";
}
+function DoReorderAsync()
+{
+ var response = JSON.parse(this.responseText);
+
+ if (response.error)
+ {
+ Error(response.error);
+ }
+ else
+ {
+ RefreshData();
+ }
+}
+
+function DoUp()
+{
+ var id = this.dataset.pmId;
+ var prev = this.dataset.pmPrevId;
+
+ WebRequest("reorder.php", DoReorderAsync,
+ [
+ "from_id", id,
+ "to_id", prev
+ ]
+ );
+}
+
+function DoDown()
+{
+ var id = this.dataset.pmId;
+ var next = this.dataset.pmNextId;
+
+ WebRequest("reorder.php", DoReorderAsync,
+ [
+ "from_id", id,
+ "to_id", next
+ ]
+ );
+}
+
// vim: sw=4 ts=4