#357

#357

git-svn-id: e70f47238a868777ecefe75ba01929cffb2d8127@627 d8b24053-1f83-4035-b5c3-ce8b92cd91ad

Ubuntu-Derivate

Communtu setzt auf einer Ubuntu-Basisinstallation auf.
Es gibt nun eine ganze Reihe von <%= link_to 'Ubuntu-Derivaten', 'http://wiki.ubuntuusers.de/Was_ist_Linux?#Was-sind-Derivate-einer-Distribution', :target => '_blank'  %>, und viele Ubuntu-Nutzer fragen sich,
ob sie statt Ubuntu lieber ein Derivat benutzen sollten.
Die Antwort ist: meistens fährt man mit dem Standard-Ubuntu ganz gut, denn
Communtu erlaubt, die Derivate auf einfache Weise nachzuinstallieren.
Allerdings ist das nicht bei allen Derivaten gleich sinnvoll.

Alle Derivate können unter der <%= link_to 'Installations-Feinauswahl', user_path(current_user) + "/user_profile/refine" %>
unter der Kategorie "Derivate" zur Installation ausgewählt werden.
Ebenso kannst du dort nachgucken, aus welchen Paketen ein Derivat besteht.

Über Communtu sinnvoll nachinstallierbare Derivate:

<%= link_to 'Ubuntu Studio', 'http://wiki.ubuntuusers.de/Ubuntu_Studio', :target => '_blank' %> - Ubuntu Multimedie-Edition.
Sie wird bei Communtu mitinstalliert, wenn du bei Audio, Film und/oder Grafik/Design "erweitert" anwählst.

<%= link_to 'Medibuntu', 'http://medibuntu.org', :target => '_blank' %> stellt Multimedia-Paketquellen bereit, die aus rechtlichen Gründen nicht von Ubuntu selbst angeboten wird. Medibuntu wird bei Communtu mit berücksichtigt (z.B. bei Audio und Film).

<%= link_to 'Mythbuntu', 'http://www.mythbuntu.org/', :target => '_blank' %> - der PC wird zum Videorekorder. Bei Film "Freak" auswählen, und es wird mitinstalliert. Empfohlen: CPU mit 2 GHz, 1024 MByte RAM, 10 GByte Festplattenplatz für das Frontend, 80+ GByte für das Backend, eine Grafikkarte mit 128 MByte RAM mit TV-Ausgang und eine unterstützte TV-Karte.

<%= link_to 'Edubuntu', 'http://www.edubuntu.org/', :target => '_blank' %> - Lernsoftware. Bei "Bildung und Wissenschaft" den Level "erweitert" auswählen, und es wird mitinstalliert.

<%= link_to 'Kubuntu', 'http://wiki.ubuntuusers.de/KDE', :target => '_blank' %> Kubuntu ist Ubuntu mit dem KDE-Desktop.

<%= link_to 'Linux Mint', 'http://de.wikipedia.org/wiki/Linux_Mint', :target => '_blank' %> ist eine Ubuntu-Abspaltung mit eigener User-Community, die sich vor allem Benutzerfreundlichkeit auf die Fahnen schreibt.
Linux Mint ähnelt Ubuntu sehr, hat aber viele Codes, z.B. für DVDs und MP3s, schon vorinstalliert. Diese Codecs gibt es allerdings auch bei Communtu, unter Unterhaltungsmedien. Achtung! bei Communtu erst in Kürze verfügbar.

	Automatix war eine Installationshilfe, die sich großer Beliebtheit erfreute (sie wurde sogar von der New York Times empfohlen), die aber nicht ganz den Ubuntu-Programmierstandards entsprach und inzwischen nicht mehr weiterentwickelt wird.

Über Communtu nachinstallierbare Derivate, sinnvollerweise auf einer Xfce-basierten Installation (z.B. Xubuntu) aufzusetzen:

 <%= link_to 'ZevenOS', 'http://www.zevenos.com/', :target => '_blank' %> - orient an BeOS, setzt auf Schnelligkeit, Kompatibilität mit alten Rechnern und einfache Bedienung. CPU mit mindestens 200 MHZ
128 MB RAM (zum Betrieb, zur Installation werden 192 MB RAM benötigt);
2 GB freier Festplattenplatz (Empfohlen: 4 GB oder mehr);
16 MB Grafikkarte (Empfohlen: Intel GMA 9xx). Achtung! bei Communtu erst in Kürze verfügbar.

Derivate, die mit der Derivats-eigenen Installations-CD installiert werden sollten:

<%= link_to 'Xubuntu', 'http://wiki.ubuntuusers.de/Xfce', :target => '_blank' %> - mit dem schlanken Xfce als grafischer Oberfläche - besonders für ältere Rechner geeignet: 128 MByte Arbeitsspeicher und 1,5 GB auf der Festplatte reichen aus. Sollte von CD installiert werden, um wirklich eine schlanke Installation zu haben. Nachinstallationen mit Communtu möglich.

<%= link_to 'Linux MCE', 'http://de.wikipedia.org/wiki/LinuxMCE', :target => '_blank' %> - damit wird Ubuntu zum <%=link_to 'Fernsehcomputer', 'http://de.wikipedia.org/wiki/Home_Theater_Personal_Computer' %>. Aufgrund der notwendigen Treiberinstallation sollte Linux MCE direkt installiert werden, Communtu kann dann aber für die Installation weiterer Software genutzt werden.

<%= link_to 'Gobuntu', 'http://www.ubuntu.com/products/whatisubuntu/gobuntu', :target => '_blank' %> ist ein Ubuntu-Derivat komplett aus freier Software. Nur für erfahrene Nutzer geeignet. Sollte mit der Gobuntu-CD installiert werden, damit es auch wirklich nur freie Software ist. Nachinstallationen mit Communtu möglich, sinnvollerweise sollten dann im Nutzerprofil "freie Software" angewählt werden.

 <%= link_to 'Nexenta OS', 'http://de.wikipedia.org/wiki/GNU-Varianten#Nexenta_OS', :target => '_blank' %> - ersetzt den Linux-Kern durch OpenSolaris. Stellt nur eine minimale Basis an Anwendungen bereit. Die Installation weiterer Pakete bleibt dem Benutzer überlassen; hierfür kann Communtu genutzt werden.

Es gibt noch weitere Derivate zu denen wir bisher noch keine Installationsempfehlung abgeben können:

 <%= link_to 'Impi Linux', 'http://www.impi.org.za/', :target => '_blank' %> - eine afrikanische Ubuntu-Variante, die allerdings offenbar nicht übers Internet erhältlich ist.

 <%= link_to 'linex', 'http://de.wikipedia.org/wiki/LinEx', :target => '_blank' %> - öffentliche Distribution der spanischen Region Extremadura.

 <%= link_to 'U-lite', 'http://u-lite.org/', :target => '_blank' %> für ältere PCs. Sie baut auf einer LXDE Oberfläche auf.

 <%= link_to 'Ubuntu mobile', 'http://www.ubuntu.com/products/mobile', :target => '_blank' %> - für mobile Internetgeräte.

 <%= link_to 'Ubuntu ultimate', 'http://ultimateedition.info/', :target => '_blank' %> - Ubuntu mit vielen Desktop-Desgins und Programmen.

 <%= link_to 'gOS', 'http://www.thinkgos.com/', :target => '_blank' %> - spezialisiert auf Webdienste.

 <%= link_to 'OpenGEU', 'http://opengeu.intilinux.com', :target => '_blank' %> - basiert auf E17. 2D-Effekte auch ohne schnelle Grafikkarte.

 <%= link_to 'Fluxbuntu', 'http://wiki.fluxbuntu.org', :target => '_blank' %> - minimalistische schnelle Ubuntu-Version für ältere PCs.

 <%= link_to 'Ubuntu Server', 'http://wiki.ubuntuusers.de/Server_Installation', :target => '_blank' %> - Server-Version von Ubuntu, ohne grafische Oberfläche.

 <%= link_to 'Ubuntu JeOS', 'http://wiki.ubuntuusers.de/JeOS', :target => '_blank' %> - minimale Server-Version, vor allem für Virtualisierung geeignet..

 <%= link_to 'Elbuntu', 'http://e17blog.tuxfamily.org/', :target => '_blank' %> - Ubuntu mit Enlightenment als Desktopumgebung.

 <%= link_to 'nUbuntu', 'http://www.nubuntu.org/', :target => '_blank' %> - mit Fluxbox und verschiedenen Netzwerk-Sicherheitswerkzeugen .

 <%= link_to 'getDeb', 'http://www.getdeb.net', :target => '_blank' %> - Installation von Programmen und Versionen, die nicht über die offiziellen Repositories erhältlich sind.

 <%= link_to 'Ultamatix', 'http://ultamatix.com/', :target => '_blank' %> - eine Automatix für die Ultimate Edition.

Ubuntu-Derivate

Communtu setzt auf einer Ubuntu-Basisinstallation auf.
Es gibt nun eine ganze Reihe von <%= link_to 'Ubuntu-Derivaten', 'http://wiki.ubuntuusers.de/Was_ist_Linux?#Was-sind-Derivate-einer-Distribution', :target => '_blank'  %>, und viele Ubuntu-Nutzer fragen sich,
ob sie statt Ubuntu lieber ein Derivat benutzen sollten.
Die Antwort ist: meistens fährt man mit dem Standard-Ubuntu ganz gut, denn
Communtu erlaubt, die Derivate auf einfache Weise nachzuinstallieren.
Allerdings ist das nicht bei allen Derivaten gleich sinnvoll.

Alle Derivate können unter der <%= link_to 'Installations-Feinauswahl', user_path(current_user) + "/user_profile/refine" %>
unter der Kategorie "Derivate" zur Installation ausgewählt werden.
Ebenso kannst du dort nachgucken, aus welchen Paketen ein Derivat besteht.

Über Communtu sinnvoll nachinstallierbare Derivate:

<%= link_to 'Ubuntu Studio', 'http://wiki.ubuntuusers.de/Ubuntu_Studio', :target => '_blank' %> - Ubuntu Multimedie-Edition.
Sie wird bei Communtu mitinstalliert, wenn du bei Audio, Film und/oder Grafik/Design "erweitert" anwählst.

<%= link_to 'Medibuntu', 'http://medibuntu.org', :target => '_blank' %> stellt Multimedia-Paketquellen bereit, die aus rechtlichen Gründen nicht von Ubuntu selbst angeboten wird. Medibuntu wird bei Communtu mit berücksichtigt (z.B. bei Audio und Film).

<%= link_to 'Mythbuntu', 'http://www.mythbuntu.org/', :target => '_blank' %> - der PC wird zum Videorekorder. Bei Film "Freak" auswählen, und es wird mitinstalliert. Empfohlen: CPU mit 2 GHz, 1024 MByte RAM, 10 GByte Festplattenplatz für das Frontend, 80+ GByte für das Backend, eine Grafikkarte mit 128 MByte RAM mit TV-Ausgang und eine unterstützte TV-Karte.

<%= link_to 'Edubuntu', 'http://www.edubuntu.org/', :target => '_blank' %> - Lernsoftware. Bei "Bildung und Wissenschaft" den Level "erweitert" auswählen, und es wird mitinstalliert.

<%= link_to 'Kubuntu', 'http://wiki.ubuntuusers.de/KDE', :target => '_blank' %> Kubuntu ist Ubuntu mit dem KDE-Desktop.

<%= link_to 'Linux Mint', 'http://de.wikipedia.org/wiki/Linux_Mint', :target => '_blank' %> ist eine Ubuntu-Abspaltung mit eigener User-Community, die sich vor allem Benutzerfreundlichkeit auf die Fahnen schreibt.
Linux Mint ähnelt Ubuntu sehr, hat aber viele Codes, z.B. für DVDs und MP3s, schon vorinstalliert. Diese Codecs gibt es allerdings auch bei Communtu, unter Unterhaltungsmedien. Achtung! bei Communtu erst in Kürze verfügbar.

	Automatix war eine Installationshilfe, die sich großer Beliebtheit erfreute (sie wurde sogar von der New York Times empfohlen), die aber nicht ganz den Ubuntu-Programmierstandards entsprach und inzwischen nicht mehr weiterentwickelt wird.

