Вход Регистрация
Файл: textpattern-4.5.7/textpattern/include/txp_admin.php
Строк: 482
<?php

/*
    This is Textpattern

    Copyright 2005 by Dean Allen
    www.textpattern.com
    All rights reserved

    Use of this software indicates acceptance of the Textpattern license agreement

$HeadURL: https://textpattern.googlecode.com/svn/releases/4.5.7/source/textpattern/include/txp_admin.php $
$LastChangedRevision: 4092 $

*/

    
if (!defined('txpinterface'))
    {
        die(
'txpinterface is undefined.');
    }

    
$levels get_groups();

    if (
$event == 'admin')
    {
        
require_privs('admin');

        include_once 
txpath.'/lib/txplib_admin.php';

        
$available_steps = array(
            
'admin_multi_edit'    => true,
            
'admin_change_pageby' => true,
            
'author_list'         => false,
            
'author_edit'         => false,
            
'author_save'         => true,
            
'author_save_new'     => true,
            
'change_email'        => true,
            
'change_email_form'   => false,
            
'change_pass'         => true,
            
'new_pass_form'       => false,
        );

        if (
$step && bouncer($step$available_steps)) {
            
$step();
        } else {
            
author_list();
        }
    }

// -------------------------------------------------------------

    
function change_email()
    {
        global 
$txp_user;

        
$new_email gps('new_email');

        if (!
is_valid_email($new_email))
        {
            
author_list(array(gTxt('email_required'), E_ERROR));
            return;
        }

        
$rs safe_update('txp_users'"email = '".doSlash($new_email)."'""name = '".doSlash($txp_user)."'");
        
author_list($rs gTxt('email_changed', array('{email}' => $new_email)) : gTxt(array('author_save_failed'E_ERROR)));
    }

// -------------------------------------------------------------

    
function author_save()
    {
        
require_privs('admin.edit');

        
extract(doSlash(psa(array('privs''user_id''RealName''email'))));
        
$privs   assert_int($privs);
        
$user_id assert_int($user_id);

        if (!
is_valid_email($email))
        {
            
author_list(array(gTxt('email_required'), E_ERROR));
            return;
        }

        
$rs safe_update('txp_users'"
            privs    = 
$privs,
            RealName = '
$RealName',
            email    = '
$email'",
            
"user_id = $user_id"
        
);
        
author_list($rs gTxt('author_updated', array('{name}' => $RealName)) : gTxt(array('author_save_failed'E_ERROR)));
    }

// -------------------------------------------------------------

    
function change_pass()
    {
        global 
$txp_user;

        
extract(psa(array('new_pass''mail_password')));

        if (empty(
$new_pass))
        {
            
author_list(array(gTxt('password_required'), E_ERROR));
            return;
        }

        
$hash doSlash(txp_hash_password($new_pass));
        
$rs safe_update('txp_users'"pass = '$hash'""name = '".doSlash($txp_user)."'");

        if (
$rs)
        {
            
$message gTxt('password_changed');

            if (
$mail_password)
            {
                
$email fetch('email''txp_users''name'$txp_user);

                
send_new_password($new_pass$email$txp_user);

                
$message .= sp.gTxt('and_mailed_to').sp.$email;
            }

            else
            {
                echo 
comment(mysql_error());
            }

            
$message .= '.';

            
author_list($message);
        }
    }

// -------------------------------------------------------------

    
function author_save_new()
    {
        
require_privs('admin.edit');

        
extract(doSlash(psa(array('privs''name''email''RealName'))));

        
$privs  assert_int($privs);
        
$length function_exists('mb_strlen') ? mb_strlen($name'8bit') : strlen($name);

        if (
$name and $length <= 64 and is_valid_email($email))
        {
            
$exists safe_field('name''txp_users'"name = '" .$name"'");

            if (
$exists)
            {
                
author_list(array(gTxt('author_already_exists', array('{name}' => $name)), E_ERROR));
                return;
            }

            
$password generate_password(PASSWORD_LENGTH);
            
$hash    doSlash(txp_hash_password($password));
            
$nonce    doSlash(md5(uniqid(mt_rand(), TRUE)));

            
$rs safe_insert('txp_users'"
                privs    = 
$privs,
                name     = '
$name',
                email    = '
$email',
                RealName = '
$RealName',
                nonce    = '
$nonce',
                pass     = '
$hash'
            "
);

            if (
$rs)
            {
                
send_password($RealName$name$email$password);

                
author_list(
                    
gTxt('password_sent_to').sp.$email
                
);

                return;
            }
        }

        
author_list(array(gTxt('error_adding_new_author'), E_ERROR));
    }

