# # # patch "schema.sql" # from [3001fb127cc6523680d0b6691d938e7745a9f164] # to [1ffd2ee143269f78ae061d03e8b36e4da1a3cc26] # # patch "www/admin-permissions.js" # from [590199b8d6d1ac81c6d109a606785135b3b3f1ee] # to [1968aed7faf177b1941a3bb92dd05c21f4886c26] # # patch "www/admin-resources.js" # from [da39a3ee5e6b4b0d3255bfef95601890afd80709] # to [dc9e1b0a799f0c4a8930df2588b4a551f032d248] # # patch "www/admin-resources.php" # from [011cc85d5bd32650ca04e0b1b40f2dfd40e1b19e] # to [09655eae399ed384eccdd0a3ef9b27c3590a5863] # # patch "www/admin-resources_backend.php" # from [da39a3ee5e6b4b0d3255bfef95601890afd80709] # to [40f88c5129333920a6e8ac69824d8c483c1313c3] # # patch "www/admin.php" # from [32aaf240f93758d13591685cf6bba7b0b2bc7766] # to [582d78fb3a3fb92315e0c750fe4d91e3ff27f521] # # patch "www/main.css" # from [05ecec3016114cd457762e6786192b124fbceb3e] # to [8ca234500f1b958097f8df1b2ea5f66580055dfb] # # patch "www/sidebar.php" # from [c2f6674477eb24e00356b7c08b8983aba132ae44] # to [f81507cc4e9ddd23864aff30d14e06b2eb0291b2] # ============================================================ --- schema.sql 3001fb127cc6523680d0b6691d938e7745a9f164 +++ schema.sql 1ffd2ee143269f78ae061d03e8b36e4da1a3cc26 @@ -11,3 +11,8 @@ access smallint, server smallint, description smallint ); + +CREATE TABLE resources ( project varchar(80), + name varchar(80), + url varchar(80) + ); ============================================================ --- www/admin-permissions.js 590199b8d6d1ac81c6d109a606785135b3b3f1ee +++ www/admin-permissions.js 1968aed7faf177b1941a3bb92dd05c21f4886c26 @@ -39,7 +39,7 @@ } set_maint_display = function(data) { var labels = []; - replaceChildNodes("maintainerlist", TABLE({"id":"maintainertable"}, + replaceChildNodes("maintainerlist", TABLE({"id":"maintainertable","class":"hilighttable"}, THEAD(null, row_display(["Username", "Edit maintainers", "Control server", "Upload files", "Edit description"/*, "Edit homepage", "Change resources"*/])), TFOOT(null, row_display(["","","","",""/*,"",""*/])), TBODY({"id":"maintainertablebody"}, map(maint_row, data))) ============================================================ --- www/admin-resources.js da39a3ee5e6b4b0d3255bfef95601890afd80709 +++ www/admin-resources.js dc9e1b0a799f0c4a8930df2588b4a551f032d248 @@ -0,0 +1,67 @@ +ctrl = '../../admin-resources_backend.php'; + +row_display = function (row) { + return TR(null, map(partial(TD, null), row)); +} +make_row = function (row) { + return TR({"class":"resourcerow"}, + TD(null, INPUT({"type": "text", "size": 30, "name": "rscname[]", "value": row.name})), + TD(null, INPUT({"type": "text", "size": 40, "name": "rscurl[]", "value": row.url})) + ); +} +addrow = function() { + appendChildNodes("rtblbody", TR({"class":"resourcerow"}, + TD(null, INPUT({"type": "text", "size": 30, "name": "rscname[]"})), + TD(null, INPUT({"type": "text", "size": 40, "name": "rscurl[]"})) + )); +} +set_display = function(data) { + var labels = []; + replaceChildNodes("resourcediv", TABLE({"id":"rtbl","class":"hilighttable"}, + THEAD(null, row_display(["Name", "URL"])), + TFOOT(null, row_display(["",""])), + TBODY({"id":"rtblbody"}, map(make_row, data))) + ); + addrow(); +} +read_line = function(row) { + var out = {}; + for(var i = 0; i < row.childNodes.length; ++i) { + var cur = row.childNodes[i].firstChild; + var nm = getNodeAttribute(cur,"name"); + nm = nm.replace(/rsc(.*)\[\]/, "$1"); + out[nm] = cur.value; + } + return out; +} + + +update = function () { + status("Updating..."); + var args = {'project':project}; + args.action = "chresources"; + var lst = getElement("rtblbody").childNodes; + var maints = []; + for(var i = 0; i < lst.length; ++i) { + var line = read_line(lst[i]); + if (line.username != "") { + maints.push(line); + } + } + args.newmaint = maints; + call_server(ctrl, args, "chresources", function (data) { + set_display(data.resources); + clearstatus(); + }); +} + + +addLoadEvent(function() { + status("Loading..."); + var x = {'project':project}; + x.action = "getresources"; + call_server(ctrl, x, "getresources", function (data) { + set_display(data.resources); + clearstatus(); + }); +}); ============================================================ --- www/admin-resources.php 011cc85d5bd32650ca04e0b1b40f2dfd40e1b19e +++ www/admin-resources.php 09655eae399ed384eccdd0a3ef9b27c3590a5863 @@ -1,2 +1,6 @@
+Project resources:
+