Über Communtu nachinstallierbare Derivate, sinnvollerweise auf einer Xfce-basierten Installation (z.B. Xubuntu) aufzusetzen:

 <%= link_to 'ZevenOS', 'http://www.zevenos.com/', :target => '_blank' %> - orient an BeOS, setzt auf Schnelligkeit, Kompatibilität mit alten Rechnern und einfache Bedienung. CPU mit mindestens 200 MHZ
128 MB RAM (zum Betrieb, zur Installation werden 192 MB RAM benötigt);
2 GB freier Festplattenplatz (Empfohlen: 4 GB oder mehr);
16 MB Grafikkarte (Empfohlen: Intel GMA 9xx). Achtung! bei Communtu erst in Kürze verfügbar.

Derivate, die mit der Derivats-eigenen Installations-CD installiert werden sollten:

<%= link_to 'Xubuntu', 'http://wiki.ubuntuusers.de/Xfce', :target => '_blank' %> - mit dem schlanken Xfce als grafischer Oberfläche - besonders für ältere Rechner geeignet: 128 MByte Arbeitsspeicher und 1,5 GB auf der Festplatte reichen aus. Sollte von CD installiert werden, um wirklich eine schlanke Installation zu haben. Nachinstallationen mit Communtu möglich.

<%= link_to 'Linux MCE', 'http://de.wikipedia.org/wiki/LinuxMCE', :target => '_blank' %> - damit wird Ubuntu zum <%=link_to 'Fernsehcomputer', 'http://de.wikipedia.org/wiki/Home_Theater_Personal_Computer' %>. Aufgrund der notwendigen Treiberinstallation sollte Linux MCE direkt installiert werden, Communtu kann dann aber für die Installation weiterer Software genutzt werden.

<%= link_to 'Gobuntu', 'http://www.ubuntu.com/products/whatisubuntu/gobuntu', :target => '_blank' %> ist ein Ubuntu-Derivat komplett aus freier Software. Nur für erfahrene Nutzer geeignet. Sollte mit der Gobuntu-CD installiert werden, damit es auch wirklich nur freie Software ist. Nachinstallationen mit Communtu möglich, sinnvollerweise sollten dann im Nutzerprofil "freie Software" angewählt werden.

 <%= link_to 'Nexenta OS', 'http://de.wikipedia.org/wiki/GNU-Varianten#Nexenta_OS', :target => '_blank' %> - ersetzt den Linux-Kern durch OpenSolaris. Stellt nur eine minimale Basis an Anwendungen bereit. Die Installation weiterer Pakete bleibt dem Benutzer überlassen; hierfür kann Communtu genutzt werden.

Es gibt noch weitere Derivate zu denen wir bisher noch keine Installationsempfehlung abgeben können:

 <%= link_to 'Impi Linux', 'http://www.impi.org.za/', :target => '_blank' %> - eine afrikanische Ubuntu-Variante, die allerdings offenbar nicht übers Internet erhältlich ist.

 <%= link_to 'linex', 'http://de.wikipedia.org/wiki/LinEx', :target => '_blank' %> - öffentliche Distribution der spanischen Region Extremadura.

 <%= link_to 'Ubuntulite', 'http://ubuntulite.tuxfamily.org/', :target => '_blank' %> für ältere PCs.

 <%= link_to 'Ubuntu mobile', 'http://www.ubuntu.com/products/mobile', :target => '_blank' %> - für mobile Internetgeräte.

 <%= link_to 'Ubuntu ultimate', 'http://ultimateedition.info/', :target => '_blank' %> - Ubuntu mit vielen Desktop-Desgins und Programmen.

 <%= link_to 'gOS', 'http://www.thinkgos.com/', :target => '_blank' %> - spezialisiert auf Webdienste.

 <%= link_to 'OpenGEU', 'http://opengeu.intilinux.com', :target => '_blank' %> - basiert auf E17. 2D-Effekte auch ohne schnelle Grafikkarte.

 <%= link_to 'Fluxbuntu', 'http://wiki.fluxbuntu.org', :target => '_blank' %> - minimalistische schnelle Ubuntu-Version für ältere PCs.

 <%= link_to 'Ubuntu Server', 'http://wiki.ubuntuusers.de/Server_Installation', :target => '_blank' %> - Server-Version von Ubuntu, ohne grafische Oberfläche.

 <%= link_to 'Ubuntu JeOS', 'http://wiki.ubuntuusers.de/JeOS', :target => '_blank' %> - minimale Server-Version, vor allem für Virtualisierung geeignet..

 <%= link_to 'Elbuntu', 'http://e17blog.tuxfamily.org/', :target => '_blank' %> - Ubuntu mit Enlightenment als Desktopumgebung.

 <%= link_to 'nUbuntu', 'http://www.nubuntu.org/', :target => '_blank' %> - mit Fluxbox und verschiedenen Netzwerk-Sicherheitswerkzeugen .

 <%= link_to 'getDeb', 'http://www.getdeb.net', :target => '_blank' %> - Installation von Programmen und Versionen, die nicht über die offiziellen Repositories erhältlich sind.

 <%= link_to 'Ultamatix', 'http://ultamatix.com/', :target => '_blank' %> - eine Automatix für die Ultimate Edition.


I think "send follow up" makes it clearer it isn't a comment reply, but an email

<%
if !info_request_event.nil? && info_request_event.event_type == 'response'
    incoming_message = info_request_event.incoming_message
end

if not incoming_message.nil?
%>
    <div class="correspondence" id="incoming-<%=incoming_message.id.to_s%>">

            <% if !incoming_message.safe_mail_from.nil? %>
                <%= incoming_message.safe_mail_from %>

            <% end %>
            <%=h @info_request.public_body.name %>

<%= simple_date(incoming_message.sent_at) %>

        <%= render :partial => 'bubble', :locals => { :incoming_message => incoming_message, :body => incoming_message.get_body_for_html_display(@collapse_quotes), :attachments => incoming_message.get_attachments_for_display }  %>

            <%= link_to "Link to this", incoming_message_url(incoming_message) %> |
            <%= link_to "Send follow up", show_response_url(:id => incoming_message.info_request.id, :incoming_message_id => incoming_message.id) + "#followup" %>

<%
elsif info_request_event.event_type == 'sent' || info_request_event.event_type == 'followup_sent'
    outgoing_message = info_request_event.outgoing_message
    %>
    <div class="correspondence" id="outgoing-<%=outgoing_message.id.to_s%>">

        <%=h @info_request.user.name %>

<%= simple_date(info_request_event.created_at) %>

        <%= render :partial => 'bubble', :locals => { :body => outgoing_message.get_body_for_html_display(), :attachments => nil }  %>

            <% if outgoing_message.status == 'ready' %>
                 Warning: This message has not yet been sent for an unknown reason.
            <% end %>

            <%= link_to "Link to this", outgoing_message_url(outgoing_message) %> |
            <%= link_to "Send follow up", show_response_no_followup_url(:id => outgoing_message.info_request.id, :incoming_message_id => nil) + "#followup" %>

<% elsif [ 'resent', 'followup_resent' ].include?(info_request_event.event_type) %>

            <%= simple_date(info_request_event.created_at) %>

            Sent
            <% if info_request_event.outgoing_message.message_type == 'initial_request' %>
                request
            <% elsif info_request_event.outgoing_message.message_type == 'followup' %>
                a follow up
            <% else %>
                <% raise "unknown message_type" %>
            <% end %>

            to <%= public_body_link(@info_request.public_body) %> again<% if not info_request_event.same_email_as_previous_send? %>, using a new contact address<% end %>.

<% elsif info_request_event.event_type == 'comment'
    comment = info_request_event.comment
%>
    <%= render :partial => 'comment/single_comment', :locals => { :comment => comment } %>
<%
end

%>

<%
if !info_request_event.nil? && info_request_event.event_type == 'response'
    incoming_message = info_request_event.incoming_message
end

if not incoming_message.nil?
%>
    <div class="correspondence" id="incoming-<%=incoming_message.id.to_s%>">

            <% if !incoming_message.safe_mail_from.nil? %>
                <%= incoming_message.safe_mail_from %>

            <% end %>
            <%=h @info_request.public_body.name %>

<%= simple_date(incoming_message.sent_at) %>

        <%= render :partial => 'bubble', :locals => { :incoming_message => incoming_message, :body => incoming_message.get_body_for_html_display(@collapse_quotes), :attachments => incoming_message.get_attachments_for_display }  %>

            <%= link_to "Link to this", incoming_message_url(incoming_message) %> |
            <%= link_to "Reply", show_response_url(:id => incoming_message.info_request.id, :incoming_message_id => incoming_message.id) + "#followup" %>

<%
elsif info_request_event.event_type == 'sent' || info_request_event.event_type == 'followup_sent'
    outgoing_message = info_request_event.outgoing_message
    %>
    <div class="correspondence" id="outgoing-<%=outgoing_message.id.to_s%>">

        <%=h @info_request.user.name %>

<%= simple_date(info_request_event.created_at) %>

        <%= render :partial => 'bubble', :locals => { :body => outgoing_message.get_body_for_html_display(), :attachments => nil }  %>

            <% if outgoing_message.status == 'ready' %>
                 Warning: This message has not yet been sent for an unknown reason.
            <% end %>

            <%= link_to "Link to this", outgoing_message_url(outgoing_message) %> |
            <%= link_to "Send follow up", show_response_no_followup_url(:id => outgoing_message.info_request.id, :incoming_message_id => nil) + "#followup" %>

<% elsif [ 'resent', 'followup_resent' ].include?(info_request_event.event_type) %>

            <%= simple_date(info_request_event.created_at) %>

            Sent
            <% if info_request_event.outgoing_message.message_type == 'initial_request' %>
                request
            <% elsif info_request_event.outgoing_message.message_type == 'followup' %>
                a follow up
            <% else %>
                <% raise "unknown message_type" %>
            <% end %>

            to <%= public_body_link(@info_request.public_body) %> again<% if not info_request_event.same_email_as_previous_send? %>, using a new contact address<% end %>.

<% elsif info_request_event.event_type == 'comment'
    comment = info_request_event.comment
%>
    <%= render :partial => 'comment/single_comment', :locals => { :comment => comment } %>
<%
end

%>


Unused view.

Unused view.

Body#index

Find me in app/views/body/index.rhtml


[ClockingIT @ Only find creator if there is one]

<% if request.xhr? %>
    <%= form_remote_tag :url => { :action => 'update_ajax', :id => @task } ,
                        :loading => "Element.show('loading');",
                        :complete => "Element.hide('loading');"
    %>
<% else -%>
  <%= start_form_tag({ :action => 'update', :id => @task}, { :multipart => "true", :id => "taskform" }) %>
<% end -%>

          <%= render :partial => "task_edit_header", :locals => {:task => @task} %>

     <% creator = User.find(@task.creator_id) if @task.creator_id.to_i > 0
        creator_name = (creator.nil? ? "Unknown" : creator.name)

        updator = User.find(@task.updated_by_id) if @task.updated_by_id.to_i > 0
        updator_name = (updator.nil? ? "Unknown" : updator.name)

     %>
     <%=_ 'Created' %> <%= tz.utc_to_local(@task.created_at).strftime("#{session[:user].time_format} #{session[:user].date_format}") if @task.created_at %> <%= "#{_('by')} #{creator_name}" unless (@task.creator_id.nil? || @task.creator_id == 0)%>
     <% if @task.updated_at && @task.updated_at != @task.created_at %> - <%=_ 'Last Updated' %> <%= tz.utc_to_local(@task.updated_at).strftime("#{session[:user].time_format} #{session[:user].date_format}") if @task.updated_at %> <%= "#{_('by')} #{updator_name}" unless (@task.updated_by_id.nil? || @task.updated_by_id == 0)%>  <% end %>

