Revision [5408]

This is an old revision of PageAdminAction made by DarTar on 2005-01-31 14:43:34.

 

Page Administration Action

Last edited by DarTar:
Uploading PageAdmin v.0.2.1
Mon, 31 Jan 2005 14:43 UTC [diff]


See also:
Documentation: PageAdminActionInfo.
Are you a site administrator? Give it a PageAdminTest try
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


Last available version is 0.2.1.

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


// set default values as constants
define('DEFAULT_RECORDS_LIMIT', '20'); # number of records per page
define('DEFAULT_REC_LIMIT_STEP', '10'); # step for selectable records limit
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
define('DEFAULT_TRUNCATOR', '~'); # symbol replacing truncated text

// restrict access to admins
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 {

        // process URL variables
   
        // number of 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 string
        $q = (!$_POST['q'])? $_GET['q'] : $_POST['q'];
                if (!$_POST['q'] && !$_GET['q']) $q = DEFAULT_SEARCH;

        // restrict MySQL query by search string
        $where = 'WHERE tag LIKE "%'.$q.'%"and latest = "Y"';

        // get total number of pages
        $pages = $this->LoadSingle('SELECT count(*) as n FROM '.$this->config['table_prefix'].'pages '.$where);
        $numpages = $pages['n'];

        // print page header
        echo $this->Format('===== Page Administration ===== --- --- ');    
   
        // build pager form
        $form = $this->FormOpen('','','post'); 
        $form .= 'Search page by name: <input type ="text" name="q" title="Enter a search string" size="20" maxlength="50" value="'.$q.'"/><input type="submit" value="Submit" accesskey="a" /><br /><br />';
        $form .= 'Show <select name="l">';

        // build drop-down menu
        for ($rec=DEFAULT_REC_LIMIT_STEP; $rec < ($numpages+DEFAULT_REC_LIMIT_STEP); $rec+=DEFAULT_REC_LIMIT_STEP) {
            $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.'" title="Show records from '.($s-$l+1).' to '.$s.'">'.($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.'" title="Show records from '.($s+$l+1).' to '.($s+2*$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 list
        $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 with data
            foreach($pagedata as $page) {

                // truncate long page names
                $pagename = (strlen($page['tag']) > DEFAULT_TAG_LENGTH)? substr($page['tag'], 0, DEFAULT_TAG_LENGTH).DEFAULT_TRUNCATOR : $page['tag'];
   
                // build handler 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="Open '.$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>';
   
                // get page owner
                if ($page['owner']) {          
                    // is the owner a registered user?
                    if ($this->LoadUser($page['owner'])) {
                        // does user's homepage exist?
                        if ($this->ExistsPage($page['owner'])) {
                            $owner = $this->Link($page['owner'],'','','','','Go to '.$page['owner'].'\'s homepage');
                        } else {
                            $owner = $page['owner'];
                        }
                    } else {
                        $owner = $page['owner'];
                    }  
                } else {
                    // page has empty owner field: print claim link
                    $owner = $this->Link($page['tag'], 'claim','(Nobody)','','','Take ownership of '.$page['tag']);
                }  
                // get 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 {
                        // truncate long host names
                        $user = (strlen($page['user']) > DEFAULT_URL_LENGTH)? substr($page['user'], 0,
DEFAULT_URL_LENGTH).DEFAULT_TRUNCATOR : $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"' : '').' title="Select '.$page['tag'].'"/></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 {
            // no records matching the search string: 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: show plain page index
    echo $this->Action('pageindex');
}
?>



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