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 d...@community.apache.org") + 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 d...@community.apache.org") \ 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