It seems to work, though I have not tested it very extensively!
How to do it:
Step 1: Show unpublished entries if user is an administrator or super administrator.
Modify function buildQuery() in models/phocaguestbook.php
Code: Select all
function _buildQuery()
{
// We need to get a list of all items in the given category
$user=&JFactory::getUser();
if ($user->usertype == "Super Administrator" || $user->usertype == "Administrator") { /* jb */
$query = 'SELECT *' .
' FROM #__phocaguestbook_items' .
' WHERE catid = '.(int) $this->_id.
' ORDER BY ordering DESC';
}
else
{
$query = 'SELECT *' .
' FROM #__phocaguestbook_items' .
' WHERE catid = '.(int) $this->_id.
' AND published = 1 ' .
' ORDER BY ordering DESC';
}
return $query;
}
Code: Select all
function countItem($id = 0)
{
$user=&JFactory::getUser();
if ($user->usertype == "Super Administrator" || $user->usertype == "Administrator") { /* jb */
$query = 'SELECT COUNT(id) FROM #__phocaguestbook_items'
. ' WHERE catid = '.$id;
}
else {
$query = 'SELECT COUNT(id) FROM #__phocaguestbook_items'
. ' WHERE published = 1 AND catid = '.$id;
}
;
$this->_db->setQuery( $query );
if (!$this->_db->query()) {
$this->setError($this->_db->getErrorMsg());
return false;
}
return $this->_db->loadRow();
}
Modify views/phocaguestbook/tmpl/default.php
Just above "//SECURITY" insert
Code: Select all
/* jb */ if ($values->published != 1){ $msgpg .= " (UNPUBLISHED)"; }
Code: Select all
if ($this->administrator != 0) {
$msgpg.='<a href="'.JRoute::_('index.php?option=com_phocaguestbook&view=phocaguestbook&id='.$this->id.'&Itemid='.$this->itemid.'&controller=phocaguestbook&task=delete&mid='.$values->id.'&limitstart='.$this->pagination->limitstart).'" onclick="return confirm(\''.JText::_( 'Delete Message' ).'\');">'.JHTML::_('image', 'components/com_phocaguestbook/assets/images/icon-trash.gif', JText::_( 'Delete' )).'</a>';
/* jb add publish link */ if ($values->published != 1){
$msgpg.='<a href="'.JRoute::_('index.php?option=com_phocaguestbook&view=phocaguestbook&id='.$this->id.'&Itemid='.$this->itemid.'&controller=phocaguestbook&task=publish&mid='.$values->id.'&limitstart='.$this->pagination->limitstart).'">'.JHTML::_('image', 'components/com_phocaguestbook/assets/images/icon-publish.gif', JText::_( 'publish' )).'</a>';
}
else
{
$msgpg.='<a href="'.JRoute::_('index.php?option=com_phocaguestbook&view=phocaguestbook&id='.$this->id.'&Itemid='.$this->itemid.'&controller=phocaguestbook&task=unpublish&mid='.$values->id.'&limitstart='.$this->pagination->limitstart).'">'.JHTML::_('image', 'components/com_phocaguestbook/assets/images/icon-unpublish.gif', JText::_( 'Unpublish' )).'</a>';
}
}
$msgpg.='</p></div>';
}
//--Messages (Posts, Items)
Insert in function __construct()
Code: Select all
$this->registerTask('publish', 'publish');// Register Extra tasks
Code: Select all
function publish() /* this function jb */
{
global $mainframe;
$user =& JFactory::getUser();
$cid = JRequest::getVar( 'mid', null, '', 'int' );
$id = JRequest::getVar( 'id', null, '', 'int' );
$itemid = JRequest::getVar( 'Itemid', null, '', 'int' );
$limitstart = JRequest::getVar( 'limitstart', null, '', 'int' );
$model = $this->getModel('phocaguestbook');
if (strtolower($user->usertype) == strtolower('super administrator') || $user->usertype == strtolower('administrator')) {
if (count( $cid ) < 1) {
JError::raiseError(500, JText::_( 'Select an item to publish' ) );
}
if(!$model->publish($cid, 1))
{
echo "<script> alert('".$model->getError(true)."'); window.history.go(-1); </script>\n";
$msg = JText::_( 'Error publishing Phoca Guestbook Item' );
}
else {
$msg = JText::_( 'Phoca Guestbook Item published' );
}
} else {
$msg = JText::_( 'You are not authorized to publish selected item' );
}
// Limitstart (if we delete the last item from last pagination, this pagination will be lost, we must change limitstart)
$countItem = $model->countItem($id);
if ((int)$countItem[0] == $limitstart) {
$limitstart = 0;
}
// Redirect
$link = 'index.php?option=com_phocaguestbook&view=phocaguestbook&id='.$id.'&Itemid='.$itemid.'&limitstart='.$limitstart;
$link = JRoute::_($link);
$this->setRedirect( $link, $msg );
}