Overview

Packages

  • None
  • Wicked

Classes

  • Text_Wiki_Parse_Heading2
  • Text_Wiki_Parse_Toc2
  • Text_Wiki_Render_Latex_Heading2
  • Text_Wiki_Render_Latex_Toc2
  • Text_Wiki_Render_Plain_Heading2
  • Text_Wiki_Render_Plain_Toc2
  • Text_Wiki_Render_Rst
  • Text_Wiki_Render_Rst_Blockquote
  • Text_Wiki_Render_Rst_Bold
  • Text_Wiki_Render_Rst_Code
  • Text_Wiki_Render_Rst_Deflist
  • Text_Wiki_Render_Rst_Emphasis
  • Text_Wiki_Render_Rst_Freelink
  • Text_Wiki_Render_Rst_Heading2
  • Text_Wiki_Render_Rst_Links
  • Text_Wiki_Render_Rst_List
  • Text_Wiki_Render_Rst_Newline
  • Text_Wiki_Render_Rst_Paragraph
  • Text_Wiki_Render_Rst_Raw
  • Text_Wiki_Render_Rst_Toc2
  • Text_Wiki_Render_Rst_Tt
  • Text_Wiki_Render_Rst_Url
  • Text_Wiki_Render_Xhtml_Attribute
  • Text_Wiki_Render_Xhtml_Code2
  • Text_Wiki_Render_Xhtml_Freelink2
  • Text_Wiki_Render_Xhtml_Heading2
  • Text_Wiki_Render_Xhtml_Image2
  • Text_Wiki_Render_Xhtml_Interwiki
  • Text_Wiki_Render_Xhtml_Registrylink
  • Text_Wiki_Render_Xhtml_Toc2
  • Text_Wiki_Render_Xhtml_Url
  • Text_Wiki_Render_Xhtml_Wickedblock
  • Text_Wiki_Render_Xhtml_Wikilink2
  • Wicked
  • Wicked_Api
  • Wicked_Driver
  • Wicked_Driver_Sql
  • Wicked_Exception
  • Wicked_Factory_Driver
  • Wicked_Page
  • Wicked_Page_AddPage
  • Wicked_Page_AllPages
  • Wicked_Page_AttachedFiles
  • Wicked_Page_BackLinks
  • Wicked_Page_DeletePage
  • Wicked_Page_EditPage
  • Wicked_Page_LeastPopular
  • Wicked_Page_LikePages
  • Wicked_Page_MergeOrRename
  • Wicked_Page_MostPopular
  • Wicked_Page_NewPage
  • Wicked_Page_RecentChanges
  • Wicked_Page_RevertPage
  • Wicked_Page_Search
  • Wicked_Page_StandardHistoryPage
  • Wicked_Page_StandardPage
  • Wicked_Page_SyncDiff
  • Wicked_Page_SyncPages
  • Wicked_Sync
  • Wicked_Sync_Wicked
  • Wicked_Test
  • Overview
  • Package
  • Class
  • Tree
  1: <?php
  2: /**
  3:  * Copyright 2003-2012 Horde LLC (http://www.horde.org/)
  4:  *
  5:  * See the enclosed file COPYING for license information (GPL). If you
  6:  * did not receive this file, see http://www.horde.org/licenses/gpl.
  7:  *
  8:  * @package Wicked
  9: 
 10: /**
 11:  * Wicked EditPage class.
 12:  *
 13:  * @author  Jason M. Felice <jason.m.felice@gmail.com>
 14:  * @package Wicked
 15:  */
 16: class Wicked_Page_EditPage extends Wicked_Page {
 17: 
 18:     /**
 19:      * Display modes supported by this page.
 20:      *
 21:      * @var array
 22:      */
 23:     public $supportedModes = array(
 24:         Wicked::MODE_DISPLAY => true,
 25:         Wicked::MODE_EDIT => true);
 26: 
 27:     /**
 28:      * The page that we're editing.
 29:      *
 30:      * @var string
 31:      */
 32:     protected $_referrer = null;
 33: 
 34:     public function __construct($referrer)
 35:     {
 36:         $this->_referrer = $referrer;
 37:         if ($GLOBALS['conf']['lock']['driver'] != 'none') {
 38:             $this->supportedModes[Wicked::MODE_LOCKING] = $this->supportedModes[Wicked::MODE_UNLOCKING] = true;
 39:         }
 40:     }
 41: 
 42:     /**
 43:      * Returns if the page allows a mode. Access rights and user state
 44:      * are taken into consideration.
 45:      *
 46:      * @see $supportedModes
 47:      *
 48:      * @param integer $mode  The mode to check for.
 49:      *
 50:      * @return boolean  True if the mode is allowed.
 51:      */
 52:     public function allows($mode)
 53:     {
 54:         if ($mode == Wicked::MODE_EDIT) {
 55:             $page = Wicked_Page::getPage($this->referrer());
 56:             if ($page->isLocked(Wicked::lockUser())) {
 57:                 return false;
 58:             }
 59:         }
 60:         return parent::allows($mode);
 61:     }
 62: 
 63:     /**
 64:      * Retrieve this user's permissions for the referring page.
 65:      *
 66:      * @return integer  The permissions bitmask.
 67:      */
 68:     public function getPermissions()
 69:     {
 70:         return parent::getPermissions($this->referrer());
 71:     }
 72: 
 73:     /**
 74:      * Send them back whence they came if they aren't allowed to edit
 75:      * this page.
 76:      */
 77:     public function preDisplay()
 78:     {
 79:         if (!$this->allows(Wicked::MODE_EDIT)) {
 80:             Wicked::url($this->referrer(), true)->redirect();
 81:         }
 82:         if ($this->allows(Wicked::MODE_LOCKING)) {
 83:             $page = Wicked_Page::getPage($this->referrer());
 84:             if ($page->isLocked()) {
 85:                 $page->unlock();
 86:             }
 87:             try {
 88:                 $page->lock();
 89:             } catch (Wicked_Exception $e) {
 90:                 $GLOBALS['notification']->push(sprintf(_("Page failed to lock: %s"), $e->getMessage()), 'horde.error');
 91:             }
 92:         }
 93:     }
 94: 
 95:     /**
 96:      * Renders this page in display mode.
 97:      *
 98:      * @throws Wicked_Exception
 99:      */
100:     public function display()
101:     {
102:         $page = Wicked_Page::getPage($this->referrer());
103:         $page_text = Horde_Util::getFormData('page_text');
104:         if (is_null($page_text)) {
105:             $page_text = $page->getText();
106:         }
107:         require WICKED_TEMPLATES . '/edit/standard.inc';
108:     }
109: 
110:     public function pageName()
111:     {
112:         return 'EditPage';
113:     }
114: 
115:     public function pageTitle()
116:     {
117:         return _("Edit Page");
118:     }
119: 
120:     public function referrer()
121:     {
122:         return $this->_referrer;
123:     }
124: 
125:     public function isLocked()
126:     {
127:         $page = Wicked_Page::getPage($this->referrer());
128:         return $page->isLocked();
129:     }
130: 
131:     public function getLockRequestor()
132:     {
133:         $page = Wicked_Page::getPage($this->referrer());
134:         return $page->getLockRequestor();
135:     }
136: 
137:     public function getLockTime()
138:     {
139:         $page = Wicked_Page::getPage($this->referrer());
140:         return $page->getLockTime();
141:     }
142: 
143:     public function handleAction()
144:     {
145:         global $notification, $conf;
146: 
147:         $page = Wicked_Page::getPage($this->referrer());
148:         if (!$this->allows(Wicked::MODE_EDIT)) {
149:             $notification->push(sprintf(_("You don't have permission to edit \"%s\"."), $page->pageName()));
150:         } else {
151:             if (!empty($GLOBALS['conf']['wicked']['captcha']) &&
152:                 !$GLOBALS['registry']->getAuth() &&
153:                 (Horde_String::lower(Horde_Util::getFormData('wicked_captcha')) != Horde_String::lower(Wicked::getCAPTCHA()))) {
154:                 $notification->push(_("Random string did not match."), 'horde.error');
155:                 return;
156:             }
157:             $text = Horde_Util::getFormData('page_text');
158:             $changelog = Horde_Util::getFormData('changelog');
159:             if ($conf['wicked']['require_change_log'] && empty($changelog)) {
160:                 $notification->push(_("You must provide a change log."), 'horde.error');
161:                 Horde::addInlineScript(array(
162:                     'if (document.editform && document.editform.changelog) document.editform.changelog.focus()'
163:                 ), 'dom');
164:                 return;
165:             }
166:             if (trim($text) == trim($page->getText())) {
167:                 $notification->push(_("No changes made"), 'horde.warning');
168:             } else {
169:                 $page->updateText($text, $changelog);
170:                 $notification->push(_("Page Saved"), 'horde.success');
171:             }
172: 
173:             if ($page->allows(Wicked::MODE_UNLOCKING)) {
174:                 $page->unlock();
175:             }
176:         }
177: 
178:         // Show the newly saved page.
179:         Wicked::url($this->referrer(), true)->redirect();
180:     }
181: 
182: }
183: 
API documentation generated by ApiGen