<?xml version="1.0" encoding="UTF-8"?>
<commit>
  <added type="array">
    <added>
      <filename>spec/controllers/pages_controller_spec.rb</filename>
    </added>
    <added>
      <filename>spec/fixtures/page_versions.yml</filename>
    </added>
    <added>
      <filename>spec/fixtures/pages.yml</filename>
    </added>
    <added>
      <filename>spec/fixtures/users.yml</filename>
    </added>
    <added>
      <filename>spec/helpers/pages_helper_spec.rb</filename>
    </added>
  </added>
  <modified type="array">
    <modified>
      <diff>@@ -15,4 +15,8 @@ class ApplicationController &lt; ActionController::Base
     @site ||= Site.find(:first)
   end
   
+  def require_admin
+    redirect_to(page_path('home')) unless logged_in? &amp;&amp; current_user.admin?
+  end
+  
 end</diff>
      <filename>app/controllers/application.rb</filename>
    </modified>
    <modified>
      <diff>@@ -5,7 +5,7 @@ class FlagsController &lt; ApplicationController
   before_filter :admin_required, :only =&gt; :index
 protected
   def admin_required
-    raise AccessDenied unless current_user.admin?
+    redirect_to new_session_path unless current_user.admin?
   end
 
 public
@@ -13,7 +13,7 @@ public
   # collection methods
 
   def create
-    flag = current_user.flags.create! params[:flag]
+    flag = current_user.flags.create!(params[:flag])
     flash[:notice] = if flag.new_record?
       &quot;You already flagged this content!&quot;
     else # success</diff>
      <filename>app/controllers/flags_controller.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1,5 +1,6 @@
 class PagesController &lt; ApplicationController
-  before_filter :require_login, :except =&gt; [:index, :show, :revision]
+  before_filter :require_login, :except =&gt; [:index, :show, :revision, :search]
+  before_filter :require_admin, :only =&gt; [:lock]
   before_filter :check_private, :only =&gt; [:show, :revision]
   caches_page :show
   cache_sweeper :page_sweeper, :only =&gt; [:create, :update]</diff>
      <filename>app/controllers/pages_controller.rb</filename>
    </modified>
    <modified>
      <diff>@@ -2,8 +2,8 @@ module PagesHelper
   
   def wikified_body(body)
     r = RedCloth.new(body)
-    r.gsub!(/\[\[(.*)(\|(.*))?\]\]/) {wiki_link(*$1.split(&quot;|&quot;)[0..1])}
-    r.to_html
+    r.gsub!(/\[\[(.*?)(\|(.*?))?\]\]/) { wiki_link($1, $3) }
+    sanitize r.to_html
   end
   
   def wiki_link(wiki_words, link_text = nil)
@@ -20,10 +20,14 @@ module PagesHelper
   end
   
   def body_input(f)
+    text_input(f, 'body')
+  end
+  
+  def text_input(f, attr)
     if site.disable_teh
-      f.text_area :body
+      f.text_area attr.to_sym
     else
-      textile_editor 'page', 'body'
+      textile_editor 'page', attr
     end
   end
   </diff>
      <filename>app/helpers/pages_helper.rb</filename>
    </modified>
    <modified>
      <diff>@@ -89,7 +89,11 @@ class Page &lt; ActiveRecord::Base
   end
   
   def locked?
-    locked_at.nil? or locked_at &gt; Time.now
+    if locked_at.nil?
+      return false
+    else
+      locked_at &lt; Time.now
+    end
   end
   
   def unlock</diff>
      <filename>app/models/page.rb</filename>
    </modified>
    <modified>
      <diff>@@ -15,7 +15,7 @@
   &lt;tbody&gt;
     &lt;% @flags.each do |flag| %&gt;
     &lt;tr class=&quot;&lt;%= cycle('alternate','') %&gt;&quot;&gt;