+ +
============================================================ --- www/admin-resources_backend.php da39a3ee5e6b4b0d3255bfef95601890afd80709 +++ www/admin-resources_backend.php 40f88c5129333920a6e8ac69824d8c483c1313c3 @@ -0,0 +1,62 @@ +encode(array("resources" => resourcelist())); +} else if ($action == "chresources") { + $res = array(); + $ok = true; + do { + pg_exec($db, "BEGIN"); + pg_exec($db, "LOCK TABLE resources"); + $query = sprintf("DELETE FROM resources WHERE project = '%s'", $safeproj); + $result = pg_exec($db, $query); + if (!$result) { + $res['error'] = 'Internal server error. (1)'; + $ok = false; + break; + } + $fields = "project, name, url"; + $query = sprintf("INSERT INTO resources (%s) VALUES (%%s)", $fields); + foreach ($args->newmaint as $i) { + $values = sprintf("'%s', '%s', '%s'", + $safeproj, + pg_escape_string($i->name), + pg_escape_string($i->url)); + $result = pg_exec($db, sprintf($query, $values)); + if (!$result) { + $res['error'] = 'Internal server error. (2)'; + $res['verboseError'] = sprintf($query, $values); + $ok = false; + break; + } + } + if($ok) + $res["resources"] = resourcelist(); + } while(false); + if (!$ok) + pg_exec($db, "ROLLBACK"); + print $json->encode($res); + pg_exec($db, "END"); +} +pg_close($db); +?> ============================================================ --- www/admin.php 32aaf240f93758d13591685cf6bba7b0b2bc7766 +++ www/admin.php 582d78fb3a3fb92315e0c750fe4d91e3ff27f521 @@ -34,9 +34,9 @@ $pages = array('permissions' => "Permissions", 'source_control' => "Source Control", 'files' => "Files", - 'description' => "Description"/*, - 'web' => "Web", - 'resources' => "Resources"*/); + 'description' => "Description", + /*'web' => "Web",*/ + 'resources' => "Resources"); foreach ($pages as $k => $i) { if ($k == $page) print "
  • $i
  • "; ============================================================ --- www/main.css 05ecec3016114cd457762e6786192b124fbceb3e +++ www/main.css 8ca234500f1b958097f8df1b2ea5f66580055dfb @@ -30,7 +30,7 @@ padding: .5em; } -#maintainerlist tbody tr:hover { +.hilighttable tbody tr:hover { background-color: #ddf; } ============================================================ --- www/sidebar.php c2f6674477eb24e00356b7c08b8983aba132ae44 +++ www/sidebar.php f81507cc4e9ddd23864aff30d14e06b2eb0291b2 @@ -37,37 +37,21 @@ Project info
    Maintainer section
    Browse source
    -
    -
    -
    Project resources:\n\n"; + } } ?> - -