Revision [5377]

This is an old revision of PageAdminAction made by DarTar on 2005-01-30 17:49:48.

 

Page Administration Action


See also:
Documentation: PageAdminActionInfo.
This is the development page for the Page Administration action.
 


This action, inspired by the UserAdmin action, is meant to allow Wikka Administrators to manage pages and perform several maintenance operations.
It displays the standard PageIndex to non-admins.


Sample output

Show records per page :: Search page name:
[Records (468): 1-10 | 11-20 (sorted by: time, desc )]

  Page Name Owner Last Author Last Edit Handle
PageAdminTest
DarTar
DarTar
2005-01-30 11:36:08 (*)
edit :: delete :: clone :: rename :: acl :: rev
PageAdminAction
DarTar
DarTar
2005-01-30 11:29:36 (*)
edit :: delete :: clone :: rename :: acl :: rev
WikkaOptimization
DotMG
JavaWoman
2005-01-30 08:22:17 (*)
edit :: delete :: clone :: rename :: acl :: rev
WikkaBugs
(Public)
JavaWoman
2005-01-30 07:53:27 (*)
edit :: delete :: clone :: rename :: acl :: rev
SuggestionBox
(Public)
JavaWoman
2005-01-30 07:53:13 (*)
edit :: delete :: clone :: rename :: acl :: rev
TheLounge
JsnX
JavaWoman
2005-01-30 07:43:47 (*)
edit :: delete :: clone :: rename :: acl :: rev
KarmaTester
KarmaTester
KarmaTester
2005-01-30 04:13:16 (*)
edit :: delete :: clone :: rename :: acl :: rev
WikkaDocumentation
(Public)
NilsLindenberg
2005-01-29 16:40:48 (*)
edit :: delete :: clone :: rename :: acl :: rev
SandBox
(Public)
213.209.216.163
2005-01-29 16:01:37 (-)
edit :: delete :: clone :: rename :: acl :: rev
DewJoy
DewJoy
DewJoy
2005-01-29 12:35:01 (*)
edit :: delete :: clone :: rename :: acl :: rev

[Check all | Uncheck all] With selected:


To Do


This is a preliminary draft.
To do:

The code


Save the code below as actions/pageadmin.php and use it as {{pageadmin}}.

<?php

/**
 * Display an interface allowing Wikka administrators to perform multiple operations on Wikka pages.
 *
 * @package             Actions
 * @name                PageAdmin
 *
 * @author              {@link http://wikka.jsnx.com/DarTar Dario Taraborelli}
 * @version             0.1
 * @since               Wikka 1.1.X.X
 *
 * @output      list of pages available on the current server
 *
 * @todo        - mass-operations
 *          - rename handler
 *          - CSS-driven layout
 */