-      &lt;td&gt;&lt;%=h flag.created_at.to_s :short %&gt;&lt;/td&gt;
+      &lt;td&gt;&lt;%=h flag.created_at.to_s(:short) %&gt;&lt;/td&gt;
       &lt;td&gt;&lt;%=h flag.user.login %&gt; (&lt;%=h flag.user.flags.size %&gt;)&lt;/td&gt;
       &lt;td&gt;&lt;%= link_to h('%s %i' % [flag.flaggable_type, flag.flaggable_id]), flag.flaggable %&gt;&lt;/td&gt;
       &lt;td&gt;&lt;%= flag.owner ? (link_to h(flag.owner.login), flag.owner) : &quot;Anonymous&quot; %&gt;&lt;/td&gt;</diff>
      <filename>app/views/flags/index.html.erb</filename>
    </modified>
    <modified>
      <diff>@@ -5,7 +5,7 @@
 
   &lt;p&gt;
     &lt;label for=&quot;body&quot;&gt;Body&lt;/label&gt;&lt;br /&gt;
-	&lt;%= body_input(f) %&gt;
+	  &lt;%= body_input(f) %&gt;
   &lt;/p&gt;
 
   &lt;p&gt;</diff>
      <filename>app/views/pages/_form.html.erb</filename>
    </modified>
    <modified>
      <diff>@@ -10,7 +10,7 @@
 &lt;ul class=&quot;meta_info&quot;&gt;
 	&lt;li&gt;&lt;%= link_to('View previous revision', revision_page_url(:id =&gt; @page.permalink, :version =&gt; (@page.previous.version))) if @page.previous %&gt;&lt;/li&gt;
 	&lt;li&gt;&lt;%= link_to('View next revision', revision_page_url(:id =&gt; @page.permalink, :version =&gt; (@page.next.version))) if @page.next %&gt;&lt;/li&gt;
-	&lt;li&gt;&lt;%= link_to &quot;Rollback to this revision&quot;, rollback_page_url(:id =&gt; @page.permalink, :version =&gt; (@page.version)) unless current_revision(@page.page_id, @page.version) || (Page.find(@page.page_id).locked? &amp;&amp; !current_user.admin?) %&gt;&lt;/li&gt;
+	&lt;li&gt;&lt;%= link_to &quot;Rollback to this revision&quot;, rollback_page_url(:id =&gt; @page.permalink, :version =&gt; (@page.version)) unless current_revision(@page.page_id, @page.version) || (Page.find(@page.page_id).locked? &amp;&amp; (logged_in? &amp;&amp; !current_user.admin?)) %&gt;&lt;/li&gt;
 	&lt;%# FIXME Clean up this revision link logic %&gt;
 	&lt;li&gt;&lt;%= link_to 'Return to current revision', wiki_page_url(@page.permalink) %&gt;&lt;/li&gt;
 &lt;/ul&gt;</diff>
      <filename>app/views/pages/revision.html.erb</filename>
    </modified>
    <modified>
      <diff>@@ -0,0 +1,75 @@
