Revision [5389]

This is an old revision of PageAdminAction made by DarTar on 2005-01-31 10:13:19.

 

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

Search page by name:

Show records per page

[Records (468): 1-10 | 11-20 (sorted by: time, desc )]

  Page Name Owner Last Author Last Edit Handle
SandBox
(Public)
84.4.13.15
2005-01-31 08:18:49 (-)
edit :: delete :: clone :: rename :: acl :: rev
PluginsInDevelo~
(Public)
GmBowen
2005-01-31 04:51:13 (*)
edit :: delete :: clone :: rename :: acl :: rev
ProgrammingHelp
(Public)
GmBowen
2005-01-31 03:38:56 (*)
edit :: delete :: clone :: rename :: acl :: rev
IndependentWikk~
FreeNSK
JavaWoman
2005-01-30 18:50:58 (*)
edit :: delete :: clone :: rename :: acl :: rev
SuggestionBox
(Public)
DarTar
2005-01-30 18:04:39 (*)
edit :: delete :: clone :: rename :: acl :: rev
CategorySystemO~
JsnX
DarTar
2005-01-30 17:56:28 (*)
edit :: delete :: clone :: rename :: acl :: rev
PageAdminAction
DarTar
DarTar
2005-01-30 17:49:48 (*)
edit :: delete :: clone :: rename :: acl :: rev
JeremyYip
JeremyYip
JeremyYip
2005-01-30 12:53:53 (*)
edit :: delete :: clone :: rename :: acl :: rev
PageAdminTest
DarTar
DarTar
2005-01-30 11:36:08 (*)
edit :: delete :: clone :: rename :: acl :: rev
WikkaOptimizati~
DotMG
JavaWoman
2005-01-30 08:22:17 (*)
edit :: delete :: clone :: rename :: acl :: rev

[Check all | Uncheck all] With selected:


Current Version: 0.2


Last available version is 0.2.

Features:

Bugfixes and modifications:

To Do


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.2
 * @since               Wikka 1.1.X.X
 *
 * @output      list of pages available on the current server
 *
 * @todo        - mass-operations
 *          - rename handler
 *          - full-text search
 *          - i18n support
 *          - JW-compliant defaults
 *          - CSS-driven layout
 */



// set default values as constants

define('DEFAULT_RECORDS_LIMIT', '10'); # number of records per page
define('DEFAULT_SORT_FIELD', 'time'); # sort field
define('DEFAULT_SORT_ORDER', 'desc'); # sort order, ascendant or descendant
define('DEFAULT_START', '0'); # start record
define('DEFAULT_SEARCH', ''); # keyword to restrict page search
define('DEFAULT_TAG_LENGTH', '15'); # max. length of displayed pagename
define('DEFAULT_URL_LENGTH', '18'); # max. length of displayed user host