<%= render_partial "form" %>

  <%= submit_tag _("Save"), :class => "nolabel" %> <%=_ 'and' %>

<%

 options = []
 options << [_("Leave Open"), 0] if @task.status == 0
 options << [_("Revert to Open"), 0] if @task.status != 0
 options << [_("Set in Progress"), 1] if @task.status == 0
 options << [_("Leave as in Progress"), 1] if @task.status == 1
 options << [_("Close"), 2] if @task.status == 0 || @task.status == 1
 options << [_("Leave Closed"), 2] if @task.status == 2
 options << [_("Set as Won't Fix"), 3] if @task.status == 0 || @task.status == 1
 options << [_("Leave as Won't Fix"), 3] if @task.status == 3
 options << [_("Set as Invalid"), 4] if @task.status == 0 || @task.status == 1
 options << [_("Leave as Invalid"), 4] if @task.status == 4
 options << [_("Set as Duplicate"), 5] if @task.status == 0 || @task.status == 1
 options << [_("Leave as Duplicate"), 5] if @task.status == 5

 can_close = {:disabled => "disabled"} unless session[:user].can?( @task.project, 'close' )
 can_close ||= {}
%>

<%= select 'task', 'status', options, {:selected => @task.status}, can_close %>
<%= check_box_tag 'notify', '1', (session[:user].send_notifications > 0) %><%=_ 'Send notification emails' %>

<%= end_form_tag %>

      <%= _ 'History' %>

    <%  day = 0
        for log in @logs
          if day != (tz.utc_to_local(log.started_at)).yday
             day = (tz.utc_to_local(log.started_at)).yday
           %>

                  <%= tz.utc_to_local(log.started_at).strftime("%A, %d %B %Y") %>

        <% end %>
        <%= render :partial => 'activities/log_row', :locals => {:log => log} %>
    <% end %>

<% if request.xhr? %>
    <%= form_remote_tag :url => { :action => 'update_ajax', :id => @task } ,
                        :loading => "Element.show('loading');",
                        :complete => "Element.hide('loading');"
    %>
<% else -%>
  <%= start_form_tag({ :action => 'update', :id => @task}, { :multipart => "true", :id => "taskform" }) %>
<% end -%>

          <%= render :partial => "task_edit_header", :locals => {:task => @task} %>

     <% creator = User.find(@task.creator_id)
        creator_name = (creator.nil? ? "Unknown" : creator.name)

        updator = User.find(@task.updated_by_id) if @task.updated_by_id.to_i > 0
        updator_name = (updator.nil? ? "Unknown" : updator.name)

     %>
     <%=_ 'Created' %> <%= tz.utc_to_local(@task.created_at).strftime("#{session[:user].time_format} #{session[:user].date_format}") if @task.created_at %> <%= "#{_('by')} #{creator_name}" unless (@task.creator_id.nil? || @task.creator_id == 0)%>
     <% if @task.updated_at && @task.updated_at != @task.created_at %> - <%=_ 'Last Updated' %> <%= tz.utc_to_local(@task.updated_at).strftime("#{session[:user].time_format} #{session[:user].date_format}") if @task.updated_at %> <%= "#{_('by')} #{updator_name}" unless (@task.updated_by_id.nil? || @task.updated_by_id == 0)%>  <% end %>

<%= render_partial "form" %>

  <%= submit_tag _("Save"), :class => "nolabel" %> <%=_ 'and' %>

<%

 options = []
 options << [_("Leave Open"), 0] if @task.status == 0
 options << [_("Revert to Open"), 0] if @task.status != 0
 options << [_("Set in Progress"), 1] if @task.status == 0
 options << [_("Leave as in Progress"), 1] if @task.status == 1
 options << [_("Close"), 2] if @task.status == 0 || @task.status == 1
 options << [_("Leave Closed"), 2] if @task.status == 2
 options << [_("Set as Won't Fix"), 3] if @task.status == 0 || @task.status == 1
 options << [_("Leave as Won't Fix"), 3] if @task.status == 3
 options << [_("Set as Invalid"), 4] if @task.status == 0 || @task.status == 1
 options << [_("Leave as Invalid"), 4] if @task.status == 4
 options << [_("Set as Duplicate"), 5] if @task.status == 0 || @task.status == 1
 options << [_("Leave as Duplicate"), 5] if @task.status == 5

 can_close = {:disabled => "disabled"} unless session[:user].can?( @task.project, 'close' )
 can_close ||= {}
%>

<%= select 'task', 'status', options, {:selected => @task.status}, can_close %>
<%= check_box_tag 'notify', '1', (session[:user].send_notifications > 0) %><%=_ 'Send notification emails' %>

<%= end_form_tag %>

      <%= _ 'History' %>

    <%  day = 0
        for log in @logs
          if day != (tz.utc_to_local(log.started_at)).yday
             day = (tz.utc_to_local(log.started_at)).yday
           %>

                  <%= tz.utc_to_local(log.started_at).strftime("%A, %d %B %Y") %>

        <% end %>
        <%= render :partial => 'activities/log_row', :locals => {:log => log} %>
    <% end %>


jump to readme

jump to readme

<!DOCTYPE html>

  <meta content="text/html;charset=utf-8" http-equiv="content-type">
  <title>Free & Open Source Postal Code to Electoral District Web Service</title>

Postal Code to Electoral District API

Examples

http://postal-code-to-edid-webservice.heroku.com/postal_codes/A1A1A1

http://postal-code-to-edid-webservice.heroku.com/postal_codes/K0A1K0

http://postal-code-to-edid-webservice.heroku.com/postal_codes/K0A1K0

Documentation

See here

<!DOCTYPE html>

  <meta content="text/html;charset=utf-8" http-equiv="content-type">
  <title>Free & Open Source Postal Code to Electoral District Web Service</title>

Postal Code to Electoral District API

Examples

http://postal-code-to-edid-webservice.heroku.com/postal_codes/A1A1A1

http://postal-code-to-edid-webservice.heroku.com/postal_codes/K0A1K0

Documentation

See here


Fixed a deprecation warning from the tests. item.type throws warnings.

git-svn-id: 70ab0960c3db1cbf656efd6df54a8f3de72dc710@1505 820eb932-12ee-0310-9ca8-eeb645f39767

<tr <%= alternate_class %>>
  <input class= "feedback_check" type="checkbox" name="feedback_check[<%= item.id %>]"/>
  <%= item.state %>
  <%= link_to_article_edit item.article %>

    <%= link_to_unless item.url.blank?, ((item.author || '(unknown)').slice(0,40)), item.url %>

    <%=h item.email.to_s.slice(0,40) %>

  <%=h truncate(item.body,100)%>
  <%=h item.ip %>
  <%= link_to image_tag('show.png', :alt => "show", :title => "Show content"), :controller => (item.class.to_s == 'Comment') ? 'comments' : 'trackbacks', :article_id => item.article_id, :action => 'show', :id => item.id %>
  <%= link_to image_tag('edit.png', :alt => "edit", :title => "Edit content"), :controller => 'comments', :article_id => item.article_id, :action => 'edit', :id => item.id %>
  <%= link_to image_tag('delete.png'), {:action => 'delete', :id => item.id, :search => params[:search], :page => params[:page] },  :confirm => "Are you sure?", :method => :post %>

<tr <%= alternate_class %>>
  <input class= "feedback_check" type="checkbox" name="feedback_check[<%= item.id %>]"/>
  <%= item.state %>
  <%= link_to_article_edit item.article %>

	<%= link_to_unless item.url.blank?, ((item.author || '(unknown)').slice(0,40)), item.url %>

    <%=h item.email.to_s.slice(0,40) %>

  <%=h truncate(item.body,100)%>
  <%=h item.ip %>
  <%= link_to image_tag('show.png', :alt => "show", :title => "Show content"), :controller => (item.type.to_s == 'Comment') ? 'comments' : 'trackbacks', :article_id => item.article_id, :action => 'show', :id => item.id %>
  <%= link_to image_tag('edit.png', :alt => "edit", :title => "Edit content"), :controller => 'comments', :article_id => item.article_id, :action => 'edit', :id => item.id %>
  <%= link_to image_tag('delete.png'), {:action => 'delete', :id => item.id, :search => params[:search], :page => params[:page] },  :confirm => "Are you sure?", :method => :post %>


ActionItem1041: displaying the owner name

      <%=
        profile_image(block.owner, :big) +"\n"
      %>

<% if show_name %>

<%= block.owner.name %>

<% end %>

<% if !user.nil? and user.has_permission?('edit_profile', profile) %>

    <%= link_to _('Control panel'), :controller => 'profile_editor' %>

<% end %>

  <%= render :file => 'blocks/profile_info_actions/' + block.owner.class.name.underscore %>

      <%=
        profile_image(block.owner, :big) +"\n"
      %>

<% if show_name %>

<%= block.title %>

<% end %>

<% if !user.nil? and user.has_permission?('edit_profile', profile) %>

    <%= link_to _('Control panel'), :controller => 'profile_editor' %>

<% end %>

  <%= render :file => 'blocks/profile_info_actions/' + block.owner.class.name.underscore %>


ActionItem154: moving 'Register new enterprise'' out of the enterprises list itself

git-svn-id: 43659daf80e124e0b603d67096418e58e4f21099@1377 3f533792-8f58-4932-b0fe-aaf55b0a4547

<%= _('My profile') %>

<%= link_to (@profile.image ? image_tag( @profile.image.public_filename) : _('Put image')), :action => 'change_image'  %>

<%= display_profile_info(profile) %>

<% file_manager do %>

  <%= file_manager_button(_('Edit Profile'), 'icons-app/edit-profile.png', :controller => 'profile_editor', :action => 'edit') %>

  <%= file_manager_button(_('Edit Visual Design'), 'icons-app/design-editor.png', :controller => 'profile_design', :action => 'index') %>

  <%= file_manager_button(_('Manage Content'), 'icons-app/cms.png', :controller => 'cms') %>

  <%= file_manager_button(_('Change Password'), 'icons-app/change-password.png', :controller => 'account', :action => 'change_password') if profile.person? %>

  <%= file_manager_button(_('Manage Members'), 'icons-app/members.png', :controller => 'profile_members') if profile.organization?  %>

  <%= file_manager_button(_('Consumed Products'), 'icons-app/consumed_product.png', :controller => 'consumed_products')  %>

  <%= file_manager_button(_('Manage Products'), 'icons-app/products.png', :controller => 'manage_products') if profile.enterprise? %>

  <%= file_manager_button(_('Enterprise Validation'), 'icons-app/validation.png', :controller => 'enterprise_validation') if profile.is_validation_entity? %>

<% end %>

<% if @profile.person? %>

<%= _('My organizations') %>

  <% file_manager do %>

    <% @profile.enterprise_memberships.each do |em| %>
      <%= file_manager_button(em.name, em.image ? em.image.public_filename(:minor) : 'icons-app/organization.png', :profile => em.identifier, :controller => 'profile_editor' ) %>
    <% end %>

  <% end %>

  <%= button(:add, _('Register a new Enterprise'), :controller => 'enterprise_registration') %>

<% end %>

<%= _('My profile') %>

<%= link_to (@profile.image ? image_tag( @profile.image.public_filename) : _('Put image')), :action => 'change_image'  %>

<%= display_profile_info(profile) %>

<% file_manager do %>

  <%= file_manager_button(_('Edit Profile'), 'icons-app/edit-profile.png', :controller => 'profile_editor', :action => 'edit') %>

  <%= file_manager_button(_('Edit Visual Design'), 'icons-app/design-editor.png', :controller => 'profile_design', :action => 'index') %>

  <%= file_manager_button(_('Manage Content'), 'icons-app/cms.png', :controller => 'cms') %>

  <%= file_manager_button(_('Change Password'), 'icons-app/change-password.png', :controller => 'account', :action => 'change_password') if profile.person? %>

  <%= file_manager_button(_('Manage Members'), 'icons-app/members.png', :controller => 'profile_members') if profile.organization?  %>

  <%= file_manager_button(_('Consumed Products'), 'icons-app/consumed_product.png', :controller => 'consumed_products')  %>

  <%= file_manager_button(_('Manage Products'), 'icons-app/products.png', :controller => 'manage_products') if profile.enterprise? %>

  <%= file_manager_button(_('Enterprise Validation'), 'icons-app/validation.png', :controller => 'enterprise_validation') if profile.is_validation_entity? %>

