Wiki source for KlenwellCodeHandlerShow637


Show raw source

=====Source: show.php=====
last updated: 5 Aug 2007
author: KlenWell

note: the code has not yet been tested (I need to upgrade to the latest version before I'll be able to test it)

%%(php)
<?php
/**
* show.php refactored to controller model
*
* This is based on revision #637 (http://wush.net/trac/wikka/changeset/637)
*
* For more info, see http://wikkawiki.org/KlenWell
*
*
* @package Handlers
* @subpackage Page
* @version $Id$
* @license http://www.gnu.org/copyleft/gpl.html GNU General Public License
* @filesource
*
* @uses Config::$anony_delete_own_comments
* @uses Config::$hide_comments
* @uses Wakka::Format()
* @uses Wakka::FormClose()
* @uses Wakka::FormOpen()
* @uses Wakka::GetConfigValue()
* @uses Wakka::GetPageTag()
* @uses Wakka::GetUser()
* @uses Wakka::GetUserName()
* @uses Wakka::HasAccess()
* @uses Wakka::Href()
* @uses Wakka::htmlspecialchars_ent()
* @uses Wakka::LoadComments()
* @uses Wakka::LoadPage()
* @uses Wakka::LoadUser()
* @uses Wakka::UserIsOwner()
*/

// *** Show Flags for Controller
$_SHOW['page_start'] = 0;
$_SHOW['no_access'] = 0;
$_SHOW['not_exists'] = 0;
$_SHOW['page_body'] = 0;
$_SHOW['revision_info'] = 0;
$_SHOW['revision_edit_form'] = 0;
$_SHOW['comments'] = 0;
$_SHOW['hidden_comments'] = 0;
$_SHOW['no_comments'] = 0;
$_SHOW['comment_form'] = 0;
$_SHOW['page_close'] = 0;

// *** HTML Blocks
$_HTML['page'] = '';
$_HTML['page_start'] = '';
$_HTML['no_access'] = '';
$_HTML['not_exists'] = '';
$_HTML['revision_info'] = '';
$_HTML['page_body'] = '';
$_HTML['revision_edit_form'] = '';
$_HTML['page_close_div'] = '';
$_HTML['comments_header'] = '';
$_HTML['comments'] = '';
$_HTML['comment_form'] = '';
$_HTML['hidden_comments'] = '';
$_HTML['page_close'] = '';



// *** displayComments function
function displayComments(&$obj, &$comments, $tag)
{
$current_user = $obj->GetUserName();
$is_owner = $obj->UserIsOwner();
$prev_level = null;
$threaded = 0;
if ($_SESSION['show_comments'][$tag] == COMMENT_ORDER_THREADED)
{
$threaded = 1;
}

?>
<div class="commentscontainer">
<?php
foreach ($comments as $comment)
{
# Handle legacy or non-threaded comments
if (!isset($comment['level']) || !$threaded)
{
$comment['level'] = 0;
}

# Keep track of closing <div> tags to effect nesting
if (isset($prev_level) && ($comment['level'] <= $prev_level))
{
for ($i=0; $i<$prev_level-$comment['level']+1; ++$i)
{
echo '</div><!--closing comment level '.$i.'-->'."\n";
}
}

# Alternate light/dark comment styles per level
$comment_class = '';
if ($comment['level'] % 2 == 1)
{
$comment_class = "comment-layout-1";
}
else
{
$comment_class = "comment-layout-2";
}

if ($comment['status'] == 'deleted') {
?>
<div class="<?php echo $comment_class ?>">
<div class="commentdeleted"><?php echo COMMENT_DELETED_LABEL ?></div>
<?php
}
else
{
# Some stats
$comment_author = $obj->FormatUser($comment['user']);
//$comment_author = $obj->LoadUser($comment['user'])? $obj->Format($comment['user']) : $comment['user'];
$comment_ts = sprintf(COMMENT_TIME_CAPTION,$comment['time']);
?>
<div id="comment_<?php echo $comment['id'] ?>" class="<?php echo $comment_class ?>" >
<div class="commentheader">
<div class="commentauthor"><?php echo COMMENT_BY_LABEL.$comment_author ?></div>
<div class="commentinfo"><?php echo $comment_ts ?></div>
</div>
<div class="commentbody">
<?php echo $comment['comment'] ?>
</div>
<?php
if ($obj->HasAccess('comment_post'))
{
echo '<div class="commentaction">';
echo $obj->FormOpen("processcomment");
?>
<input type="hidden" name="comment_id" value="<?php echo $comment['id'] ?>" />
<?php
?>
<input type="submit" name="submit" value="<?php echo COMMENT_REPLY_BUTTON ?>" />
<?php
$user = $obj->GetUser();
if (isset($user))
{
$name = $user['name'];
}
if ($is_owner || $name == $comment['user'] || ($obj->config['anony_delete_own_comments'] && $current_user == $comment['user']))
{
?>
<input type="submit" name="submit" value="<?php echo COMMENT_DELETE_BUTTON ?>" />
<?php
}
echo $obj->FormClose();
echo "</div>";
}
}
$prev_level = $comment['level'];
}
for ($i=0; $i<$prev_level+1; ++$i)
{
print '</div><!--closing comment level (end)-->'."\n";
}
?>
</div>
<?php
}



// *** Controller

// Default Shows
$_SHOW['page_start'] = 1;
$_SHOW['page_close'] = 1;

// Has Page Access
if (!$this->HasAccess('read'))
{
$_SHOW['no_access'] = 1;
}

// Page Exists
if ( !$this->page )
{
$_SHOW['not_exists'] = 1;
}
else
{
$_SHOW['page_body'] = 1;
}

// As Revision
if ($this->page['latest'] == 'N')
{
$_SHOW['revision_info'] = 1;
}

// Revision w/ write access
if ( ($this->page['latest'] == 'N' && $this->HasAccess('write')) && ($latest = $this->LoadPage($this->tag)) )
{
$_SHOW['revision_edit_form'] = 1;
}

// Show Comment Form
if ( $this->GetConfigValue('hide_comments') != 1 )
{
// get page tag
$tag = $this->GetPageTag();

// session settings?
if ( !isset($_SESSION['show_comments'][$tag]) && $this->UserWantsComments($tag) !== FALSE )
{
$_SESSION['show_comments'][$tag] = $this->UserWantsComments($tag);
}

// GET setting takes precedence
if ( isset($_GET['show_comments']) ) #312
{
switch($_GET['show_comments'])
{
case COMMENT_NO_DISPLAY:
$_SESSION['show_comments'][$tag] = COMMENT_NO_DISPLAY;
break;
case COMMENT_ORDER_DATE_ASC:
$_SESSION['show_comments'][$tag] = COMMENT_ORDER_DATE_ASC;
break;
case COMMENT_ORDER_DATE_DESC:
$_SESSION['show_comments'][$tag] = COMMENT_ORDER_DATE_DESC;
break;
case COMMENT_ORDER_THREADED:
$_SESSION['show_comments'][$tag] = COMMENT_ORDER_THREADED;
break;
}
}

if ( isset($_SESSION['show_comments'][$tag]) && ($_SESSION['show_comments'][$tag] != COMMENT_NO_DISPLAY) )
{
$_SHOW['comment_form'] = 1;
}
else
{
$_SHOW['hidden_comments'] = 1;
}
}

// Show Comments?
$comments = $this->LoadComments($this->tag);
if ( $_SESSION['show_comments'][$tag] && $comments )
{
$_SHOW['comments'] = 1;
}

// Comment Post?
if ( $this->HasAccess('comment_post') )
{
$_SHOW['comment_post'] = 1;
}




// *** Viewer Blocks

// Page Start
if ( $_SHOW['page_start'] )
{
$_js = ( ($user = $this->GetUser()) && ($user['doubleclickedit'] == 'N') || !$this->HasAccess('write') ) ? '' : 'ondblclick="document.location=\''.$this->Href('edit').'\';" ';

$_HTML['page_start'] = <<<HTML

<!--starting page content-->
<div class="page" {$_js }>

HTML;
}


// Generic
if ( $_SHOW['no_access'] )
{
$inner = '<p><em class="error">'.WIKKA_ERROR_ACL_READ.'</em></p>';
$_HTML['no_access'] = <<<HTML

$inner
</div>
<!--closing page content-->

HTML;

}


// Page does not exist yet
if ( $_SHOW['not_exists'] )
{
$createlink = '<a href="'.$this->Href('edit').'">'.WIKKA_PAGE_CREATE_LINK_DESC.'</a>';
$inner = '<p>'.sprintf(SHOW_ASK_CREATE_PAGE_CAPTION,$createlink).'</p>';

$_HTML['not_exists'] = <<<HTML

$inner
</div>
<!--closing page content-->

HTML;

}


// Revision Info
if ( $_SHOW['revision_info'] )
{
$pagelink = '<a href="'.$this->Href().'">'.$this->tag.'</a>';
$inner = '<div class="revisioninfo">'.sprintf(SHOW_OLD_REVISION_CAPTION,$pagelink,$this->Link($this->tag, 'revisions', $this->page['time']));

$_HTML['revision_info'] = <<<HTML

$inner
</div>

HTML;

}


// Page Body
if ( $_SHOW['page_body'] )
{
$_HTML['page_body'] = $this->Format($this->page['body'], 'wakka', 'page');
$_HTML['page_close_div'] = "\n".'</div><!--closing page content-->'."\n\n";
}


// Revision Edit Form
if ( $_SHOW['revision_edit_form'] )
{
$form_start = $this->FormOpen('edit');
$lid = $latest['id'];
$hvalue = $this->htmlspecialchars_ent($this->page['body']);
$svalue = SHOW_RE_EDIT_BUTTON;
$form_close = $this->FormClose();

$_HTML['revision_edit_form'] = <<<HTML

<br />
$form_start
<input type="hidden" name="previous" value="$lid" />
<input type="hidden" name="body" value="$hvalue" />
<input type="submit" value="$svalue" />
$form_close

HTML;

}


// Comments Header and Form
if ( $_SHOW['comment_form'] )
{
$href = $this->Href('', '', 'show_comments=0');

$_HTML['comments_header'] = <<<HTML

<div class="commentsheader">
<span id="comments"> </span>Comments [<a href="$href">Hide comments/form</a>]
</div>

HTML;

$form_start = $this->FormOpen('addcomment');
$form_close = $this->FormClose();

$_HTML['comment_form'] = <<<HTML

<div class="commentform">
$form_start
<label for="commentbox">Add a comment to this page:<br />
<textarea id="commentbox" name="body" rows="6" cols="78"></textarea><br />
<input type="submit" value="Add Comment" accesskey="s" />
</label>
$form_close
</div>

HTML;

}


// comments themselves
if ( $_SHOW['comments'] )
{
$comment_stack = '';
$current_user = $this->GetUserName();
$display_mode = $_SESSION['show_comments'][$tag];

// icons
$sort_desc_icon_url = StaticHref('images/icons/sort_desc.gif');
$sort_ascc_icon_url = StaticHref('images/icons/sort_asc.gif');
$sort_comment_icon_url = StaticHref('images/icons/comment.gif');

// comments header
$inner = '<a href="' . $this->Href('', '', 'show_comments='.COMMENT_ORDER_DATE_DESC.'#comments') . '"><img class="'.($display_mode==COMMENT_ORDER_DATE_DESC ? "icon_on" : "icon").'" alt="flat" title="Flat (newest first)" src="'.$sort_desc_icon_url.'" /></a>';
$inner .= '<a href="' . $this->Href('', '', 'show_comments='.COMMENT_ORDER_DATE_ASC.'#comments') . '"><img class="'.($display_mode==COMMENT_ORDER_DATE_ASC ? "icon_on" : "icon").'" alt="flat" title="Flat (oldest first)" src="'.$sort_asc_icon_url.'" /></a>';
$inner .= '<a href="' . $this->Href('', '', 'show_comments='.COMMENT_ORDER_THREADED.'#comments') . '"><img class="'.($display_mode==COMMENT_ORDER_THREADED ? "icon_on" : "icon").'" alt="threaded" title="Threaded" src="'.$sort_comment_icon_url.'" /></a>';
$inner2 = COMMENTS_CAPTION;
$inner3 = '[<a href="' . $this->Href('', '', 'show_comments='.COMMENT_NO_DISPLAY) . '">' . HIDE_COMMENTS_LINK_DESC . '</a>]';

// comment post
if ( $_SHOW['comment_post'] )
{
$form1 = $this->FormOpen('processcomment');
$svalue = COMMENT_NEW_BUTTON;
$form2 = $this->FormClose();

$_HTML['comment_post'] = <<<HTML

$form1
<input type="submit" name="submit" value="$svalue" />
$form2

HTML;
}

$_HTML['comments_header'] = <<<HTML

<!--starting comments header (show)-->
<div class="commentsheader">
<div id="commentsnav">
$inner
</div>
<!-- closing commentsnav div -->

$inner2
$inner3

{$_HTML['comment_post']}

</div>
<!--closing commentsheader (show)-->

HTML;

// a very ugly hack
if ( $comments )
{
ob_start();
displayComments($this, $comments, $tag);
$_HTML['comments'] = ob_get_flush();
#echo "<pre>{$_HTML['comments']}</pre>"; # debug
}
}


// hidden comments
if ( $_SHOW['hidden_comments'] )
{
$showcomments_text = '';
$commentCount = $this->CountComments($this->tag);

switch ( $commentCount )
{
case 0:
$comments_message = STATUS_NO_COMMENTS.' ';
if ($this->HasAccess('comment_post'))
{
$showcomments_text = $this->FormOpen("processcomment");
$showcomments_text .= '<input type="submit" name="submit" value="'.COMMENT_NEW_BUTTON.'" />';
$showcomments_text .= $this->FormClose();
}
break;

case 1:
$comments_message = STATUS_ONE_COMMENT.' ';
$showcomments_text = '[<a href="'.$this->Href('', '', 'show_comments=1#comments').'">'.DISPLAY_COMMENT_LINK_DESC.'</a>]';
break;


default:
$comments_message = sprintf(STATUS_SOME_COMMENTS, $commentCount).' ';
$comment_ordering = NULL;
if (isset($user['default_comment_display']))
{
$comment_ordering = $user['default_comment_display'];
}
elseif (NULL !== $this->GetConfigValue('default_comment_display'))
{
$comment_ordering = $this->GetConfigValue('default_comment_display');
}
else
{
$comment_ordering = COMMENT_ORDER_DATE_ASC;
}
$showcomments_text = '[<a href="'.$this->Href('', '', 'show_comments='.$comment_ordering.'#comments').'">'.DISPLAY_COMMENTS_LABEL.'</a>]';
}

$_HTML['hidden_comments'] = <<<HTML

<!--starting comments header (hide)-->
<div class="commentsheader">
$comments_message
$showcomments_text
</div>
<!--closing comments block-->

HTML;

}


// Page Close
if ( $_SHOW['page_close'] )
{
$_HTML['page_close'] = <<<HTML

</div>
<!--closing page content-->

HTML;
}

// End Viewer Blocks


// *** TEMPLATE: stitch it all together
require_once('show.tpl.php');
echo $_HTML['page'];

?>
%%


===source: show.tpl.php===
%%(php)
<?php

/* wikka page template

don't remove any of the $_HTML array elements below, but feel free to move them
around and add wrapper classes as you see fit

Full List of $_HTML elements from show.php in template:

{$_HTML['page_start']}
{$_HTML['no_access']}
{$_HTML['not_exists']}
{$_HTML['revision_info']}
{$_HTML['page_body']}
{$_HTML['revision_edit_form']}
{$_HTML['page_close_div']}
{$_HTML['comments_header']}
{$_HTML['comments']}
{$_HTML['comment_form']}
{$_HTML['hidden_comments']}
{$_HTML['page_close']}

*/

$_HTML['page'] = <<<HTML

{$_HTML['page_start']}
{$_HTML['no_access']}
{$_HTML['not_exists']}
{$_HTML['revision_info']}
{$_HTML['page_body']}
{$_HTML['revision_edit_form']}

<div id="comment_stack">
{$_HTML['comments_header']}
{$_HTML['comments']}
{$_HTML['comment_form']}
{$_HTML['hidden_comments']}
</div>

{$_HTML['page_close_div']}
{$_HTML['page_close']}

HTML;

?>
%%
Valid XHTML :: Valid CSS: :: Powered by WikkaWiki