Author: humbedooh
Date: Sun Mar 8 15:35:43 2015
New Revision: 1665026
URL: http://svn.apache.org/r1665026
Log:
smarter in-report adding of releases, plus allow members to add data
Modified:
comdev/reporter.apache.org/site/addrelease.py
comdev/reporter.apache.org/site/render.js
Modified: comdev/reporter.apache.org/site/addrelease.py
URL:
http://svn.apache.org/viewvc/comdev/reporter.apache.org/site/addrelease.py?rev=1665026&r1=1665025&r2=1665026&view=diff
==============================================================================
--- comdev/reporter.apache.org/site/addrelease.py (original)
+++ comdev/reporter.apache.org/site/addrelease.py Sun Mar 8 15:35:43 2015
@@ -7,6 +7,7 @@ user = os.environ['HTTP_X_AUTHENTICATED_
date = int(form['date'].value) if ('date' in form and len(form['date'].value)
> 0) else None
version = form['version'].value if ('version' in form and
len(form['version'].value) > 0) else None
project = form['project'].value if 'project' in form else None
+dojson = form['json'].value if 'json' in form else None
def getPMCs(uid):
groups = []
@@ -20,6 +21,16 @@ def getPMCs(uid):
return groups
+def isMember(uid):
+ members = []
+ ldapdata = subprocess.check_output(['ldapsearch', '-x', '-LLL', '-b',
'cn=member,ou=groups,dc=apache,dc=org'])
+ for match in re.finditer(r"memberUid: ([-a-z0-9_.]+)", ldapdata):
+ group = match.group(1)
+ members.append(group)
+ if uid in members:
+ return True
+ return False
+
def getReleaseData(project):
try:
with open("/var/www/reporter.apache.org/data/releases/%s.json" %
project, "r") as f:
@@ -32,15 +43,22 @@ def getReleaseData(project):
saved = False
projects = getPMCs(user)
if date and version and project:
- if project in projects:
+ if project in projects or isMember(user):
rdata = getReleaseData(project)
rdata[version] = date
with open("/var/www/reporter.apache.org/data/releases/%s.json" %
project, "w") as f:
f.write(json.dumps(rdata))
f.close()
saved = True
- print("Content-Type: text/html\r\n\r\n<h3>Data submitted!</h3>You
may see the updated project data at: <a
href='https://reporter.apache.org/?%s'>https://reporter.apache.org/?%s</a>." %
(project, project))
+ if dojson:
+ print("Content-Type: application/json\r\n\r\n")
+ print(json.dumps({'versions': rdata}))
+ else:
+ print("Content-Type: text/html\r\n\r\n<h3>Data
submitted!</h3>You may see the updated project data at: <a
href='https://reporter.apache.org/?%s'>https://reporter.apache.org/?%s</a>." %
(project, project))
if not saved:
- print("Content-Type: text/plain\r\n\r\nCould not save. Make sure you have
filled out all fields and have access to this projects data! For further
inquiries, please contact [email protected]")
+ if dojson:
+ print("Content-Type: application/json\r\n\r\n{\"error\": \"Not
saved\"}")
+ else:
+ print("Content-Type: text/plain\r\n\r\nCould not save. Make sure you
have filled out all fields and have access to this projects data! For further
inquiries, please contact [email protected]")
\ No newline at end of file
Modified: comdev/reporter.apache.org/site/render.js
URL:
http://svn.apache.org/viewvc/comdev/reporter.apache.org/site/render.js?rev=1665026&r1=1665025&r2=1665026&view=diff
==============================================================================
--- comdev/reporter.apache.org/site/render.js (original)
+++ comdev/reporter.apache.org/site/render.js Sun Mar 8 15:35:43 2015
@@ -373,7 +373,7 @@ function renderFrontPage(json) {
}
}
releases.innerHTML += "<i>(A total of " + (tr - nr) + " older
release(s) were found for " + pmc + " in our db)</i><br/>"
- releases.innerHTML += "<br/><a href='addrelease.html?" + pmc +
"'>Add a release</a> - <a href='javascript:void(0);' onclick=\"$('#dialog_" +
pmc + "').dialog({minWidth: 450, minHeight: 240});\">Fetch releases from
JIRA</a><br/>"
+ releases.innerHTML += "<br/><a href='javascript:void(0);'
onclick=\"$('#rdialog_" + pmc + "').dialog({minWidth: 450, minHeight:
240});\">Add a release</a> - <a href='javascript:void(0);'
onclick=\"$('#dialog_" + pmc + "').dialog({minWidth: 450, minHeight:
240});\">Fetch releases from JIRA</a><br/>"
if (tr > 0) {
var div = renderReleaseChart(json.releases[pmc], pmc,
releases);
@@ -521,6 +521,14 @@ function renderFrontPage(json) {
dialog.setAttribute("style", "display: none;")
dialog.innerHTML = "<form><b>JIRA Project:</b><input
type='text' name='jira' placeholder='FOO'><br/><b>Optional prepend:</b> <input
name='prepend' type='text' placeholder='Foo'/><br><input type='button'
value='Fetch from JIRA' onclick='fetchJIRA(\"" + pmc + "\",
this.form[\"jira\"].value, this.form[\"prepend\"].value);'></form><p>If you
have multiple JIRA projects and they only have the version number in their
release versions, please enter the component name in the 'prepend' field.</p>"
document.getElementById('tab_' + pmc).appendChild(dialog)
+
+ // Manually add release dialog
+ var rdialog = document.createElement('div');
+ rdialog.setAttribute("id", "rdialog_" + pmc);
+ rdialog.setAttribute("title", "Add a release")
+ rdialog.setAttribute("style", "display: none;")
+ rdialog.innerHTML = "<form><b>Version:</b><input type='text'
name='version' placeholder='1.2.3'><br/><b>Date:</b> <input name='date'
type='text' placeholder='YYYY-MM-DD'/><br><input type='button' value='Add
release' onclick='addRelease(\"" + pmc + "\", this.form[\"version\"].value,
this.form[\"date\"].value);'></form>"
+ document.getElementById('tab_' + pmc).appendChild(rdialog)
}
if (json.pmcs.length == 0) {
@@ -789,5 +797,30 @@ function fetchJIRA(pmc, project, prepend
}
})
}
+
+}
+
+function addRelease(pmc, version, date) {
+ if (version && version.length > 1 &&
date.match(/^(\d\d\d\d)-(\d\d)-(\d\d)$/)) {
+ var x = date.split("-");
+ var y = new Date(x[0],parseInt(x[1])-1,parseInt(x[2]));
+ var nn = parseInt(y.getTime()/1000);
+ GetAsyncJSON("/addrelease.py?json=true&project=" + pmc +
"&version=" + escape(version) + "&date=" + nn, null, function(json) {
+ if (json && json.versions) {
+ var n = 0;
+ for (version in json.versions) {
+ n++;
+ jsdata.releases[pmc][version] =
json.versions[version]
+ }
+ $('#rdialog_' + pmc).dialog("close")
+ var nproject = pmc
+ alert("Release added!")
+ renderFrontPage(jsdata)
+
+ } else {
+ alert("Couldn't add release data :(")
+ }
+ })
+ }
}
\ No newline at end of file