// -------------------------------------------------------------

    
function privs($priv '')
    {
        global 
$levels;
        return 
selectInput('privs'$levels$priv'''''privileges');
    }

// -------------------------------------------------------------

    
function get_priv_level($priv)
    {
        global 
$levels;
        return 
$levels[$priv];
    }

// -------------------------------------------------------------

    
function new_pass_form()
    {
        global 
$step$txp_user;

        
pagetop(gTxt('tab_site_admin'), '');

        echo 
form(
            
'<div class="txp-edit">'.
            
hed(gTxt('change_password'), 2).n.
            
inputLabel('new_pass'fInput('password''new_pass'''''''''INPUT_REGULAR'''new_pass'), 'new_password').n.
            
graf(checkbox('mail_password''1'true'''mail_password') .n'<label for="mail_password">'.gTxt('mail_it').'</label>'' class="edit-mail-password"').n.
            
graf(fInput('submit''change_pass'gTxt('submit'), 'publish')).
            
eInput('admin').
            
sInput('change_pass').
            
'</div>'
        
'''''post''''''change_password');
    }

// -------------------------------------------------------------

    
function change_email_form()
    {
        global 
$step$txp_user;

        
pagetop(gTxt('tab_site_admin'), '');

        
$email fetch('email''txp_users''name'$txp_user);

        echo 
form(
            
'<div class="txp-edit">'.
            
hed(gTxt('change_email_address'), 2).n.
            
inputLabel('new_email'fInput('text''new_email'$email''''''INPUT_REGULAR'''new_email'), 'new_email').n.
            
graf(fInput('submit''change_email'gTxt('submit'), 'publish')).
            
eInput('admin').
            
sInput('change_email').
            
'</div>'
        
'''''post''','''change_email');
    }

// -------------------------------------------------------------

    
function author_list($message '')
    {
        global 
$txp_user$author_list_pageby;

        
pagetop(gTxt('tab_site_admin'), $message);

        if (
is_disabled('mail'))
        {
            echo 
tag(gTxt('warn_mail_unavailable'), 'p',' class="alert-block warning" ');
        }

        echo 
'<h1 class="txp-heading">'.gTxt('tab_site_admin').'</h1>';
        echo 
'<div id="users_control" class="txp-control-panel">';

        
// Change password button
        
echo '<p class="txp-buttons">';
        echo 
sLink('admin''new_pass_form'gTxt('change_password'));

        
// Change email address button
        
if (!has_privs('admin.edit'))
        {
            echo 
n.sLink('admin''change_email_form'gTxt('change_email_address'));
        }

        
// User list
        
if (has_privs('admin.list'))
        {
            
extract(gpsa(array('page''sort''dir''crit''search_method')));
            if (
$sort === ''$sort get_pref('admin_sort_column''name');
            if (
$dir === ''$dir get_pref('admin_sort_dir''asc');
            
$dir = ($dir == 'desc') ? 'desc' 'asc';

            if (!
in_array($sort, array('name''RealName''email''privs''last_login'))) $sort 'name';

            
$sort_sql $sort.' '.$dir;

            
set_pref('admin_sort_column'$sort'admin'2''0PREF_PRIVATE);
            
set_pref('admin_sort_dir'$dir'admin'2''0PREF_PRIVATE);

            
$switch_dir = ($dir == 'desc') ? 'asc' 'desc';

            
$criteria 1;

            if (
$search_method and $crit != '')
            {
                
$crit_escaped doSlash(str_replace(array('\','%','_','''), array('\\','\%','\_''\''), $crit));

                
$critsql = array(
                    
'id'        => "user_id in ('" .join("','"do_list($crit_escaped)). "')",
                    
'login'     => "name like '%$crit_escaped%'",
                    
'real_name' => "RealName like '%$crit_escaped%'",
                    
'email'     => "email like '%$crit_escaped%'",
                    
'privs'     => "privs in ('" .join("','"do_list($crit_escaped)). "')",
                );

                if (
array_key_exists($search_method$critsql))
                {
                    
$criteria $critsql[$search_method];
                }

                else
                {
                    
$search_method '';
                    
$crit '';
                }
            }

            else
            {
                
$search_method '';
                
$crit '';
            }

            
$criteria .= callback_event('admin_criteria''author_list'0$criteria);

            
$total getCount('txp_users'$criteria);

            
// New author button
            
if (has_privs('admin.edit'))
            {
                echo 
n.sLink('admin''author_edit'gTxt('add_new_author'));
            }

            echo 
'</p>'// end txp-buttons

            
if ($total 1)
            {
                if (
$criteria != 1)
                {
                    echo 
n.author_search_form($crit$search_method).
                        
n.graf(gTxt('no_results_found'), ' class="indicator"').'</div>';
                }

                return;
            }

            
