added query string handling to controllers/views; added wiki edit page (no editing yet, though, just viewing wiki source)

This commit is contained in:
tmont 2008-10-19 05:48:30 +00:00
parent 0ffdd23172
commit 079ea35ca5
11 changed files with 105 additions and 27 deletions

View File

@ -32,6 +32,7 @@
break;
case 'WikiPageView':
case 'WikiPageEditView':
case 'WikiPageMenuView':
case 'WikiPageContentView':
case 'PanaceaWikiView':

View File

@ -13,7 +13,16 @@
$uriRegex = str_replace(str_replace('/', DIRECTORY_SEPARATOR, $_SERVER['DOCUMENT_ROOT']), '', dirname(__FILE__));
$uriRegex = str_replace('\\', '/', $uriRegex);
$uriRegex = '^' . $uriRegex . '/([^/]*)(?:/(.*))?';
$uriRegex = '^' . $uriRegex . '/([^/]*)(?:/([^\?]*)(?:\?(.*))?)?';
/*
* $uriRegex: ^/webroot/([^/]*)(?:/(.*)(?:\?(.*))?)?
*
* ^/webroot/ - matches the webroot
* ([^/]*) - matches the section (this can be empty, hence the *)
* (?:/([^\?]*) - matches the page, if there is one
* (?:\?(.*)) - matches the query string, if there is one
*/
Dispatcher::getInstance()->setUriRegex($uriRegex)
->setThrowExceptions(true)

View File

@ -64,10 +64,14 @@
$section = '';
$page = $uriFragments[0];
$query = '';
if (isset($uriFragments[1])) {
$section = ucfirst($uriFragments[0]);
$page = ucfirst($uriFragments[1]);
if (isset($uriFragments[2])) {
$query = $uriFragments[2];
}
}
if (empty($section)) {
$section = 'Default';
@ -85,7 +89,7 @@
}
}
return new $controllerName($page);
return new $controllerName($page, $query);
}
}

View File

@ -20,6 +20,8 @@
*/
class PanaceaDefaultController extends Controller {
protected $queryString;
/**
* Creates a new {@link PanaceaDefaultController}
*
@ -31,8 +33,9 @@
* @param int $viewType One of the {@link View}<kbd>::VIEWTYPE_*</kbd> constants
* @throws {@link InvalidTypeException}
*/
public function __construct($page = '', $viewType = View::VIEWTYPE_HTML) {
public function __construct($page = '', $query = '', $viewType = View::VIEWTYPE_HTML) {
parent::__construct($page, $viewType);
$this->queryString = $query;
$this->viewFactory = PanaceaViewFactory::getInstance();
}

View File

@ -20,9 +20,13 @@
*/
class PanaceaWikiController extends PanaceaDefaultController {
public function __construct($page) {
protected $action;
public function __construct($page, $action = null) {
parent::__construct($page, View::VIEWTYPE_HTML);
$this->viewFactory = WikiViewFactory::getInstance();
$this->action = $action;
}
/**
@ -44,6 +48,7 @@
* @since 2008-10-18
* @uses Request::create()
* @uses HttpUtil::getRequestMethod()
* @todo Remove the hardcoded database connection
*
* @throws {@link InvalidRequestException} if a {@link View} cannot be created
* @return PanaceaTemplateView
@ -57,8 +62,10 @@
$templateView = new PanaceaTemplateView('Wiki :: ' . $this->page);
$mysql = MySql::getInstance('wiki', 'localhost', 'root', 'layne', 'wiki');
$wikiObject = new WikiPageObject(WikiPage::loadByPageName($mysql, $this->page));
$wikiObject->setRevision(WikiHistory::REV_LATEST, $mysql);
$templateView->mainView->addView($this->viewFactory->getView($this->page, $wikiObject));
$templateView->mainView->addView($this->viewFactory->getView($this->page, $wikiObject, $this->action));
return $templateView;
}
catch (ClassNotFoundException $e) {

View File

@ -29,6 +29,8 @@
*/
protected $page;
protected $action;
/**
* Creates a new {@link WikiPageView}
*
@ -38,10 +40,11 @@
* @param WikiPageObject $page The wiki page to display
* @param int $priority The priority of the view
*/
public function __construct(WikiPageObject $page, $priority = 0) {
public function __construct(WikiPageObject $page, $action = null, $priority = 0) {
parent::__construct($priority);
$this->page = $page;
$this->action = $action;
}
}

View File

@ -28,8 +28,14 @@
* @author Tommy Montgomery
* @since 2008-10-18
*/
public function send() {
echo "\t\t" . $this->page;
public function send() { ?>
<div class="wikicontent">
<?php echo $this->page; ?>
</div>
<?php
}
}

View File

@ -0,0 +1,35 @@
<?php
/**
* WikiPageEditView
*
* @package Panacea
* @subpackage Views
* @author Tommy Montgomery
* @since 2008-10-18
*/
/** Bootstraps the NowhereConcave framework */
require_once 'NowhereConcave/bootstrap.php';
/**
* View for wiki source
*
* @package Panacea
* @subpackage Views
* @author Tommy Montgomery
* @since 2008-10-18
*/
class WikiPageEditView extends PanaceaWikiView {
public function send() { ?>
<div class="wikicontent">
<textarea rows="12" cols="80"><?php echo $this->page->getRevision()->wikitext; ?></textarea>
</div>
<?php }
}
?>

View File

@ -34,7 +34,6 @@
<ul class="menu">
<li><a href="<?php echo $this->wikiPath; ?>/<?php echo $this->page->page->page_name; ?>?stats">Statistics</a></li>
<li><a href="<?php echo $this->wikiPath; ?>/<?php echo $this->page->page->page_name; ?>?history">History</a></li>
<li><a href="<?php echo $this->wikiPath; ?>/<?php echo $this->page->page->page_name; ?>?source">Source</a></li>
<li><a href="<?php echo $this->wikiPath; ?>/<?php echo $this->page->page->page_name; ?>?edit">Edit</a></li>
</ul>
<div style="clear:right"></div>

View File

@ -31,22 +31,27 @@
* @param WikiPageObject $page The wiki page to display
* @param int $priority The priority of the view
*/
public function __construct(WikiPageObject $page, $priority = 0) {
parent::__construct($page, $priority);
public function __construct(WikiPageObject $page, $action = null, $priority = 0) {
parent::__construct($page, $action, $priority);
$this->addView(new WikiPageMenuView($page, 1));
$this->addView(new WikiPageContentView($page, 2));
$this->addView(new WikiPageMenuView($page, 3));
$this->addView(new WikiPageMenuView($page, $action, 1));
switch ($action) {
case 'edit':
$this->addView(new WikiPageEditView($page, $action, 2));
break;
case 'history':
$this->addView(new WikiPageHistoryView($page, $action, 2));
break;
case 'stats':
$this->addView(new WikiPageStatsView($page, $action, 2));
break;
default:
$this->addView(new WikiPageContentView($page, $action, 2));
break;
}
/**
* Renders the view
*
* @author Tommy Montgomery
* @since 2008-10-18
*/
public function send() {
parent::send();
$this->addView(new WikiPageMenuView($page, $action, 3));
}
}

View File

@ -10,6 +10,9 @@ body {
a {
text-decoration: none;
}
textarea {
width: 100%;
}
ul.menu {
list-style-type: none;
margin: 0;
@ -143,3 +146,6 @@ ul.menu {
float: right;
margin-left: 10px;
}
.wikicontent {
margin: 10px auto;
}