// 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 {

        // URL variables
   
        // limit records per page
        $l = (!$_POST['l'])? $_GET['l'] : $_POST['l'];
        if (!$_POST['l'] && !$_GET['l']) $l = DEFAULT_RECORDS_LIMIT;
   
        // sort field
        $sort = ($_GET['sort'])? $_GET['sort'] : DEFAULT_SORT_FIELD;
        // sort order
        $d = ($_GET['d'])? $_GET['d'] : DEFAULT_SORT_ORDER;
        // start record
        $s = ($_GET['s'])? $_GET['s'] : DEFAULT_START;
   
        // search results
        $q = (!$_POST['q'])? $_GET['q'] : $_POST['q'];
                if (!$_POST['q'] && !$_GET['q']) $q = DEFAULT_SEARCH;

        $where = 'WHERE tag LIKE "%'.$q.'%"and 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 .= 'Search page by name: <input type ="text" name="q" size="20" maxlength="50" value="'.$q.'"/><input type="submit" value="Submit" accesskey="a" /><br /><br />';
        $form .= 'Show <select name="l">';
   
        for ($rec=10; $rec < ($numpages+10); $rec+=10) {
            $selected = ($l == $rec)? 'selected' : '';  
            $form .= '<option value="'.$rec.'" '.$selected.'>'.$rec.'</option>';
        }
        $form .=  '</select> records per page <input type="submit" value="Apply" accesskey="a" /><br /><br />';
        $this->FormClose();
        echo $form;
        // build pager links
        if($s > 0)
            $prev = '<a href="' .$this->Href('','','l='.$l.'&sort='.$sort.'&d='.$d.'&s='.($s-$l)).'&q='.$q.'">'.($s-$l+1).'-'.$s.'</a> |  ';
        if($numpages > ($s + $l))
            $next = ' | <a href="'.$this->Href('','','l='.$l.'&sort='.$sort.'&d='.$d.'&s='.($s+$l)).'&q='.$q.'">'.($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&q='.$q : 'l='.$l.'&sort=tag&d=asc&q='.$q)).'" title="Sort by page name">Page Name</a>';
            $ownerheader = '<a href="'.$this->Href('','', (($sort == 'owner' && $d == 'asc')? 'l='.$l.'&sort=owner&d=desc&q='.$q : 'l='.$l.'&sort=owner&d=asc&q='.$q)).'" title="Sort by page owner">Owner</a>';
            $userheader = '<a href="'.$this->Href('','', (($sort == 'user' && $d == 'asc')? 'l='.$l.'&sort=user&d=desc&q='.$q : 'l='.$l.'&sort=user&d=asc&q='.$q)).'" title="Sort by author name">Last Author</a>';
            $lasteditheader = '<a href="'.$this->Href('','', (($sort == 'time' && $d == 'desc')? 'l='.$l.'&sort=time&d=asc&q='.$q : 'l='.$l.'&sort=time&d=desc&q='.$q)).'" title="Sort by edit time">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) {

                // avoid long page names
                $pagename = (strlen($page['tag']) > DEFAULT_TAG_LENGTH)? substr($page['tag'], 0, DEFAULT_TAG_LENGTH).'~' : $page['tag'];
   
                // 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>)';
                $showpage = '<a href="'.$this->Href('',$page['tag'], '').'" title="Go to '.$page['tag'].'">'.$pagename.'</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 = '(Nobody)';
                }  
                // check last author
                if ($page['user']) {           
                    // is the author a registered user?
                    if ($this->LoadUser($page['user'])) {
                        // does user's homepage exist?
                        if ($this->ExistsPage($page['user'])) {
                            $user = $this->Link($page['user'],'','','','','Go to '.$page['user'].'\'s homepage');
                        } else {
                            $user = $page['user'];
                        }
                    } else {
                        // avoid long host names
                        $user = (strlen($page['user']) > DEFAULT_URL_LENGTH)? substr($page['user'], 0, DEFAULT_URL_LENGTH).'~' : $page['user'];
                    }
                } else {
                    // page has empty user field
                    $user = '(Nobody)';
                }  
                $htmlout .= '  <tr>';
                $htmlout .= '    <td><input type="checkbox" id="'.$page['id'].'" '.(($_GET['selectall'] == 1)? 'checked="checked"' : '').' /></td>';
                $htmlout .= '    <td>'.$showpage.'</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="'.$this->Href('','','l='.$l.'&sort='.$sort.'&d='.$d.'&s='.$s.'&q='.$q.'&selectall=1').'" title="Check all results">Check all</a> | <a href="'.$this->Href('','','l='.$l.'&sort='.$sort.'&d='.$d.'&s='.$s.'&q='.$q.'&selectall=0').'" title="Uncheck all results">Uncheck all</a>]';
            echo ' With selected: <select name="action">';
            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> <input type="submit" value="Submit" accesskey="s" />';
            echo $this->FormClose();
        } else {
            // print error message
            echo '<p><span class="error">Sorry, there are no pages matching</span> <strong>"'.$q.'"</strong></p>';
        }
    }
} else {
    // current user is not admin
    echo $this->Action('pageindex');
}
?>



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