+require File.dirname(__FILE__) + &quot;/../spec_helper&quot;
+
+describe FlagsController, &quot;a user not logged in&quot; do
+  fixtures :sites, :users, :pages
+  integrate_views
+  
+  before do
+    controller.stub!(:logged_in?).and_return false
+    controller.stub!(:current_user).and_return :false
+  end
+  
+  it &quot;does not render 'index'&quot; do
+    get :index
+    response.should redirect_to('session/new')
+  end
+  
+  it 'can not flag something' do
+    post :create, :flag =&gt; { :flaggable_type =&gt; 'Page', :flaggable_id =&gt; 1, :reason =&gt; 'outdated' }
+    response.should redirect_to('session/new')
+  end
+end
+
+describe FlagsController, &quot;a user logged in as normal user&quot; do
+  fixtures :sites, :pages, :page_versions, :users
+  integrate_views
+  
+  before do
+    # Mocking this was a bitch.
+    @user = users(:jeremy)
+    
+    controller.stub!(:require_login)
+    controller.stub!(:logged_in?).and_return true
+    controller.stub!(:current_user).and_return @user
+  end
+  
+  it &quot;does not render 'index'&quot; do
+    get :index
+    response.should redirect_to('session/new')
+  end
+  
+  it 'can flag something' do
+    lambda {
+      post :create, :flag =&gt; { :flaggable_type =&gt; 'Page', :flaggable_id =&gt; 1, :reason =&gt; 'outdated', :user_id =&gt; @user.id }
+      response.should redirect_to('pages/hai')
+    }.should change(Flag, :count).by(1)
+  end
+end
+
+
+describe FlagsController, &quot;a user logged in as admin&quot; do
+  fixtures :sites, :pages, :page_versions, :users
+  integrate_views
+  
+  before do
+    @user = users(:admin)
+    controller.stub!(:require_login)
+    controller.stub!(:logged_in?).and_return true
+    controller.stub!(:current_user).and_return @user
+  end
+  
+  it &quot;renders 'index'&quot; do
+    get :index
+    response.should be_success
+    response.should render_template(&quot;index&quot;)    
+  end
+  
+  it 'can flag something' do
+    lambda {
+      post :create, :flag =&gt; { :flaggable_type =&gt; 'Page', :flaggable_id =&gt; 1, :reason =&gt; 'outdated', :user_id =&gt; @user.id }
+      response.should redirect_to('pages/hai')
+    }.should change(Flag, :count).by(1)
+  end
+  
+end
+</diff>
      <filename>spec/controllers/flags_controller_spec.rb</filename>
    </modified>
    <modified>
      <diff>@@ -2,5 +2,6 @@
 first:
   id: 1
   title: RoR
+  require_login_to_post: 1
   created_at: 2008-03-15 10:28:00
   updated_at: 2008-03-15 10:28:00</diff>
      <filename>spec/fixtures/sites.yml</filename>
    </modified>
    <modified>
      <diff>@@ -46,17 +46,24 @@ describe Page, &quot;locking pages&quot; do
   fixtures :sites
   
   before do
-    @page1 = Page.create! :title =&gt; &quot;outbound&quot;, :permalink =&gt; &quot;outbound&quot;, :body =&gt; &quot;empty&quot;, :site_id =&gt; 1
+    @page1 = Page.create! :title =&gt; &quot;outbound&quot;, :permalink =&gt; &quot;outbound&quot;, :body =&gt; &quot;empty&quot;, :site_id =&gt; sites(:first).id
   end
   
-  it &quot;edit a locked page&quot; do
+  it &quot;edits a locked page&quot; do
     @page1.lock
     @page1.body = &quot;Blah blah&quot;
     @page1.save
     @page1.should_not be_valid
   end
   
-  it &quot;edit a previous locked but now unlocked page&quot; do
+  it &quot;sets locked correctly&quot; do
+    @page1.lock
+    @page1.should be_locked
+    @page1.unlock
+    @page1.should_not be_locked
+  end
+  
+  it &quot;edits a previous locked but now unlocked page&quot; do
     @page1.lock
     @page1.unlock
     @page1.body = &quot;Blah blah&quot;</diff>
      <filename>spec/models/page_spec.rb</filename>
    </modified>
  </modified>
  <removed type="array"/>
  <parents type="array">
    <parent>
      <id>ef22344ab94f249f9318c5e5bf5d93e436364d38</id>
    </parent>
  </parents>
  <author>
    <name>Josh Owens</name>
    <email>joshua.owens@gmail.com</email>
  </author>
  <url>http://github.com/queso/signal-wiki/commit/97e1874d38dc94079b9205b3cba0b341b3085fc5</url>
  <id>97e1874d38dc94079b9205b3cba0b341b3085fc5</id>
  <committed-date>2008-04-16T23:51:16-07:00</committed-date>
  <authored-date>2008-04-16T23:51:16-07:00</authored-date>
  <message>Adding the patches from ENTP.  Also fixed some bad page locking logic and tests.</message>
  <tree>2acd64707634af291fae9a4b9e198c65760ec840</tree>
  <committer>
    <name>Josh Owens</name>
    <email>joshua.owens@gmail.com</email>
  </committer>
</commit>