<% end %>

<% if @profile.person? %>

<%= _('My organizations') %>

  <% file_manager do %>

    <% @profile.enterprise_memberships.each do |em| %>
      <%= file_manager_button(em.name, em.image ? em.image.public_filename(:minor) : 'icons-app/organization.png', :profile => em.identifier, :controller => 'profile_editor' ) %>
    <% end %>

    <%= file_manager_button(_('Register a new Enterprise'), 'icons-app/enterprise-registration.png', :controller => 'enterprise_registration') %>

  <% end %>

<% end %>


Fixed failing source list rendering test

<% content_for('final') do %>
<script>

// create some item data...
[
  { guid: '1001', name: 'item one', group: '1' },
  { guid: '1002', name: 'item two', group: '1' },
  { guid: '1003', name: 'item three', group: '2' },
  { guid: '1004', name: 'item four', group: '3' },
  { guid: '1005', name: 'item five', group: '3' },
  { guid: '1006', name: 'item six', group: '3' }
].each(function(o){ SC.Store.addRecord(SC.Record.create(o)); });

// a collection to hold the items...
testCollection = SC.Record.collection();
testCollection.refresh();

// a controller for the collection...
testController = SC.CollectionController.create();

Test.context("A grouped SC.SourceListView with its content set to a SC.CollectionController", {

  "Item views should be the same width as the SC.CollectionView": function()
  {
    var widthOfFirstItemView = function() {
      var itemView = testSourceListView.get('itemViews').first() ;
      return (itemView) ? itemView.get('frame').width : null ;
    } ;

    widthOfFirstItemView().shouldEqual(testSourceListView.get('frame').width) ;

    SC.Store.addRecord( SC.Record.create({ guid: '0999', name: 'item zero', group: '1' }) );

    widthOfFirstItemView().shouldEqual(testSourceListView.get('frame').width) ;
  },

	"Group views should be the same width as the SC.CollectionView": function()
	{
	    var widthOfFirstGroupView = function() {
	      var groupView = testSourceListView.get('groupViews').first() ;
	      return (groupView) ? groupView.get('frame').width : null ;
	    } ;

	    widthOfFirstGroupView().shouldEqual(testSourceListView.get('frame').width) ;
	},

  // setup: function()
  // {
  //   // add a scroll view wrapper.
  //   scrollView = SC.ScrollView.create() ;
  //   scrollView.set('frame', { x: 10, y: 10, width: 100, height: 100 });
  //   SC.window.appendChild(scrollView);
  //
  //   // create the view...
  //   testSourceListView = SC.ListView.extend({
  //     contentValueKey: 'name',
  //      groupBy: 'group',
  //     contentBinding: 'testController.arrangedObjects',
  //     selectionBinding: 'testController.selection'
  //   }).create();
  //
  //   scrollView.set('content', testSourceListView) ;
  // },
  //
  // teardown: function()
  // {
  //   // tell SC.Store to dump all the records...
  //   // otherwise, since SC.Store is shared across all tests (yuk!) we'll get shared fixtues
  //   testCollection.get('records').each(function(r){ SC.Store.removeRecord(r); });
  //
  //   // remove the view from SC.window... again, no shared fixtures...
  //   testSourceListView.removeFromParent();
  //   scrollView.removeFromParent() ;
  //
  //   delete testSourceListView;
  //   delete testCollection;
  //   delete testController;
  //   delete scrollView ;
  // }

  setup: function()
  {
    // add a scroll view wrapper.
    scrollView = SC.ScrollView.create() ;
    scrollView.set('frame', { x: 10, y: 10, width: 100, height: 30 }) ;
    SC.window.appendChild(scrollView) ;

    // create the view...
    testSourceListView = SC.SourceListView.create({
      contentValueKey: 'name',
      groupBy: 'group',
      contentBinding: 'testController.arrangedObjects',
      selectionBinding: 'testController.selection'
    }) ;
    scrollView.set('content', testSourceListView) ;

    testController.set('content', testCollection) ;
    SC.Binding.flushPendingChanges() ;
  },

  teardown: function()
  {
    // remove the view from SC.window
    testSourceListView.removeFromParent() ;
    scrollView.removeFromParent() ;

    delete testSourceListView ;
    delete scrollView ;

    testController.set('content', null) ;
  }

});

Test.context("A grouped SC.SourceListView with its content set to a SC.CollectionController, after the containing SC.ScrollView has been resized", {

  "Item views should be the same width as the SC.CollectionView": function()
  {
    var widthOfFirstItemView = function() {
      var itemView = testSourceListView.get('itemViews').first() ;
      return (itemView) ? itemView.get('frame').width : null ;
    } ;

    widthOfFirstItemView().shouldEqual(testSourceListView.get('frame').width) ;

    SC.Store.addRecord( SC.Record.create({ guid: '0999', name: 'item zero', group: '1' }) );

    widthOfFirstItemView().shouldEqual(testSourceListView.get('frame').width) ;
  },

	"Group views should be the same width as the SC.CollectionView": function()
	{
    var widthOfFirstGroupView = function() {
      var groupView = testSourceListView.get('groupViews').first() ;
      return (groupView) ? groupView.get('frame').width : null ;
    } ;

    widthOfFirstGroupView().shouldEqual(testSourceListView.get('frame').width) ;
	},

  // setup: function()
  // {
  //   // add a scroll view wrapper.
  //   scrollView = SC.ScrollView.create() ;
  //   scrollView.set('frame', { x: 10, y: 10, width: 100, height: 100 });
  //   SC.window.appendChild(scrollView);
  //
  //   // create the view...
  //   testSourceListView = SC.SourceListView.extend({
  //     contentValueKey: 'name',
  //      groupBy: 'group',
  //     contentBinding: 'testController.arrangedObjects',
  //     selectionBinding: 'testController.selection'
  //   }).create();
  //
  //   scrollView.set('content', testSourceListView) ;
  //
  //   // create some item data...
  //   [
  //     { guid: '1001', name: 'item one', group: '1' },
  //     { guid: '1002', name: 'item two', group: '1' },
  //     { guid: '1003', name: 'item three', group: '2' },
  //     { guid: '1004', name: 'item four', group: '3' },
  //     { guid: '1005', name: 'item five', group: '3' },
  //     { guid: '1006', name: 'item six', group: '3' }
  //   ].each(function(o){ SC.Store.addRecord(SC.Record.create(o)); });
  //
  //   // a collection to hold the items...
  //   testCollection = SC.Record.collection();
  //   testCollection.refresh();
  //
  //   // a controller for the collection...
  //   testController = SC.CollectionController.create();
  //   testController.set('content', testCollection);
  //
  //    // resize the scroll view
  //    scrollView.viewFrameWillChange()
  //    scrollView.set('frame', {x: 10, y: 10, width: 200, height: 100})
  //    scrollView.viewFrameDidChange()
  //
  // },
  // teardown: function()
  // {
  //   // tell SC.Store to dump all the records...
  //   // otherwise, since SC.Store is shared across all tests (yuk!) we'll get shared fixtues
  //   testCollection.get('records').each(function(r){ SC.Store.removeRecord(r); });
  //
  //   // remove the view from SC.window... again, no shared fixtures...
  //   testSourceListView.removeFromParent();
  //   scrollView.removeFromParent() ;
  //
  //   delete testSourceListView;
  //   delete testCollection;
  //   delete testController;
  //   delete scrollView ;
  // }

  setup: function()
  {
    // add a scroll view wrapper.
    scrollView = SC.ScrollView.create() ;
    scrollView.set('frame', { x: 10, y: 10, width: 100, height: 30 }) ;
    SC.window.appendChild(scrollView) ;

    // create the view...
    testSourceListView = SC.SourceListView.create({
      contentValueKey: 'name',
      groupBy: 'group',
      contentBinding: 'testController.arrangedObjects',
      selectionBinding: 'testController.selection'
    }) ;
    scrollView.set('content', testSourceListView) ;

    testController.set('content', testCollection) ;
    SC.Binding.flushPendingChanges() ;
  },

  teardown: function()
  {
    // remove the view from SC.window
    testSourceListView.removeFromParent() ;
    scrollView.removeFromParent() ;

    delete testSourceListView ;
    delete scrollView ;

    testController.set('content', null) ;
  }

});

</script>
<% end %>

<% content_for('final') do %>
<script>

// create some item data...
[
  { guid: '1001', name: 'item one', group: '1' },
  { guid: '1002', name: 'item two', group: '1' },
  { guid: '1003', name: 'item three', group: '2' },
  { guid: '1004', name: 'item four', group: '3' },
  { guid: '1005', name: 'item five', group: '3' },
  { guid: '1006', name: 'item six', group: '3' }
].each(function(o){ SC.Store.addRecord(SC.Record.create(o)); });

// a collection to hold the items...
testCollection = SC.Record.collection();
testCollection.refresh();

// a controller for the collection...
testController = SC.CollectionController.create();

Test.context("A grouped SC.SourceListView with its content set to a SC.CollectionController", {

  "Item views should be the same width as the SC.CollectionView": function()
  {
    var widthOfFirstItemView = function() {
      var itemView = testSourceListView.get('itemViews').first() ;
      return (itemView) ? itemView.get('frame').width : null ;
    } ;

    widthOfFirstItemView().shouldEqual(testSourceListView.get('frame').width) ;

    SC.Store.addRecord( SC.Record.create({ guid: '0999', name: 'item zero', group: '1' }) );

    widthOfFirstItemView().shouldEqual(testSourceListView.get('frame').width) ;
  },

	"Group views should be the same width as the SC.CollectionView": function()
	{
	    var widthOfFirstGroupView = function() {
	      var groupView = testSourceListView.get('groupViews').first() ;
	      return (groupView) ? groupView.get('frame').width : null ;
	    } ;

	    widthOfFirstGroupView().shouldEqual(testSourceListView.get('frame').width) ;
	},

  // setup: function()
  // {
  //   // add a scroll view wrapper.
  //   scrollView = SC.ScrollView.create() ;
  //   scrollView.set('frame', { x: 10, y: 10, width: 100, height: 100 });
  //   SC.window.appendChild(scrollView);
  //
  //   // create the view...
  //   testSourceListView = SC.ListView.extend({
  //     contentValueKey: 'name',
  //      groupBy: 'group',
  //     contentBinding: 'testController.arrangedObjects',
  //     selectionBinding: 'testController.selection'
  //   }).create();
  //
  //   scrollView.set('content', testSourceListView) ;
  // },
  //
  // teardown: function()
  // {
  //   // tell SC.Store to dump all the records...
  //   // otherwise, since SC.Store is shared across all tests (yuk!) we'll get shared fixtues
  //   testCollection.get('records').each(function(r){ SC.Store.removeRecord(r); });
  //
  //   // remove the view from SC.window... again, no shared fixtures...
  //   testSourceListView.removeFromParent();
  //   scrollView.removeFromParent() ;
  //
  //   delete testSourceListView;
  //   delete testCollection;
  //   delete testController;
  //   delete scrollView ;
  // }

  setup: function()
  {
    // add a scroll view wrapper.
    scrollView = SC.ScrollView.create() ;
    scrollView.set('frame', { x: 10, y: 10, width: 100, height: 30 }) ;
    SC.window.appendChild(scrollView) ;

    // create the view...
    testSourceListView = SC.SourceListView.create({
      contentValueKey: 'name',
      groupBy: 'group',
      contentBinding: 'testController.arrangedObjects',
      selectionBinding: 'testController.selection'
    }) ;
    scrollView.set('content', testSourceListView) ;

    testController.set('content', testCollection) ;
  },

  teardown: function()
  {
    // remove the view from SC.window
    testSourceListView.removeFromParent() ;
    scrollView.removeFromParent() ;

    delete testSourceListView ;
    delete scrollView ;

    testController.set('content', null) ;
  }

});

