Revision [5390]

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

 

Page Administration Action

Last edited by DarTar:
Uploading PageAdmin v.0.2
Mon, 31 Jan 2005 10:17 UTC [diff]


See also:
Documentation: PageAdminActionInfo.
This is the development page for the Page Administration action.
Are you a site administrator? Give it a PageAdminTest try
 


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


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