* Implement displayname_with_link() to go with filename_with_link().
* Implement idtracker backwards linkage in RFC model.
* Don't use unformat_textarea to display Note: - it hasn't been implemented, and seems to want to de-HTML stuff but we're displaying HTML
- Legacy-Id: 320
* Display document status if it's not Active
* Use revision_display in displayname()
* Check for DocumentComment.created_by flag value of 999
- Legacy-Id: 317
* Model and template changes to allow documents to report their name via doctype() to allow "Draft Name:" vs. "RFC Name:"
* Add parenthesis around the submission type to match the cgi
* Pass the whole ballot set to search_result_row from idinternal_detail
* Display only public comments in idinternal_detail
* Use comment.get_absolute_url instead of a relative URL. (This fixes /idtracker/NNN/comment/YYY/ which wouldn't work)
* Add a search url to compare
* In view, when searching, don't filter for primary_flag=1, but do order by ballot and -primary_flag so that the results are grouped properly.
* Introduce public_comments() accessor which filters comments()
* Fix comments() to not use rfc_flag, to match the schema
* Order ballot_set() by -primary_flag so the results are grouped properly.
- Legacy-Id: 312
closing <li> tags. BeautifulSoup can handle it, but the recursive text
rendering code in soup2text recurses too deeply with a sufficiently long
list...
* ietf/tests.py, in setUp(): grab the right tuple element when extracting
the URLs from the url test tuples
* ietf/tests.py, in read_testurls(): close opened file
* ietf/tests.py, in doUrlsTest(): narrower try/except clause, and a new one
* soup2text.py, in para(): undo previous change
- Legacy-Id: 304
of <p /> to indicate paragraph breaks.
This changes the failed diff for /iesg/telechat/detail/354/ to show only three
differences, where two are whitespace differences and one shows a difference
between '@ietf.org. The' and '@ietf.org . The' and is an artifact of the text
extraction. Will look at fixing that next.
- Legacy-Id: 300
* set null=True for AreaDirector.area and IETFWG.area_director.
* add filters, ordering, choices etc. for admin interface.
* add constant for "ACTIVE" in IETFWG.
- Legacy-Id: 285
If you list a second url or file on a line in an urltest.list file, the
second url will be downloaded, both urls will be converted to text, and
then compared. If there are differences, a unified diff will be output.
- Legacy-Id: 278
Implement javascript to disable form elements that aren't used
when wg or non-wg items are selected.
Implement javascript to reload the page with the right set of
non-wg mailing lists to close.
- Legacy-Id: 274
pick the approver, since the main form's version has been changed
to ietf.org if appropriate.
Don't try to look up the main_form -- since we're currently processing
the main_form, it's just 'form'!
- Legacy-Id: 271
the form attribute "initial" (as in initial data)
Render the form field-by-field for MailingListForm, so that
we can render the mailing list name conditionally as a text input
box or as a hidden field with the value in the page. We can also
insert the domain name here too. (Note that this means that
hidden fields in this form other than domain name have to be
treated specially!)
- Legacy-Id: 270
Use the Site to get the URL in list_wizard_done_email.
Set req for list_wizard_done_email as it is for approval email.
Only use domain-based extra approvers for non-WG requests.
Supply hidden fields for mlist_name and domain_name for deletion.
(These should be visible but uneditable, but passing them
through is a start)
- Legacy-Id: 267
BooleanField. They are used as booleans, but represented in the
database as integers, so pretending they're boolean causes trouble
when saving empty values.
- Legacy-Id: 266
* Added correct dates for two entries in ipr_detail which had 0000-00-00,
in the sql_fixup.sql file
* Fixed test/run so it can be run from any directory
- Legacy-Id: 258
Add fixtures to populate IAD into Roles and existing domains
and authorizers into mailinglists_domains. (The Roles fixture
will become wrong when we get a new IAD so should be removed
after the production database has this value.)
- Legacy-Id: 255
is still a work in progress. I've been using
draft-ietf-dnsext-dnssec-protocol as a test case; related_docs()
returns the same 137 documents as the cgi code but some of the
relationships are different. Right now, the skip argument is
ignored.
- Legacy-Id: 246
- SQLLogMiddleware. This logs any INSERT or UPDATE performed by
a request.
- SMTPExceptionMiddleware. This renders a "please try again"
(template email_failed.html) message when an attempt to send
email failed. This uses a bit of a hack, in that the middleware
looks explicitly for smtplib.SMTPException, and smtplib can
raise other exceptions (particularly socket errors). utils/mail/send_smtp
catches all exceptions and reraises non-smtplib exceptions as
fake smtplib exceptions, and the middleware undoes the wrapping.
- Legacy-Id: 224
committed file named 'testurl.list' in any directory in the ietf/ tree.
There is also a test for URL coverage -- if there isn't declared test
URLs for all the url patterns in ietf/urls.py this coverage test will
fail.
- Legacy-Id: 215
- Add domain helper function to default domain name to ietf.org
- Use correct values for post_who
Template updates:
- Use the domain helper function
- Use the post_who_display helper function
- Move some of the items that could wrap to the next line
- Legacy-Id: 212
view.
Fix up logic in templates, mailing list closing emails look
correct (both approval and denial, with and without messages
from the approver).
- Legacy-Id: 210
* For testing, the page lists meeting materials regardless the submission cut off date.
* Need to add Training sessions, IRTF RGs, and Interim WGs
- Legacy-Id: 203
ballot sets are now (hopefully) treated properly, except for the
row coloring. They're also included in the "view_id" view.
Search is re-done, it turns out that using draft__<anything> means
that RFCs won't be matched, so build lists of possibly-matching
RFCs and I-Ds and pass them through. This applies to filename,
group and rfc number.
- Legacy-Id: 190
(Oddly, this status_of_items shows more than the cgi one; I can't
explain why. Also, the cgi one showed the wrong intended status
for RFCs, and the wrong area for several documents.)
- Legacy-Id: 186
* Add a new method, affiliation to idtracker/models.py, in class PersonOrOrgInfo
* Agenda for the Plenaries should be stored in /home/master-site/proceedings directory to be displayed.
* Bug found in listing ADs at the end of the agenda. An agenda always lists the current IESG instead of the IESG at each meeting. Bug is fixed in the ported tool.
* meeting_agenda_text.cgi was obsolete, but ported anyway in case someone still has it bookmarked.
- Legacy-Id: 182
in (unless it's a forced login) will be the (incomplete) "my" view.
Username and logout link are in the upper right corner while logged
in.
- Legacy-Id: 163
bits of configuration (e.g., mail server, any authentication required,
etc.) It has different behavior based on the setting of the
SERVER_MODE setting:
- 'development' or 'test': the message will be sent as an attachment
to ietf.tracker.archive+SERVER_MODE@gmail.com; the actual destination
supplied won't be used.
- 'production': the message will be sent to the addressees and a
copy sent to ietf.tracker.archive+production@gmail.com .
There are several functions to call, depending on what you want
to pass:
- send_mail_text() takes a request, "To:" list, From header (or None
to default), Subject text, Body text, an optional Cc: list, and
an optional dict with extra headers.
- send_mail() takes a template and a context instead of the body text,
and renders the template with the given context.
- send_mail_subj() takes a template for the subject as well as for the
body. It uses the same context to render both templates.
- Legacy-Id: 159
Closing the ipr_generic.cgi ticket, but leaving ipr.cgi and notify.cgi open
till further testing has been done. Also adding a new task for the IPR
update form.
There may still be some dead code to clean out, but I'm committing what
I have now since it provides working form submission :-)
- Legacy-Id: 158
Expand the sessions() helper function in MeetingTime to iterate over
the sessions and set the room_id helper attribute to the correct room.
This means that for the list returned by sessions(), s.room_id is the
correct room for this time. It also changes the return value from
a QuerySet to a list, so you can't filter it further like a QuerySet -
but I don't think anything is using this functionality.
I didn't do the same for combined_sessions because I don't actually
know what that's used for - if it should be part of sessions, or
if it's even used.
- Legacy-Id: 157
on failure (DoesNotExist instead of IndexError).
Call the database query once and store it in a temp variable instead
of doing the same query twice.
Handle day_id=NULL for the morning beverages/breakfast time.
Use the DoesNotExist exception instead of a generic except: for
the area - except: is likely to hide things that you didn't expect.
- Legacy-Id: 156
couple of aspects:
- ietfauth.auth.EmailBackEnd is a django.contrib.auth backend to allow
two modified authentication methods:
- using email address (stored in django user table) as login username
- using htpasswd-style "crypt" passwords (for compatability with
existing user database). On the first successful login, the
password will be re-hashed to the django-hash style password.
- ietfauth.models.UserMap: a mapping from django user to IETF
person. This is configured as the profile table, meaning
that if you have a django user (e.g., from the RequestContext),
you can use user.get_profile.person to get to the IETF person.
- ietfauth.models has models for the "legacy" username/person mapping
tables (LiaisonUser aka "users" and WgPassword aka "wg_password").
This is to allow mapping of legacy permissions to django permissions
by walking these tables and applying permissions to users. The plan
is to discard these tables eventually.
- Legacy-Id: 155
which means we need to look up area_acronym, but that's also a foreign
key, so again we look up the value we want: acronym. Simply doing
dictsort in the template on area would sort on the FK, I assume --
at least it didn't resolve things to 3 levels, each time looking up the
key we were interested in...
- Legacy-Id: 151
Given the number of kwargs that some constructors take, perhaps the
better thing would be to be able to say "this field gets these
kwargs", so we could instead pass something like
other = { 'foo': {'queryset': Foo.objects.all()}, 'bar': {'fwip': 'baz'} }.
- Legacy-Id: 147
into view_new.py
* Added error indication of the top of the page, in case there are any
errors further down.
* Set more fields to required, matching the old perl code
* Various other tweaks.
- Legacy-Id: 140
callback to provide a RegexpField class.
* Added checkbox for submitter contact information being the same as
IETF contact information; with javascript support and validation
support.
* Cleaned out the old split_form() and mk_formatting_form() functions from
ietf.utils.
- Legacy-Id: 138
* Add 'area' to class ResolveAcronym
* MeetingTime.session returns WgMeetingSession objects, BUT STILL NEED TO FIGURE OUT WHICH sched_room_id[1|2|3] TO USE
- Legacy-Id: 137
to Django, work around this in our code. Sort the session list with Python
code, rather than doing it as part of the query. Since the session list is
very short, there is no problem with memory consumption in doing it this way.
- Legacy-Id: 136
Note: SVN reference [133] has been migrated to Git commit 587d2baafe
* add a method, acronym_name to ResolveAcronym
* Sunday sessions displaying is done
* Need to figure out how to increment date by one day in a template
- Legacy-Id: 135
utilities into separate files.
* Added a log() function in ietf/utils. It uses syslog, but adds some
information about where it was called from.
- Legacy-Id: 130
Add Positions, IESGComment, IESGDiscuss tables. (These are
database tables 'ballots', 'ballots_comment' and ballots_discuss'
but I decided to name the classes differently.)
- Legacy-Id: 126
The nonwg_lists/submit wizard is nearly done; it needs templates
and to figure out why submit from step 2 goes back to step 1 instead
of calling done.
The req_list wizard is just started. It needs to get the incoming
value of domain_name as an alternat version of dname, and be able to
get dname from GET args to handle the javascript redirect. It also
needs all the workflow ("I'm allowed to create this list",
who-is-approver, etc.) and additional forms.
- Legacy-Id: 122
Using some more logic in views.py, less in the templated.
* Some tweaks in FormattingForm rendering.
* Selection of which sections to show is now table driven in views.py
* Some minor refactoring and cleanup in views.py
* Some more form subclassing in ipr/views.py in order to support form
validation.
* Removed style information from ipr/details.html template, and added
ipr/style.html
* Cleanup of details.html
* Fixed ipr/formfield.html to display error messages, and with the right
class.
- Legacy-Id: 105
using pretty much the same template as for a non-form view.
This solution is less hackish than the previous one which
used the form.as_table() rendering of a form, and then split
the resulting html in chunks.
Instead, '''all''' the html has been moved out to a formfield
template, and a custom form class is generated which will render
the form elements using an indicated template.
* Add form factory in utils.py (an old version which still has
html in the code is there for history, but will be removed
* Changes in ipr/views.py:new(), now subclassing one form with
some class members being other form instances, matching the
members used for the show() view
* A fix in ipr/models, making an email field use models.EmailField
* Reverting a number of changes in ipr/details.html which aren't
needed any more, as well as in ipr/new.html; and adding
ipr/formfield.html
- Legacy-Id: 104
* Moved RFCs model into idtracker
* Switched idtracker querys to use idinternal
* Created idinternal.document which returns either an InternetDraft or
an Rfc depending on the value of rfc_flag
* Create compatability methods in InternetDraft and Rfc models
to be able to use certain attributes in the template without
worring about where they come from.
Ticket #59 has a list of remaining bits.
- Legacy-Id: 98
* Re-wrote the IPR declaration form using form.to_table()
and the split_form() function in order to get sub-blocks
of the form which could easily be used with the existing
IPR detail display templates.
How to merge forms from multiple models took some thinking;
since the forms have a common ancestor, multiple inheritance
doesn't preserve the form data. In the end the merging
didn't turn out too horrible. See ipr.views.new().
* Changed the IprDetail model; first to specify editable=False
for all fieleds which shouldn't be shown in the form, but
this has the drawback of also removing them from the admin
page form. Simply bagging them in an un-used sub block with
split_form() works fine.
* Changed the URLs for IPR by-date some again
* Updated the ipr/new* templates to use the form sub-blocks
- Legacy-Id: 97