Test.context("A grouped SC.SourceListView with its content set to a SC.CollectionController, after the containing SC.ScrollView has been resized", {

  "Item views should be the same width as the SC.CollectionView": function()
  {
    var widthOfFirstItemView = function() {
      var itemView = testSourceListView.get('itemViews').first() ;
      return (itemView) ? itemView.get('frame').width : null ;
    } ;

    widthOfFirstItemView().shouldEqual(testSourceListView.get('frame').width) ;

    SC.Store.addRecord( SC.Record.create({ guid: '0999', name: 'item zero', group: '1' }) );

    widthOfFirstItemView().shouldEqual(testSourceListView.get('frame').width) ;
  },

	"Group views should be the same width as the SC.CollectionView": function()
	{
    var widthOfFirstGroupView = function() {
      var groupView = testSourceListView.get('groupViews').first() ;
      return (groupView) ? groupView.get('frame').width : null ;
    } ;

    widthOfFirstGroupView().shouldEqual(testSourceListView.get('frame').width) ;
	},

  // setup: function()
  // {
  //   // add a scroll view wrapper.
  //   scrollView = SC.ScrollView.create() ;
  //   scrollView.set('frame', { x: 10, y: 10, width: 100, height: 100 });
  //   SC.window.appendChild(scrollView);
  //
  //   // create the view...
  //   testSourceListView = SC.SourceListView.extend({
  //     contentValueKey: 'name',
  //      groupBy: 'group',
  //     contentBinding: 'testController.arrangedObjects',
  //     selectionBinding: 'testController.selection'
  //   }).create();
  //
  //   scrollView.set('content', testSourceListView) ;
  //
  //   // create some item data...
  //   [
  //     { guid: '1001', name: 'item one', group: '1' },
  //     { guid: '1002', name: 'item two', group: '1' },
  //     { guid: '1003', name: 'item three', group: '2' },
  //     { guid: '1004', name: 'item four', group: '3' },
  //     { guid: '1005', name: 'item five', group: '3' },
  //     { guid: '1006', name: 'item six', group: '3' }
  //   ].each(function(o){ SC.Store.addRecord(SC.Record.create(o)); });
  //
  //   // a collection to hold the items...
  //   testCollection = SC.Record.collection();
  //   testCollection.refresh();
  //
  //   // a controller for the collection...
  //   testController = SC.CollectionController.create();
  //   testController.set('content', testCollection);
  //
  //    // resize the scroll view
  //    scrollView.viewFrameWillChange()
  //    scrollView.set('frame', {x: 10, y: 10, width: 200, height: 100})
  //    scrollView.viewFrameDidChange()
  //
  // },
  // teardown: function()
  // {
  //   // tell SC.Store to dump all the records...
  //   // otherwise, since SC.Store is shared across all tests (yuk!) we'll get shared fixtues
  //   testCollection.get('records').each(function(r){ SC.Store.removeRecord(r); });
  //
  //   // remove the view from SC.window... again, no shared fixtures...
  //   testSourceListView.removeFromParent();
  //   scrollView.removeFromParent() ;
  //
  //   delete testSourceListView;
  //   delete testCollection;
  //   delete testController;
  //   delete scrollView ;
  // }

  setup: function()
  {
    // add a scroll view wrapper.
    scrollView = SC.ScrollView.create() ;
    scrollView.set('frame', { x: 10, y: 10, width: 100, height: 30 }) ;
    SC.window.appendChild(scrollView) ;

    // create the view...
    testSourceListView = SC.SourceListView.create({
      contentValueKey: 'name',
      groupBy: 'group',
      contentBinding: 'testController.arrangedObjects',
      selectionBinding: 'testController.selection'
    }) ;
    scrollView.set('content', testSourceListView) ;

    testController.set('content', testCollection) ;
  },

  teardown: function()
  {
    // remove the view from SC.window
    testSourceListView.removeFromParent() ;
    scrollView.removeFromParent() ;

    delete testSourceListView ;
    delete scrollView ;

    testController.set('content', null) ;
  }

});

</script>
<% end %>


Added the owner as some information to use when creating the cage weighing task.

Add a weighing task for <%= @cage.name %>

Cage owner: <%=h @cage.user.name %>

<%= start_form_tag :controller => 'tasks', :action => 'create_weigh_cage_task', :id => @cage %>

Weighed by

<%= select_tag("users[]", options_from_collection_for_select(@users, "id", "name"),
:multiple => true) %>

on days

<%= select_tag("days[]",
options_for_select([
["Daily", 0],
["Every Monday", 2],
["Every Tuesday", 3],
["Every Wednesday", 4],
["Every Thursday", 5],
["Every Friday", 6],
["Every Saturday", 7],
["Every Sunday", 1]
]),
:multiple => true) %>

   <%= submit_tag 'Add weighing task' %>
<%= end_form_tag %>

Add a weighing task for <%= @cage.name %>

<%= start_form_tag :controller => 'tasks', :action => 'create_weigh_cage_task', :id => @cage %>

Weighed by

<%= select_tag("users[]", options_from_collection_for_select(@users, "id", "name"),
:multiple => true) %>

on days

<%= select_tag("days[]",
options_for_select([
["Daily", 0],
["Every Monday", 2],
["Every Tuesday", 3],
["Every Wednesday", 4],
["Every Thursday", 5],
["Every Friday", 6],
["Every Saturday", 7],
["Every Sunday", 1]
]),
:multiple => true) %>

   <%= submit_tag 'Add weighing task' %>
<%= end_form_tag %>


lose the unneeded <% syntax %>

lose the unneeded <% syntax %>

<% content_for :greeting do %>
<% if @user and !@user.home_lon.nil? and !@user.home_lat.nil? %>
<%= link_to_function 'home', "setPosition(#{@user.home_lat}, #{@user.home_lon}, 10)" %> |
<% end %>
<% end %>

<%= render :partial => 'sidebar', :locals => { :onopen => "resizeMap();", :onclose => "resizeMap();" } %>
<%= render :partial => 'key' %>
<%= render :partial => 'search' %>

You are either using a browser that doesn't support javascript, or you have disabled javascript.

OpenStreetMap uses javascript for its slippy map.

You may want to try the Tiles@Home static tile browser if you are unable to enable javascript.

Permalink

      http://creativecommons.org/licenses/by-sa/2.0/
      http://openstreetmap.org/

      Licensed under the Creative Commons Attribution-Share Alike 2.0 license by the OpenStreetMap project and its contributors.

<%
if params['mlon'] and params['mlat']
	marker = true
	mlon = h(params['mlon'])
	mlat = h(params['mlat'])
end

if params['minlon'] and params['minlat'] and params['maxlon'] and params['maxlat']
	bbox = true
	minlon = h(params['minlon'])
	minlat = h(params['minlat'])
	maxlon = h(params['maxlon'])
	maxlat = h(params['maxlat'])
end

# Decide on a lat lon to initialise the map with. Various ways of doing this
if params['lon'] and params['lat']
	lon =  h(params['lon'])
	lat =  h(params['lat'])
	zoom =  h(params['zoom'] || '5')
	layers = h(params['layers'])

elsif params['mlon'] and params['mlat']
	lon = h(params['mlon'])
	lat = h(params['mlat'])
	zoom =  h(params['zoom'] || '12')
	layers = h(params['layers'])

elsif cookies.key?("_osm_location")
	lon,lat,zoom,layers = cookies["_osm_location"].split("|")

elsif @user and !@user.home_lon.nil? and !@user.home_lat.nil?
	lon =  @user.home_lon
	lat =  @user.home_lat
	zoom = '10'
else
	session[:location] = OSM::IPLocation(request.env['REMOTE_ADDR']) unless session[:location]

	if session[:location]
		bbox = true
		minlon = session[:location][:minlon]
		minlat = session[:location][:minlat]
		maxlon = session[:location][:maxlon]
		maxlat = session[:location][:maxlat]
	else
		lon =  '-0.1'
		lat =  '51.5'
		zoom =  h(params['zoom'] || '5')
	end
	layers = h(params['layers'])
end
%>

<%= javascript_include_tag '/openlayers/OpenLayers.js' %>
<%= javascript_include_tag '/openlayers/OpenStreetMap.js' %>
<%= javascript_include_tag 'map.js' %>

<% content_for :greeting do %>
<% if @user and !@user.home_lon.nil? and !@user.home_lat.nil? %>
<%= link_to_function 'home', "setPosition(#{@user.home_lat}, #{@user.home_lon}, 10)" %> |
<% end %>
<% end %>

<%= render :partial => 'sidebar', :locals => { :onopen => "resizeMap();", :onclose => "resizeMap();" } %>
<%= render :partial => 'key' %>
<%= render :partial => 'search' %>

You are either using a browser that doesn't support javascript, or you have disabled javascript.

OpenStreetMap uses javascript for its slippy map.

You may want to try the Tiles@Home static tile browser if you are unable to enable javascript.

Permalink

      http://creativecommons.org/licenses/by-sa/2.0/
      http://openstreetmap.org/

      Licensed under the Creative Commons Attribution-Share Alike 2.0 license by the OpenStreetMap project and its contributors.

<% if params['mlon'] and params['mlat'] %>
<% marker = true %>
<% mlon = h(params['mlon']) %>
<% mlat = h(params['mlat']) %>
<% end %>

<% if params['minlon'] and params['minlat'] and params['maxlon'] and params['maxlat'] %>
<% bbox = true %>
<% minlon = h(params['minlon']) %>
<% minlat = h(params['minlat']) %>
<% maxlon = h(params['maxlon']) %>
<% maxlat = h(params['maxlat']) %>
<% end %>

<% if params['lon'] and params['lat'] %>
<% lon =  h(params['lon']) %>
<% lat =  h(params['lat']) %>
<% zoom =  h(params['zoom'] || '5') %>
<% layers = h(params['layers']) %>
<% elsif params['mlon'] and params['mlat'] %>
<% lon = h(params['mlon']) %>
<% lat = h(params['mlat']) %>
<% zoom =  h(params['zoom'] || '12') %>
<% layers = h(params['layers']) %>
<% elsif cookies.key?("_osm_location") %>
<% lon,lat,zoom,layers = cookies["_osm_location"].split("|") %>
<% elsif @user and !@user.home_lon.nil? and !@user.home_lat.nil? %>
<% lon =  @user.home_lon %>
<% lat =  @user.home_lat %>
<% zoom = '10' %>
<% else %>
<% session[:location] = OSM::IPLocation(request.env['REMOTE_ADDR']) unless session[:location] %>
<% if session[:location] %>
<% bbox = true %>
<% minlon = session[:location][:minlon] %>
<% minlat = session[:location][:minlat] %>
<% maxlon = session[:location][:maxlon] %>
<% maxlat = session[:location][:maxlat] %>
<% else %>
<% lon =  '-0.1' %>
<% lat =  '51.5' %>
<% zoom =  h(params['zoom'] || '5') %>
<% end %>
<% layers = h(params['layers']) %>
<% end %>

<%= javascript_include_tag '/openlayers/OpenLayers.js' %>
<%= javascript_include_tag '/openlayers/OpenStreetMap.js' %>
<%= javascript_include_tag 'map.js' %>


Offer more name alternatives.

Offer more name alternatives.

<% @title = "About" %>

Contents

Introduction

Making requests

Privacy policy

FOI officers

Credits

Contact us

If your question isn't answered here, or you just wanted to let us know
    something about the site, contact us.

Introduction to WhatDoTheyKnow #

What is WhatDoTheyKnow for? #

To help you find out inside information about what the UK government
is doing.

How does the site work? #

You choose the public authority that you would like information from, then
write a brief note describing what you want to know. We then send your request
to the public authority. Any response they make is automatically published on the
website for you and anyone else to find and read.

