接着之前的两篇:

做这个功能是因为TeamToy默认没有密码重置的功能,万一成员忘记了自己的密码,既不能通过邮箱重置,管理员也无法在前台重置,只能做个新密码加md5之后直接进入数据库操作。
 
通过邮箱重置的功能觉着有点复杂,反正是内部系统,就偷懒让管理员可以直接修改吧。
 
1、首先,密码更新的函数叫 password_update ,在 \code\mod\people.class.php 里面。
 
2、更改密码的入口位置,计划设定在用户信息编辑的页面,即
\code\view\layout\default\main\people\modify.tpl.html
不过应该先添加一个判定,看当前登录进行操作的用户是不是管理员。这里设置成id为1的用户。
从 password_update 功能里面可以看到,当前登录用户的id可以通过 intval(uid()) 这个方式获取到。
先找个现成的floatbox尝试一下看看:
     <?php if (intval(uid()) == 1) { echo '<a href="javascript:show_float_box(\'?m=people&a=remove_confirm&uid=' . $user['id'] . '\');void(0)">管理员修改成员密码请点击这里</a>'; } ?> 
尝试调用成功,接下来就可以搞货真价实的了。
 
3、在\code\view\layout\ajax\people\remove_confirm.tpl.html的相同路径下添加一个文件:admin_passchange.tpl.html,内容从remove_confirm先复制一份;
在people.class.php里面,把remove_confirm的function复制一份,新的函数命名为admin_passchange。
admin_passchange这个函数只是为了传值,要进行保存操作,我们还需要另一个function,姑且叫他admin_passupdate。

modify.tpl.html里面刚才添加的一行,修改成
     <?php if (intval(uid()) == 1) { echo '<a href="javascript:show_float_box(\'?m=people&a=admin_passchange&uid=' . $user['id'] . '\');void(0)">管理员修改成员密码请点击这里</a>'; } ?> 

整个form部分代码如下:
 
<form action="?m=people&a=admin_passupdate&uid=<?=$user['id']?>" method="post" id="form_password" onsubmit="$('pass_change'). false;">
 <p class="formline"><label class="red">*新密码</label><input type="password" class="text" name="password_new" /></p>
 <p class="formaction">
 <input type="button" class="button" value="保存修改" name="pass_change" onclick="send_form_pop('form_password')"/>
 <input type="button" class="button" value="取消" onclick="close_float_box()"/>
 </p> 
</form> 
 

注:这里如果用submit取代button会报错,没搞明白为啥

然后是admin_passchange的函数内容,就直接帖代码了:

  1. public function admin_passchange() 
  2.      $uid = intval(v('uid')); 
  3.      if$uid < 1 ) return ajax_box('错误的用户ID'); 
  4.      if( ulevel() < 5 ) return ajax_box('只有管理员才能更改成员密码'); 
  5.  
  6.      if( !$user = get_line( "SELECT * FROM `user` WHERE `id` = '" . intval$uid ) . "' LIMIT 1" ) ) 
  7.           return ajax_box('没有该用户的数据,可能已经被删除'); 
  8.  
  9.      $data['uid'] = $uid
  10.      $data['user'] = $user
  11.      return render( $data , 'ajax' );     
  12.  
  13.  
  14. public function admin_passupdate() 
  15.      $uid = intval(v('uid')); 
  16.      
  17.      $password_new = z(t(v('password_new'))); 
  18.      if$password_new == '' ) return ajax_box('新密码不能不为空' , '系统消息' , 3); 
  19.  
  20.      $sql = "UPDATE `user` SET `password` = '" . md5( $password_new ) . " ' WHERE `id` = '" . $uid . "' LIMIT 1"
  21.      
  22.      run_sql( $sql ); 
  23.  
  24.      if( (mysql_errno() == 0) && (mysql_affected_rows() == 1) ) 
  25.      { 
  26.           return ajax_box('成功更新,请通知成员新的密码登录''系统消息' , 1 , '?m=people' ); 
  27.      } 
  28.      else 
  29.           return ajax_box('操作失败,请稍后再试' , NULL , 3 ); 
  30.