// this is admin-only functionality
if ($this->IsAdmin($this->GetUser())) {

    // perform mass-operations if required (forthcoming)
    if ($_GET["action"] == "massdelete") {
            echo $this->Action("massdelete");
    } else if ($_GET["action"] == "massrename"){
            echo $this->Action("massrename");
    } else if ($_GET["action"] == "massacls"){
            echo $this->Action("massacls");
    } else {
        // pager defaults
   
        // limit records per page
        $l = (!$_POST['l'])? $_GET['l'] : $_POST['l'];
        if (!$_POST['l'] && !$_GET['l']) $l = 10;
   
        // sort field
        $sort = (!$_GET['sort'])? 'time' : $_GET['sort'];
        // sort order
        $d = (!$_GET['d'])? 'desc' : $_GET['d'];
        // start record
        $s = (!$_GET['s'])? '0' : $_GET['s'];
   
        // search results
        $where = ($_POST['search'])? 'WHERE tag LIKE "%'.$_POST['search'].'%"and latest = "Y"' : 'WHERE latest = "Y"';
        echo $this->Format('===== Page Administration ===== --- --- ');
   
        // 1. Get total number of pages
        $pages = $this->LoadSingle('SELECT count(*) as n FROM '.$this->config['table_prefix'].'pages '.$where);
        $numpages = $pages['n'];
   
        // 2. Display pager form
        $form = $this->FormOpen('','','post'); 
        $form .= 'Show <select name="l" onChange="form.submit()">';
   
        for ($rec=10; $rec < ($numpages+10); $rec+=10) {
            $selected = ($l == $rec)? 'selected' : '';  
            $form .= '<option value="'.$rec.'" '.$selected.'>'.$rec.'</option>';
        }
        $form .=  '</select> records per page :: '.
        'Search page name: <input type ="text" name="search" size="20" maxlength="50" value="'.$_POST['search'].'"/>'.
        $this->FormClose();
        echo $form;
        // build pager links
        if($s > 0)
            $prev = '<a href="' .$this->Href('','','l='.$l.'&sort='.$sort.'&d='.$d.'&s='.($s-$l)).'">'.($s-$l+1).'-'.$s.'</a> |  ';
        if($numpages > ($s + $l))
            $next = ' | <a href="'.$this->Href('','','l='.$l.'&sort='.$sort.'&d='.$d.'&s='.($s+$l)).'">'.($s+$l+1).'-'.($s+2*$l).'</a>';
        echo '[Records ('.$numpages.'): '.$prev.'<strong>'.($s+1).'-'.($s+$l).'</strong>'.$next.' (sorted by: <em>'.$sort.', '.$d.'</em> )]<br /><br />';
   
        // get page data
        $pagedata = $this->LoadAll("SELECT * FROM ".$this->config["table_prefix"]."pages ".
        $where." ORDER BY ".$sort." ".$d." limit ".$s.", ".$l);
   
        if ($pagedata) {
   
            // build table headers
   
            $tagheader = '<a href="'.$this->Href('','', (($sort == 'tag' && $d == 'asc')? 'l='.$l.'&sort=tag&d=desc' : 'l='.$l.'&sort=tag&d=asc')).'" title="Reverse sorting order">Page Name</a>';
            $ownerheader = '<a href="'.$this->Href('','', (($sort == 'owner' && $d == 'asc')? 'l='.$l.'&sort=owner&d=desc' : 'l='.$l.'&sort=owner&d=asc')).'" title="Reverse sorting order">Owner</a>';
            $userheader = '<a href="'.$this->Href('','', (($sort == 'user' && $d == 'asc')? 'l='.$l.'&sort=user&d=desc' : 'l='.$l.'&sort=user&d=asc')).'" title="Reverse sorting order">Last Author</a>';
            $lasteditheader = '<a href="'.$this->Href('','', (($sort == 'time' && $d == 'desc')? 'l='.$l.'&sort=time&d=asc' : 'l='.$l.'&sort=time&d=desc')).'" title="Reverse sorting order">Last Edit</a>';
   
            $htmlout = '<table width="100%" border="1px">'.
            '  <tr>'.
                '    <th>&nbsp;</th>'.
            '    <th>'.$tagheader.'</th>'.
            '    <th>'.$ownerheader.'</th>'.
            '    <th>'.$userheader.'</th>'.
            '    <th>'.$lasteditheader.'</th>'.
                '    <th>Handle</th>'.
            '  </tr>';
   
            // feed table
            foreach($pagedata as $page) {
   
                // build links
                $lastedit = $page['time'];
                $lastedit .= ($page['note'])? ' (<a href="'.$this->Href('history', $page['tag'], '').'" title="Last edit: '.$page['note'].'">*</a>)' : ' (<a href="'.$this->Href('history', $page['tag'], '').'" title="Display '.$page['tag'].'\'s history">-</a>)';
                $editpage = '<a href="'.$this->Href('edit',$page['tag'], '').'" title="Edit '.$page['tag'].'">edit</a>';
                $deletepage = '<a href="'.$this->Href('delete',$page['tag'], '').'" title="Delete '.$page['tag'].'">delete</a>';
                $clonepage = '<a href="'.$this->Href('clone',$page['tag'], '').'" title="Clone '.$page['tag'].'">clone</a>';
                $aclpage = '<a href="'.$this->Href('acls',$page['tag'], '').'" title="Change ACLs for '.$page['tag'].'">acl</a>';
                $revpage = '<a href="'.$this->Href('revisions',$page['tag'], '').'" title="Compare previous versions of '.$page['tag'].'">rev</a>';
   
                // check owner
                if ($page['owner']) {          
                    // is the owner a registered user?
                    $owner = ($this->LoadUser($page['owner']) && $this->ExistsPage($page['owner']))? $this->Link($page['owner'],'','','','','Go to '.$page['owner'].'\'s homepage') : $page['owner'];
                } else {
                    // page has empty owner field
                    $owner = '/';
                }  
                // check last author
                if ($page['user']) {           
                    // is the author a registered user?
                    $user = ($this->LoadUser($page['user'])  && $this->ExistsPage($page['owner']))? $this->Link($page['user'],'','','','','Go to '.$page['user'].'\'s homepage') : $page['user'];
                } else {
                    // page has empty user field
                    $user = '/';
                }  
                $htmlout .= '  <tr>';
                $htmlout .= '    <td><input type="checkbox" id="'.$page['id'].'" /></td>';
                $htmlout .= '    <td>'.$this->Link($page['tag']).'</td>      <td><center>'.$owner.
                '</center></td><td><center>'.$user.'</center></td><td><center>'.$lastedit.
                '</center></td> <td><center> '.$editpage.' :: '.$deletepage.' :: '.$clonepage.' :: rename :: '.$aclpage.' :: '.$revpage.'</center></td>';
                $htmlout .= '  </tr>';
            }
   
            $htmlout .= '</table>';
            // print the table
            echo $htmlout;
           
            // multiple-page operations (forthcoming)
            echo '<br />'.$this->FormOpen('','','get');
            echo '[<a href="#">Check all</a> | <a href="#">Uncheck all</a>]';
            echo ' With selected: <select name="action" onChange="form.submit()">';
            echo '<option value="" selected="selected">---</option>';
            echo '<option value="massdelete">Delete</option>';
            echo '<option value="massrename">Rename</option>';
            echo '<option value="massacls">Change ACLs</option>';
            echo '</select>';
            echo $this->FormClose();
        } else {
            // print error message
            echo '<p><span class="error">Sorry, there are no pages matching</span> <strong>"'.$_POST['search'].'"</strong></p>';
        }
    }
} else {
    // current user is not admin
    echo $this->Action('pageindex');
}
?>



CategoryDevelopment
Valid XHTML :: Valid CSS: :: Powered by WikkaWiki