Why would I bother to do this? #

You pay taxes, and then government does things with the money. All sorts of
things that affect your life, from healthcare through to national defence. Some
it does badly, some it does well. The more we find out about how government
works, the better able we are to make suggestions to improve the things that
are done badly, and to celebrate the things that are done well.

Why would the public authority bother to reply? #

Under Freedom of Information (FOI) law, they have to respond.

Who makes it? #

WhatDoTheyKnow is created and run by mySociety,
and was initially funded by the JRSST Charitable Trust. mySociety is a project of the
registered charity UK Citizens Online Democracy.
If you like what we're doing, then you can
make a donation.

Making requests #

You're missing the public authority that I want to request from! #

Please contact us with the name of the public authority and,
if you can find it, their contact email address for Freedom of Information requests.
If you'd like to help add a whole category of public authority to the site, for example all
primary care trusts or all schools, then please
edit this shared spreadsheet (Google account required).

How quickly will I get a response? #

By law public authorities must respond "promptly", and in any event not later
than 20 working days after receiving your request. The date of that hard limit
is shown on the page for your request. You will be emailed if this date goes by
without a response, so you can send the public authority another note to remind
them that they are breaking the law. Note: If you had to
clarify your request, the clock starts from that date, instead of the date they
received your initial request.

What if I'm not satisfied with the response? #

If you didn't get the information you asked for, or you didn't get it in time,
then read our page 'Unhappy about the response you got?'.

Can you tell me more of the nitty gritty about the process of making requests? #

Have a look at the
access to official information
pages on the Information Commisioner's website.

If you're requesting information from a Scottish public authority,
the process is very similar. There are differences around time
limits for compliance.
See the Scottish
Information Commissioner's guidance for details.

Can I request information about myself? #

No. Requests made using WhatDoTheyKnow are public, made under the Freedom of
Information Act, and cannot help you find information about a private
individual.

If you would like to know what information a public
authority holds about yourself, you should make a "Subject Access Request" in
private using Data Protection law.  The leaflet "How to access your information" (on the Information Commisioner's
website) explains how to do this.

If you see that somebody has included personal information, perhaps
unwittingly, in a request, please contact us
immediately so we can remove it.

I'd like to keep my request secret! (At least until I publish my story) #

WhatDoTheyKnow is currently only designed for public requests. All
responses that we receive are automatically published on the website for anyone
to read.  You should contact the public authority directly if you would like to
make a request in private.  If you're interested in buying a system which helps
you manage FOI requests in secret, then contact us.

Why can I only request information about the environment from some authorities? #

Some public authorities, such as South East Water,
don't come under the Freedom of Information Act, but do come under another law called
the Environmental Information Regulations (EIR). It's a very similar law, so you make a request
to them using WhatDoTheyKnow in just the same way as an FOI request. The only difference
is that on the page where you write you request, it reminds you that you can only
request "environmental information" and tells you what that means. It is quite broad.

So can I request information using EIR from other authorities? #

Yes, just make a Freedom of Information (FOI) request as normal. The
authority has a duty to work out if the Environmental Information Regulations
(EIR) is the more appropriate legislation to reply under.

Privacy policy #

Who gets to see my email address? #

We will not disclose your email address to anyone unless we are obliged to by law,
or you ask us to. This includes the public authority that you are sending a
request to.  They only get to see an email address
@whatdotheyknow.com which is specific to that request.

If you send a message to another user on the site, then it will reveal your
email address to them. You will be told that this is going to happen.

Will you send nasty, brutish spam to my email address? #

Nope. After you sign up to WhatDoTheyKnow we will only send you emails
relating to a request you made, an email alert that you have signed up for,
or for other reasons that you specifically authorise. We will never give or
sell your email addresses to anyone else, unless we are obliged to by law, or
you ask us to.

Why will my name and my request appear publicly on the site? #

We publish your request on the Internet so that anybody can read it and
make use of the information that you have found.

Your name is tangled up with your request, so has to be published as well.
It is only fair, as we're going to publish the name of the civil servant who
writes the response to your request.  Using your real name also helps people
get in touch with you to assist you with your research or to campaign with you.

By law, you must use your real name for the request to be a valid Freedom of
Information request. See the next question for alternatives if you do not want
to publish your full name.

Can I make an FOI request using a pseudonym? #

Technically, you must use your real name for your request to be a valid Freedom of Information request in law. See this
guidance from the Information Commissioner (January 2009).

However, the same guidance also says it is good practice for the public
authority to still respond to a request made using an obvious pseudonym.
You should refer to this if a public authority refuses a request because you
used a pseudonym.

Be careful though, even if the authority follows this good practice, the
pseudonym will probably make it impossible for you to complain to the
Information Commisioner later about the handling of your request.

There are several good alternatives to using a pseudonym.

Use a different form of your name. The guidance says
that "Mr Arthur Thomas Roberts" can make a valid request as "Arthur Roberts",
"A. T. Roberts", or "Mr Roberts", but not as "Arthur" or "A.T.R.".

Women may use their maiden name.

In most cases, you may use any name by which you are "widely known and/or
is regularly used".

Use the name of a company, the trading name of a company,
or the trading name of a sole trader.

Ask someone else to make the request on your behalf. If you are really
stuck and cannot find anyone, contact us and a
WhatDoTheyKnow volunteer may make the request for you.

They've asked for my postal address! #

If a public authority asks you for your full, physical address, reply to them saying
that section 8.1.b of the FOI Act asks for an "address for correspondence",
and that the email address you are using is sufficient.

The Ministry of Justice has guidance
on this –
"As well as hard copy written correspondence, requests that are
transmitted electronically (for example, in emails) are acceptable
... If a request is received by email and no postal address is given, the email
address should be treated as the return address."

As if that isn't enough, the Information Commissioner's
Hints for Practitioners say
"Any correspondence could include a request for information. If it is written (this includes e-mail), legible, gives the name of the applicant, an address for reply (which could be electronic), and includes a description of the information required, then it will fall within the scope of the legislation."

No no, they need a postal address to send a paper response! #

If an authority only has a paper copy of the information that you want,
they may ask you for a postal address. To start with, try persuading them
to scan in the documents for you. You can even offer to gift them a scanner, which in that particular case
embarrassed the authority into finding one they had already.

If that doesn't work, and you want to provide your postal address privately
in order to receive the documents, mark your request as "They are going to reply by post", and it will
give you an email address to use for that purpose.

How do you moderate request annotations? #

Annotations on WhatDoTheyKnow are to help
people get the information they want, or to give them pointers to places they
can go to help them act on it. We reserve the right to remove anything else.

Endless, political discussions are not allowed.
Post a link to a suitable forum or campaign site elsewhere.

FOI officer questions #

I just got here from bottom of an FOI request, what is going on? #

WhatDoTheyKnow is a service run by a charity. It helps ordinary members
of the public make FOI requests, and easily track and share the responses.

The FOI request you received was made by someone using WhatDoTheyKnow. You can
simply reply to the request as you would any other request from an individual.
The only difference is that your response will be automatically published on
the Internet.

If you have privacy or other concerns, please read the answers below.
You might also like to read this page from the top to find out more about what
the site does from the point of view of a user. You can also search the
site to find the authority that you work for, and view the status of
any requests made using the site.

Finally, we welcome comments and
thoughts from FOI officers, please get in touch.

Why are you publishing responses to FOI requests? #

We think there are lots of benefits. Most importantly it will encourage the
public to be more interested and involved in the work of government. We
also hope that it will reduce the number of duplicate requests on any
subject that a public body will receive. Given that Freedom of Information
responses contain public information, which anybody could easily request
again from the public authority, we think there should be no reason not to
publish it widely.

Are the people making requests real people? #

Yes. For the purposes of keeping track of responses we use
computer-generated email addresses for each request. However, before
they can send a request, each user must register on the site with a
unique email address that we then verify. You can search this site and
find a page listing all requests that each person has made.

An email isn't a sufficient address for an FOI request! #

Yes it is. This
letter from the ICO to Rother District Council gives guidance on the matter, specifically
in the context of requests made via WhatDoTheyKnow.

Aren't you making lots of vexatious requests? #

WhatDoTheyKnow is not making any requests. We are sending requests on
behalf of our users, who are real people making the requests.

Look at it like this - if lots of different people made requests from
different Hotmail email addresses, then you would not think that Microsoft were
making vexatious requests. It is exactly the same if lots of requests are made
via WhatDoTheyKnow. Moreover, since all requests are public it is much easier
for you to see if one of our users is making vexatious requests, and for us to
block them when that happens.

If that isn't enough for you, the
letter from the ICO to Rother District Council gives some guidance on the matter.

I can see a request on WhatDoTheyKnow, but we never got it by email!#

If a request appears on the site, then we have attempted to send it to
the authority by email. Any delivery failure messages will automatically
appear on the site. You can check the address we're using with the "View FOI
email address" link which appears on the page for the authority. Contact us if there is a better address we can
use.

Requests are sometimes not delivered because they are quietly removed by
"spam filters" in the IT department of the authority. Authorities can make
sure this doesn't happen by asking their IT departments to "whitelist"
any email from @whatdotheyknow.com.
If you ask us we will resend any request,
and/or give technical details of delivery so an IT department can chase
up what happened to the message.

Finally, you can respond to any request from your web browser, without
needing any email, using the "respond to request" link at the bottom of
each request page.

How can I send a large file, which won't go by email?#

Instead of email, you can respond to a request directly from your web
browser, including uploading a file. To do this, choose "respond to request" at
the bottom of the request's page. Contact us if it
is too big for even that (more than, say, 50Mb).

Isn't it a problem that you publish the names of civil servants and the text of emails? #

Officers or servants responding to requests are doing so on behalf of the
public as part of their job, and we publish their response on that
basis. Usually the names and phone numbers of FOI officers are already
available on authority websites. We also encourage our users to give their real
name too, so it is fair both ways.

Do you publish email addresses or mobile phone numbers? #

We automatically remove email addresses and labelled mobile phone numbers
that are in the email part of responses from public authorities. Please
contact us if we've missed one. We don't currently
remove these from attachments,
such as Word documents.

Can you take down private information about me? #

If you see any information on the site which you'd like us to remove or
hide, then please let us know. We'll then
remove it, provided it is genuinely private information. In particular, we
will remove remarks that are irrelevantly personal.

What is your policy on documents with commercial copyright?#

Our Freedom of Information law is "applicant blind", so anyone in the
world can request the same document and get a copy of it.

If you think our making a document available on the internet infringes your
copyright, you are welcome to contact us and ask us
to take it down.  However, to save tax payers' money by preventing duplicate
requests, and for good public relations, we'd advise you not to do that.

Credit where credit is due #

Which people made WhatDoTheyKnow? #