$limit max($author_list_pageby15);

            list(
$page$offset$numPages) = pager($total$limit$page);

            
$use_multi_edit = ( has_privs('admin.edit') && (safe_count('txp_users''1=1') > 1) );

            echo 
author_search_form($crit$search_method).'</div>';

            
$rs safe_rows_start('*, unix_timestamp(last_access) as last_login''txp_users'"$criteria order by $sort_sql limit $offset$limit");

            if (
$rs)
            {
                echo 
n.'<div id="users_container" class="txp-container">';
                echo 
'<form action="index.php" id="users_form" class="multi_edit_form" method="post" name="longform">'.

                
n.'<div class="txp-listtables">'.
                
n.startTable('''''txp-list').
                
n.'<thead>'.
                
n.tr(
                    
n. (($use_multi_edit)
                        ? 
hCell(fInput('checkbox''select_all'0'''''''''''select_all'), ''' title="'.gTxt('toggle_all_selected').'" class="multi-edit"')
                        : 
hCell(''''' class="multi-edit"')
                    ).
                    
n.column_head('login_name''name''admin'true$switch_dir'''', (('name' == $sort) ? "$dir " '').'name login-name').
                    
n.column_head('real_name''RealName''admin'true$switch_dir'''', (('RealName' == $sort) ? "$dir " '').'name real-name').
                    
n.column_head('email''email''admin'true$switch_dir'''', (('email' == $sort) ? "$dir " '').'email').
                    
n.column_head('privileges''privs''admin'true$switch_dir'''', (('privs' == $sort) ? "$dir " '').'privs').
                    
n.column_head('last_login''last_login''admin'true$switch_dir'''', (('last_login' == $sort) ? "$dir " '').'date last-login modified')
                ).
                
n.'</thead>';

                echo 
'<tbody>';

                while (
$a nextRow($rs))
                {
                    
extract(doSpecial($a));

                    echo 
tr(
                        
td(((has_privs('admin.edit') and $txp_user != $a['name']) ? fInput('checkbox''selected[]'$a['name'], 'checkbox') : ''), '''multi-edit').
                        
td(((has_privs('admin.edit')) ? eLink('admin''author_edit''user_id'$user_id$name) : $name), '''name login-name').
                        
td($RealName'''name real-name').
                        
td('<a href="mailto:'.$email.'">'.$email.'</a>''''email').
                        
td(get_priv_level($privs), '''privs').
                        
td(($last_login safe_strftime('%b&#160;%Y'$last_login) : ''), '''date last-login modified')
                    );
                }

                echo 
'</tbody>',
                    
nendTable(),
                    
n'</div>',
                    
n, (($use_multi_edit) ? author_multiedit_form($page$sort$dir$crit$search_method) : ''),
                    
ntInput(),
                    
n'</form>',
                    
n'<div id="users_navigation" class="txp-navigation">',
                    
nnav_form('admin'$page$numPages$sort$dir$crit$search_method),
                    
npageby_form('admin'$author_list_pageby),
                    
n'</div>',
                    
n'</div>';
            }
        }

        else
        {
            echo 
'</div>';
        }
    }

// -------------------------------------------------------------

    
function author_search_form($crit$method)
    {
        
$methods =    array(
            
'id'        => gTxt('ID'),
            
'login'     => gTxt('login_name'),
            
'real_name' => gTxt('real_name'),
            
'email'     => gTxt('email'),
            
'privs'     => gTxt('privileges'),
        );

        return 
search_form('admin''author_list'$crit$methods$method'login');
    }

// -------------------------------------------------------------

    
function author_edit()
    {
        global 
$step$txp_user;

        
require_privs('admin.edit');

        
pagetop(gTxt('tab_site_admin'), '');

        
$vars = array('user_id''name''RealName''email''privs');
        
$rs = array();

        
extract(gpsa($vars));

        
$is_edit = ($user_id && $step == 'author_edit');

        if (
$is_edit)
        {
            
$user_id assert_int($user_id);
            
$rs safe_row('*''txp_users'"user_id = $user_id");
            
extract($rs);
        }

        
$caption gTxt(($is_edit) ? 'edit_author' 'add_new_author');

        echo 
form(
            
'<div class="txp-edit">'.n.
            
hed($caption2).n.
            
inputLabel('login_name', ($is_edit strong($name) : fInput('text''name'$name''''''INPUT_REGULAR'''login_name')), ($is_edit '' 'login_name'), ($is_edit '' 'add_new_author')).n.
            
inputLabel('real_name'fInput('text''RealName'$RealName''''''INPUT_REGULAR'''real_name'), 'real_name').n.
            
inputLabel('login_email'fInput('text''email'$email''''''INPUT_REGULAR'''login_email'), 'email').n.
            
inputLabel('privileges', (($txp_user != $name) ? privs($privs) : hInput('privs'$privs).strong(get_priv_level($privs))), ($is_edit '' 'privileges'), 'about_privileges').n.
            
pluggable_ui('author_ui''extend_detail_form'''$rs).n.
            
graf(fInput('submit'''gTxt('save'), 'publish')).
            
eInput('admin').
            (
$user_id hInput('user_id'$user_id).sInput('author_save') : sInput('author_save_new')).
            
'</div>'
        
'''''post''edit-form''''user_edit');
    }

// -------------------------------------------------------------

    
function admin_change_pageby()
    {
        
event_change_pageby('author');
        
author_list();
    }

// -------------------------------------------------------------

    
function author_multiedit_form($page$sort$dir$crit$search_method)
    {
        
$privileges privs();
        
$rs safe_column('name''txp_users''1=1');
        
$assign_assets $rs '<label for="assign_assets">'.gTxt('assign_assets_to').'</label>'.n.selectInput('assign_assets'$rs''true'''assign_assets') : '';

        
$methods = array(
            
'changeprivilege' => array('label' => gTxt('changeprivilege'), 'html' => $privileges),
            
'resetpassword'   => gTxt('resetpassword'),
            
'delete'          => array('label' => gTxt('delete'), 'html' => $assign_assets),
        );

        if (
safe_count('txp_users''1=1') <= 1) unset($methods['delete']); // Sorry guy, you're last.

        
return multi_edit($methods'admin''admin_multi_edit'$page$sort$dir$crit$search_method);
    }

// -------------------------------------------------------------

    
function admin_multi_edit()
    {
        global 
$txp_user;

        
require_privs('admin.edit');

        
$selected ps('selected');
        
$method   ps('edit_method');
        
$changed  = array();

        if (!
$selected or !is_array($selected))
        {
            return 
author_list();
        }

        
$names safe_column('name''txp_users'"name IN ('".join("','"doSlash($selected))."') AND name != '".doSlash($txp_user)."'");

        if (!
$names) return author_list();

        switch (
$method)
        {
            case 
'delete':

                
$assign_assets ps('assign_assets');
                if (
$assign_assets === '')
                {
                    
$msg = array('must_reassign_assets'E_ERROR);
                }
                elseif (
in_array($assign_assets$names))
                {
                    
$msg = array('cannot_assign_assets_to_deletee'E_ERROR);
                }

                elseif (
safe_delete('txp_users'"name IN ('".join("','"doSlash($names))."')"))
                {
                    
$changed $names;
                    
$assign_assets doSlash($assign_assets);
                    
$names join("','"doSlash($names));

                    
// delete private prefs
                    
safe_delete('txp_prefs'"user_name IN ('$names')");

                    
// assign dangling assets to their new owner
                    
$reassign = array(
                        
'textpattern' => 'AuthorID',
                        
'txp_file'    => 'author',
                        
'txp_image'   => 'author',
                        
'txp_link'    => 'author',
                    );
                    foreach (
$reassign as $table => $col)
                    {
                        
safe_update($table"$col='$assign_assets'""$col IN ('$names')");
                    }

                    
callback_event('authors_deleted'''0$changed);

                    
$msg 'author_deleted';
                }

                break;

            case 
'changeprivilege':

                global 
$levels;

                
$privilege ps('privs');

                if (!isset(
$levels[$privilege])) return author_list();

                if (
safe_update('txp_users''privs = '.intval($privilege), "name IN ('".join("','"doSlash($names))."')"))
                {
                    
$changed $names;
                    
$msg 'author_updated';
                }

                break;

            case 
'resetpassword':

                
$failed  = array();

                foreach (
$names as $name)
                {
                    
$passwd generate_password(PASSWORD_LENGTH);
                    
$hash     doSlash(txp_hash_password($passwd));

                    if (
safe_update('txp_users'"pass = '$hash'""name = '".doSlash($name)."'"))
                    {
                        
$email safe_field('email''txp_users'"name = '".doSlash($name)."'");

                        if (
send_new_password($passwd$email$name))
                        {
                            
$changed[] = $name;
                            
$msg 'author_updated';
                        }
                        else
                        {
                            return 
author_list(array(gTxt('could_not_mail').' '.txpspecialchars($name), E_ERROR));
                        }
                    }
                }

                break;
        }

        if (
$changed)
        {
            return 
author_list(gTxt($msg, array('{name}' => txpspecialchars(join(', '$changed)))));
        }

        
author_list($msg);
    }
// -------------------------------------------------------------
//    @deprecated
    
function admin($message '')
    {
        
author_list($message);
    }

?>
Онлайн: 2
Реклама