Oh, nearly everyone (and maybe you too)!

    Heather Brooke
    (vampy!) has
    been pushing the idea of a UK FOI archive for years now.

    Both Phil Rodgers and Francis Irving
    entered it in a mySociety competition for ideas for public interest websites to build.

    It won,
    and then Chris Lightfoot (RIP :()
    thought up the wheeze of intercepting email responses to requests and
    automatically publishing them.

    Tom Steinberg got the cash to pay for the site from
    a dead chocolate mogul (thank you!) ...

    ... so that Francis Irving, Angie Ahl, Tommy Martin, Louise Crow, Matthew Somerville
    and Tom Steinberg could do the complex mixture of design and coding to build
    what you see today.

    Thanks particularly to Julian Todd (great blog!),
    Francis Davey, and Etienne Pollard for using the site early on and giving
    feedback (and/or legal advice!), and also to all our other users and
    testers.

    Lots of people have been looking up FOI email addresses, and a few
    volunteering to run the site - most especially Adam McGreggor, Alex
    Skene, John Cross and Tony Bowden.

Finally we couldn't do any of this without those
crazy people who volunteer,
amongst many other things, to do the accounts and fill in our VAT return.

You're all stars.

Can I help out? #

Yes please! We're built out of our supporters and volunteers.

You can make a donation. We're a registered charity.

Find out FOI email addresses of authorities that we're missing.

Write a blog post about either WhatDoTheyKnow or an interesting request that you've
    found. Post about it on a forum that you frequent. Tell friends about it.

If you're
    a programmer, get the
    source code
    and send us patches. It's made in Ruby on Rails.

Read more about volunteering with mySociety.

<% @title = "About" %>

Contents

Introduction

Making requests

Privacy policy

FOI officers

Credits

Contact us

If your question isn't answered here, or you just wanted to let us know
    something about the site, contact us.

Introduction to WhatDoTheyKnow #

What is WhatDoTheyKnow for? #

To help you find out inside information about what the UK government
is doing.

How does the site work? #

You choose the public authority that you would like information from, then
write a brief note describing what you want to know. We then send your request
to the public authority. Any response they make is automatically published on the
website for you and anyone else to find and read.

Why would I bother to do this? #

You pay taxes, and then government does things with the money. All sorts of
things that affect your life, from healthcare through to national defence. Some
it does badly, some it does well. The more we find out about how government
works, the better able we are to make suggestions to improve the things that
are done badly, and to celebrate the things that are done well.

Why would the public authority bother to reply? #

Under Freedom of Information (FOI) law, they have to respond.

Who makes it? #

WhatDoTheyKnow is created and run by mySociety,
and was initially funded by the JRSST Charitable Trust. mySociety is a project of the
registered charity UK Citizens Online Democracy.
If you like what we're doing, then you can
make a donation.

Making requests #

You're missing the public authority that I want to request from! #

Please contact us with the name of the public authority and,
if you can find it, their contact email address for Freedom of Information requests.
If you'd like to help add a whole category of public authority to the site, for example all
primary care trusts or all schools, then please
edit this shared spreadsheet (Google account required).

How quickly will I get a response? #

By law public authorities must respond "promptly", and in any event not later
than 20 working days after receiving your request. The date of that hard limit
is shown on the page for your request. You will be emailed if this date goes by
without a response, so you can send the public authority another note to remind
them that they are breaking the law. Note: If you had to
clarify your request, the clock starts from that date, instead of the date they
received your initial request.

What if I'm not satisfied with the response? #

If you didn't get the information you asked for, or you didn't get it in time,
then read our page 'Unhappy about the response you got?'.

Can you tell me more of the nitty gritty about the process of making requests? #

Have a look at the
access to official information
pages on the Information Commisioner's website.

If you're requesting information from a Scottish public authority,
the process is very similar. There are differences around time
limits for compliance.
See the Scottish
Information Commissioner's guidance for details.

Can I request information about myself? #

No. Requests made using WhatDoTheyKnow are public, made under the Freedom of
Information Act, and cannot help you find information about a private
individual.

If you would like to know what information a public
authority holds about yourself, you should make a "Subject Access Request" in
private using Data Protection law.  The leaflet "How to access your information" (on the Information Commisioner's
website) explains how to do this.

If you see that somebody has included personal information, perhaps
unwittingly, in a request, please contact us
immediately so we can remove it.

I'd like to keep my request secret! (At least until I publish my story) #

WhatDoTheyKnow is currently only designed for public requests. All
responses that we receive are automatically published on the website for anyone
to read.  You should contact the public authority directly if you would like to
make a request in private.  If you're interested in buying a system which helps
you manage FOI requests in secret, then contact us.

Why can I only request information about the environment from some authorities? #

Some public authorities, such as South East Water,
don't come under the Freedom of Information Act, but do come under another law called
the Environmental Information Regulations (EIR). It's a very similar law, so you make a request
to them using WhatDoTheyKnow in just the same way as an FOI request. The only difference
is that on the page where you write you request, it reminds you that you can only
request "environmental information" and tells you what that means. It is quite broad.

So can I request information using EIR from other authorities? #

Yes, just make a Freedom of Information (FOI) request as normal. The
authority has a duty to work out if the Environmental Information Regulations
(EIR) is the more appropriate legislation to reply under.

Privacy policy #

Who gets to see my email address? #

We will not disclose your email address to anyone unless we are obliged to by law,
or you ask us to. This includes the public authority that you are sending a
request to.  They only get to see an email address
@whatdotheyknow.com which is specific to that request.

If you send a message to another user on the site, then it will reveal your
email address to them. You will be told that this is going to happen.

Will you send nasty, brutish spam to my email address? #

Nope. After you sign up to WhatDoTheyKnow we will only send you emails
relating to a request you made, an email alert that you have signed up for,
or for other reasons that you specifically authorise. We will never give or
sell your email addresses to anyone else, unless we are obliged to by law, or
you ask us to.

Why will my name and my request appear publicly on the site? #

We publish your request on the Internet so that anybody can read it and
make use of the information that you have found.

Your name is tangled up with your request, so has to be published as well.
It is only fair, as we're going to publish the name of the civil servant who
writes the response to your request.  Using your real name also helps people
get in touch with you to assist you with your research or to campaign with you.

By law, you must use your real name for the request to be a valid Freedom of
Information request. See the next question for alternatives if you do not want
to publish your full name.

Can I make an FOI request using a pseudonym? #

Technically, you must use your real name for your request to be a valid Freedom of Information request in law. See this
guidance from the Information Commissioner (January 2009).

However, the same guidance also says it is good practice for the public
authority to still respond to a request made using an obvious pseudonym.
You should refer to this if a public authority refuses a request because you
used a pseudonym.

Be careful though, even if the authority follows this good practice, the
pseudonym will probably make it impossible for you to complain to the
Information Commisioner later about the handling of your request.

There are several good alternatives to using a pseudonym.

Make the request using a different form of your name. The guidance says
that "Mr Arthur Thomas Roberts" can make a valid request as "Arthur Roberts",
"A. T. Roberts", or "Mr Roberts", but not as "Arthur" or "A.T.R.".

Make the request using the name of a company, the trading name of a company,
or the trading name of a sole trader.

Ask someone else to make the request on your behalf. If you really cannot
find anyone, please contact us and a WhatDoTheyKnow
volunteer may make the request for you.

They've asked for my postal address! #

If a public authority asks you for your full, physical address, reply to them saying
that section 8.1.b of the FOI Act asks for an "address for correspondence",
and that the email address you are using is sufficient.

The Ministry of Justice has guidance
on this –
"As well as hard copy written correspondence, requests that are
transmitted electronically (for example, in emails) are acceptable
... If a request is received by email and no postal address is given, the email
address should be treated as the return address."

As if that isn't enough, the Information Commissioner's
Hints for Practitioners say
"Any correspondence could include a request for information. If it is written (this includes e-mail), legible, gives the name of the applicant, an address for reply (which could be electronic), and includes a description of the information required, then it will fall within the scope of the legislation."

No no, they need a postal address to send a paper response! #

If an authority only has a paper copy of the information that you want,
they may ask you for a postal address. To start with, try persuading them
to scan in the documents for you. You can even offer to gift them a scanner, which in that particular case
embarrassed the authority into finding one they had already.

If that doesn't work, and you want to provide your postal address privately
in order to receive the documents, mark your request as "They are going to reply by post", and it will
give you an email address to use for that purpose.

How do you moderate request annotations? #

Annotations on WhatDoTheyKnow are to help
people get the information they want, or to give them pointers to places they
can go to help them act on it. We reserve the right to remove anything else.

Endless, political discussions are not allowed.
Post a link to a suitable forum or campaign site elsewhere.

FOI officer questions #

I just got here from bottom of an FOI request, what is going on? #

WhatDoTheyKnow is a service run by a charity. It helps ordinary members
of the public make FOI requests, and easily track and share the responses.

The FOI request you received was made by someone using WhatDoTheyKnow. You can
simply reply to the request as you would any other request from an individual.
The only difference is that your response will be automatically published on
the Internet.

If you have privacy or other concerns, please read the answers below.
You might also like to read this page from the top to find out more about what
the site does from the point of view of a user. You can also search the
site to find the authority that you work for, and view the status of
any requests made using the site.

Finally, we welcome comments and
thoughts from FOI officers, please get in touch.

Why are you publishing responses to FOI requests? #

We think there are lots of benefits. Most importantly it will encourage the
public to be more interested and involved in the work of government. We
also hope that it will reduce the number of duplicate requests on any
subject that a public body will receive. Given that Freedom of Information
responses contain public information, which anybody could easily request
again from the public authority, we think there should be no reason not to
publish it widely.

Are the people making requests real people? #

Yes. For the purposes of keeping track of responses we use
computer-generated email addresses for each request. However, before
they can send a request, each user must register on the site with a
unique email address that we then verify. You can search this site and
find a page listing all requests that each person has made.

An email isn't a sufficient address for an FOI request! #

Yes it is. This
letter from the ICO to Rother District Council gives guidance on the matter, specifically
in the context of requests made via WhatDoTheyKnow.

Aren't you making lots of vexatious requests? #

WhatDoTheyKnow is not making any requests. We are sending requests on
behalf of our users, who are real people making the requests.

Look at it like this - if lots of different people made requests from
different Hotmail email addresses, then you would not think that Microsoft were
making vexatious requests. It is exactly the same if lots of requests are made
via WhatDoTheyKnow. Moreover, since all requests are public it is much easier
for you to see if one of our users is making vexatious requests, and for us to
block them when that happens.

If that isn't enough for you, the
letter from the ICO to Rother District Council gives some guidance on the matter.

I can see a request on WhatDoTheyKnow, but we never got it by email!#

If a request appears on the site, then we have attempted to send it to
the authority by email. Any delivery failure messages will automatically
appear on the site. You can check the address we're using with the "View FOI
email address" link which appears on the page for the authority. Contact us if there is a better address we can
use.

Requests are sometimes not delivered because they are quietly removed by
"spam filters" in the IT department of the authority. Authorities can make
sure this doesn't happen by asking their IT departments to "whitelist"
any email from @whatdotheyknow.com.
If you ask us we will resend any request,
and/or give technical details of delivery so an IT department can chase
up what happened to the message.

Finally, you can respond to any request from your web browser, without
needing any email, using the "respond to request" link at the bottom of
each request page.

How can I send a large file, which won't go by email?#

Instead of email, you can respond to a request directly from your web
browser, including uploading a file. To do this, choose "respond to request" at
the bottom of the request's page. Contact us if it
is too big for even that (more than, say, 50Mb).

Isn't it a problem that you publish the names of civil servants and the text of emails? #

Officers or servants responding to requests are doing so on behalf of the
public as part of their job, and we publish their response on that
basis. Usually the names and phone numbers of FOI officers are already
available on authority websites. We also encourage our users to give their real
name too, so it is fair both ways.

Do you publish email addresses or mobile phone numbers? #

We automatically remove email addresses and labelled mobile phone numbers
that are in the email part of responses from public authorities. Please
contact us if we've missed one. We don't currently
remove these from attachments,
such as Word documents.

Can you take down private information about me? #

If you see any information on the site which you'd like us to remove or
hide, then please let us know. We'll then
remove it, provided it is genuinely private information. In particular, we
will remove remarks that are irrelevantly personal.

What is your policy on documents with commercial copyright?#

Our Freedom of Information law is "applicant blind", so anyone in the
world can request the same document and get a copy of it.

If you think our making a document available on the internet infringes your
copyright, you are welcome to contact us and ask us
to take it down.  However, to save tax payers' money by preventing duplicate
requests, and for good public relations, we'd advise you not to do that.

Credit where credit is due #

Which people made WhatDoTheyKnow? #

Oh, nearly everyone (and maybe you too)!

    Heather Brooke
    (vampy!) has
    been pushing the idea of a UK FOI archive for years now.

    Both Phil Rodgers and Francis Irving
    entered it in a mySociety competition for ideas for public interest websites to build.

    It won,
    and then Chris Lightfoot (RIP :()
    thought up the wheeze of intercepting email responses to requests and
    automatically publishing them.

    Tom Steinberg got the cash to pay for the site from
    a dead chocolate mogul (thank you!) ...

    ... so that Francis Irving, Angie Ahl, Tommy Martin, Louise Crow, Matthew Somerville
    and Tom Steinberg could do the complex mixture of design and coding to build
    what you see today.

    Thanks particularly to Julian Todd (great blog!),
    Francis Davey, and Etienne Pollard for using the site early on and giving
    feedback (and/or legal advice!), and also to all our other users and
    testers.

    Lots of people have been looking up FOI email addresses, and a few
    volunteering to run the site - most especially Adam McGreggor, Alex
    Skene, John Cross and Tony Bowden.

Finally we couldn't do any of this without those
crazy people who volunteer,
amongst many other things, to do the accounts and fill in our VAT return.

You're all stars.

Can I help out? #

Yes please! We're built out of our supporters and volunteers.

You can make a donation. We're a registered charity.

Find out FOI email addresses of authorities that we're missing.

Write a blog post about either WhatDoTheyKnow or an interesting request that you've
    found. Post about it on a forum that you frequent. Tell friends about it.

If you're
    a programmer, get the
    source code
    and send us patches. It's made in Ruby on Rails.

Read more about volunteering with mySociety.


Small bug when correct spelling of old version of Name no longer exists.

<%= :RANK.t %>: <%= rank_as_string(name.rank) %>

<%= :STATUS.t %>: <%= name.status %>
  <% if name.is_misspelling? %>
    (<%= :MISSPELLED.t %>)
  <% end %>

<%= :NAME.t %>: <%= h(name.real_text_name) %>

<%= :AUTHORITY.t %>: <%= name.author.to_s.t %>

<%= :CITATION.t %>: <%= name.citation.to_s.t %>

<% if name.is_misspelling? %>
  <%= :show_name_misspelling_correct.t %>:
    <%= if name.correct_spelling
      link_to(name.correct_spelling.display_name.t,
              :action => :show_name, :id => name.correct_spelling_id,
              :params => query_params)
    else
      # This can apparently happen for past_names.
      name.correct_spelling_id
    end %>

<% end %>

<% if synonyms
  approved_synonyms, deprecated_synonyms = name.sort_synonyms
  if approved_synonyms != []
    links = approved_synonyms.map do |n|
      link_to(n.display_name.t, :action => "show_name", :id => n.id,
              :params => query_params)
    end %>
    <%= name.deprecated ? :show_name_preferred_synonyms.t :
                          :show_name_synonyms.t %>:
      <%= links.join(', ') %>

  <% end
  if deprecated_synonyms != []
    links = deprecated_synonyms.map do |n|
      link_to(n.display_name.t, :action => "show_name", :id => n.id,
              :params => query_params)
    end %>
    <%= :show_name_deprecated_synonyms.t %>:
      <%= links.join(', ') %>

  <% end
end %>

<%= :RANK.t %>: <%= rank_as_string(name.rank) %>

<%= :STATUS.t %>: <%= name.status %>
  <% if name.is_misspelling? %>
    (<%= :MISSPELLED.t %>)
  <% end %>

<%= :NAME.t %>: <%= h(name.real_text_name) %>

<%= :AUTHORITY.t %>: <%= name.author.to_s.t %>

<%= :CITATION.t %>: <%= name.citation.to_s.t %>

<% if name.is_misspelling? %>
  <%= :show_name_misspelling_correct.t %>:
    <%= link_to((correct_spelling rescue name.correct_spelling.display_name.t),
                :action => :show_name, :id => name.correct_spelling_id,
                :params => query_params) %>

<% end %>

<% if synonyms
  approved_synonyms, deprecated_synonyms = name.sort_synonyms
  if approved_synonyms != []
    links = approved_synonyms.map do |n|
      link_to(n.display_name.t, :action => "show_name", :id => n.id,
              :params => query_params)
    end %>
    <%= name.deprecated ? :show_name_preferred_synonyms.t :
                           :show_name_synonyms.t %>:
      <%= links.join(', ') %>

  <% end
  if deprecated_synonyms != []
    links = deprecated_synonyms.map do |n|
      link_to(n.display_name.t, :action => "show_name", :id => n.id,
              :params => query_params)
    end %>
    <%= :show_name_deprecated_synonyms.t %>:
      <%= links.join(', ') %>

  <% end
end %>


Disabled print/pdf buttons on system pages because they do not work

git-svn-id: fff0e24cb22af42ca7d192cf3063f87aa8e42ffe@1301 3db89d08-1e44-db11-a2a8-0014220fd31b

<% @page_title = @page.title %>

<% if @project and @project.has_nav_content? and !@project.nav_content.body.blank? %>

    <%= render_filtered_text(@project, :nav_content) %>

<% end %>

<% unless @page.title == 'index' %>

    <%= h(@page.title) %>

    <% if current_user.can_edit_pages?(@project) %>
      <%= link_to_page_editor(@page) %>
    <% end %>
    <% unless @project.to_s.empty? %>
      <%= link_to_page_printer(@page) %>
      <%= link_to_page_pdf(@page) %>
    <% end %>

<% end %>

<%= render_page(@page) %>

  Updated <%= h(format_time_from(@page.filtered_text.updated_on, current_user)) %>
  by <%= link_to_person(@page.filtered_text.updated_by) %>

  <% if current_user.can_edit_pages?(@project) %>
    <%= link_to_page_editor(@page) %>
  <% end %>
  <% unless @project.to_s.empty? %>
    <%= link_to_page_printer(@page) %>
    <%= link_to_page_pdf(@page) %>
  <% end %>

Tags: <%= render_tag_editor(@page) %>

<%= tag_cloud_for(@page) %>

<%= comment_section_for(@page) %>

<% @page_title = @page.title %>

<% if @project and @project.has_nav_content? and !@project.nav_content.body.blank? %>

    <%= render_filtered_text(@project, :nav_content) %>

<% end %>

<% unless @page.title == 'index' %>

    <%= h(@page.title) %>

    <% if current_user.can_edit_pages?(@project) %>
      <%= link_to_page_editor(@page) %>
    <% end %>
    <%= link_to_page_printer(@page) %>
    <%= link_to_page_pdf(@page) %>

<% end %>

<%= render_page(@page) %>

  Updated <%= h(format_time_from(@page.filtered_text.updated_on, current_user)) %>
  by <%= link_to_person(@page.filtered_text.updated_by) %>

  <% if current_user.can_edit_pages?(@project) %>
    <%= link_to_page_editor(@page) %>
  <% end %>
  <%= link_to_page_printer(@page) %>
  <%= link_to_page_pdf(@page) %>

Tags: <%= render_tag_editor(@page) %>

<%= tag_cloud_for(@page) %>

<%= comment_section_for(@page) %>


Use user_or_you_capital_link instead of hand-rolling

<div class="comment_in_request" id="comment-<%=comment.id.to_s%>">

        <%# When not logged in, but mid-comment-leaving, there'll be no comment.user %>
        <%= comment.user ? user_or_you_capital_link(comment.user) : "You" %>
        left an annotation (<%= simple_date(comment.created_at || Time.now) %>)

<%= comment.get_body_for_html_display %>

        <% if !comment.id.nil? %>
            <%= link_to "Link to this", comment_url(comment) %>
            <% if !@user.nil? && @user.admin_page_links? %>
                | <%= link_to "Admin", admin_url("request/edit_comment/" + comment.id.to_s) %>
            <% end %>

        <% end %>

<div class="comment_in_request" id="comment-<%=comment.id.to_s%>">

        <%# When not logged in, but mid-comment-leaving, there'll be no comment.user %>
        <%= !comment.user || (!@user.nil? && @user.id == comment.user.id) ? "You" : user_link(comment.user) %>
        left an annotation (<%= simple_date(comment.created_at || Time.now) %>)

<%= comment.get_body_for_html_display %>

        <% if !comment.id.nil? %>
            <%= link_to "Link to this", comment_url(comment) %>
            <% if !@user.nil? && @user.admin_page_links? %>
                | <%= link_to "Admin", admin_url("request/edit_comment/" + comment.id.to_s) %>
            <% end %>

        <% end %>


file is now called search_basic.rhtml for consistency

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<title>Find it! | Journals
<% if @action_name != "journals" and @action_name != "index"%>
:  <%= @page_title %>
<% end %>
</title>
<link rel="stylesheet" type="text/css" media="screen" href="http://www.library.gatech.edu/css/umlaut.css">
<%= javascript_include_tag :defaults %>

<link href="http://www.library.gatech.edu/css/print_style.css" rel="stylesheet" media="print" type="text/css">
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">

Home >>
    Search & Locate >>
    <% if @action_name != "journals" and @action_name != "index"%>
    <%= link_to 'Journals', :controller=>'search', :action=>'journals' -%> >>
    <%= @page_title %>
    <% else %>
    Journals
    <% end -%>

 <%= @content_for_layout %>

LIBRARY AND
                   INFORMATION CENTER

                 ©2006 Georgia Institute of Technology :: Atlanta,

                  Georgia 30332


bug #1293

bug #1293

<%= pagination_links(@pages) %>

    Title
    Type
    Created At
    Created By

  <% @pages.each do |page| %>
    <tr class="<%=cycle('row_0', 'row_1')%>">
      <%= link_to page.title, page_url(page), {:target=>'blank'} %>
      <%=h page.type %>
      <%=h page.created_at.strftime("%d %b, %Y ") %>
      <%=h page.created_by_login %>
      <% params = {:id => page.id, :view => @current_view} %>
      <% if actions=actions_for(@current_view) %>
          <% actions.each do |action| %>

              <%= button_to_action(action, params) %>

        <% end %>
      <% elsif @current_view == 'public requested' %>

            <%= link_to "Make Public", { :action => 'update_public', :id => page.id, :view => @current_view, :public => true }, :method => :post %> <%= link_to "Deny", { :action => 'update_public', :id => page.id, :view => @current_view, :public => false }, :method => :post  %>

          <%#= button_to "Public", :action => "update_public", :params => {:id => page.id, :view => @current_view, :public => true } %>
          <%#= button_to "Deny", :action => "update_public", :params => {:id => page.id, :view => @current_view, :public => false} %>

      <% elsif @current_view == 'public' %>

            <%= link_to "Remove Public", { :action => 'remove_public', :id => page.id, :view => @current_view }, :method => :post %>

          <%#= button_to "Remove Public", :action => "remove_public", :params => {:id => page.id, :view => @current_view} %>
      <%end%>

  <% end %>

<%= pagination_links(@pages) %>

<%= pagination_links(@pages) %>

    Title
    Type
    Created At
    Created By

  <% @pages.each do |page| %>
    <tr class="<%=cycle('row_0', 'row_1')%>">
      <%= link_to page.title, page_url(page) %>
      <%=h page.type %>
      <%=h page.created_at.strftime("%d %b, %Y ") %>
      <%=h page.created_by_login %>
      <% params = {:id => page.id, :view => @current_view} %>
      <% if actions=actions_for(@current_view) %>
          <% actions.each do |action| %>

              <%= button_to_action(action, params) %>

        <% end %>
      <% elsif @current_view == 'public requested' %>

            <%= link_to "Make Public", { :action => 'update_public', :id => page.id, :view => @current_view, :public => true }, :method => :post %> <%= link_to "Deny", { :action => 'update_public', :id => page.id, :view => @current_view, :public => false }, :method => :post  %>

          <%#= button_to "Public", :action => "update_public", :params => {:id => page.id, :view => @current_view, :public => true } %>
          <%#= button_to "Deny", :action => "update_public", :params => {:id => page.id, :view => @current_view, :public => false} %>

      <% elsif @current_view == 'public' %>

            <%= link_to "Remove Public", { :action => 'remove_public', :id => page.id, :view => @current_view }, :method => :post %>

          <%#= button_to "Remove Public", :action => "remove_public", :params => {:id => page.id, :view => @current_view} %>
      <%end%>

  <% end %>

<%= pagination_links(@pages) %>