allow to change password without run rights for preferences via a new password app (part of preferences app, but separate to install)

This commit is contained in:
Ralf Becker 2010-07-27 14:29:20 +00:00
parent b9c0bea095
commit a5ba32b8b6
5 changed files with 168 additions and 114 deletions

View File

@ -850,11 +850,19 @@ abstract class egw_framework
{ {
$this->_add_topmenu_item($apps['home']); $this->_add_topmenu_item($apps['home']);
} }
if($GLOBALS['egw_info']['user']['apps']['preferences']) if($GLOBALS['egw_info']['user']['apps']['preferences'])
{ {
$this->_add_topmenu_item($apps['preferences']); $this->_add_topmenu_item($apps['preferences']);
} }
elseif(($pw_app = $GLOBALS['egw_info']['user']['apps']['password']) &&
!$GLOBALS['egw']->acl->check('nopasswordchange', 1))
{
$this->_add_topmenu_item(array(
'title' => $pw_app['title'],
'url' => egw::link($pw_app['index']),
'icon' => common::image($pw_app['icon'],$pw_app['icon_app']),
));
}
if($GLOBALS['egw_info']['user']['apps']['manual'] && isset($apps['manual'])) if($GLOBALS['egw_info']['user']['apps']['manual'] && isset($apps['manual']))
{ {

View File

@ -567,7 +567,7 @@ class idots_framework extends egw_framework
$_item['url'] = $app_data['url']; $_item['url'] = $app_data['url'];
$_item['urlextra'] = $app_data['target']; $_item['urlextra'] = $app_data['target'];
$_item['label'] = ($alt_label?$alt_label:$app_data['title']); $_item['label'] = ($alt_label?$alt_label:$app_data['title']);
$this->tplsav2->menuitems[$app_data['name']] = $_item; $this->tplsav2->menuitems[] = $_item;
$this->tplsav2->icon_or_star = $GLOBALS['egw_info']['server']['webserver_url'] . '/phpgwapi/templates/'.$this->template.'/images'.'/orange-ball.png'; $this->tplsav2->icon_or_star = $GLOBALS['egw_info']['server']['webserver_url'] . '/phpgwapi/templates/'.$this->template.'/images'.'/orange-ball.png';
} }

View File

@ -1,16 +1,13 @@
<?php <?php
/**************************************************************************\ /**
* eGroupWare - preferences * * EGroupware preferences
* http://www.egroupware.org * *
* Written by Joseph Engo <jengo@phpgroupware.org> * * @package preferences
* -------------------------------------------- * * @link http://www.egroupware.org
* This program is free software; you can redistribute it and/or modify it * * @author Joseph Engo <jengo@phpgroupware.org>
* under the terms of the GNU General Public License as published by the * * @license http://opensource.org/licenses/gpl-license.php GPL - GNU General Public License
* Free Software Foundation; either version 2 of the License, or (at your * * @version $Id$
* option) any later version. * */
\**************************************************************************/
/* $Id$ */
class uipassword class uipassword
{ {
@ -32,8 +29,14 @@
if($GLOBALS['egw']->acl->check('nopasswordchange', 1) || $_POST['cancel']) if($GLOBALS['egw']->acl->check('nopasswordchange', 1) || $_POST['cancel'])
{ {
$GLOBALS['egw']->redirect_link('/preferences/index.php'); if ($GLOBALS['egw_info']['user']['apps']['preferences'])
$GLOBALS['egw']->common->egw_exit(); {
egw::redirect_link('/preferences/index.php');
}
else
{
egw::redirect_link('/index.php'); // redirect to start page
}
} }
$GLOBALS['egw']->template->set_file(array( $GLOBALS['egw']->template->set_file(array(
@ -44,7 +47,10 @@
$GLOBALS['egw']->template->set_var('lang_enter_old_password',lang('Enter your old password')); $GLOBALS['egw']->template->set_var('lang_enter_old_password',lang('Enter your old password'));
$GLOBALS['egw']->template->set_var('lang_change',lang('Change')); $GLOBALS['egw']->template->set_var('lang_change',lang('Change'));
$GLOBALS['egw']->template->set_var('lang_cancel',lang('Cancel')); $GLOBALS['egw']->template->set_var('lang_cancel',lang('Cancel'));
$GLOBALS['egw']->template->set_var('form_action',$GLOBALS['egw']->link('/index.php','menuaction=preferences.uipassword.change')); $GLOBALS['egw']->template->set_var('form_action',
$GLOBALS['egw_info']['user']['apps']['preferences'] ?
egw::link('/index.php','menuaction=preferences.uipassword.change') :
egw::link('/preferences/password.php'));
if($GLOBALS['egw_info']['server']['auth_type'] != 'ldap') if($GLOBALS['egw_info']['server']['auth_type'] != 'ldap')
{ {
@ -77,27 +83,28 @@
if(is_array($errors)) if(is_array($errors))
{ {
$GLOBALS['egw']->common->egw_header(); common::egw_header();
echo parse_navbar(); echo parse_navbar();
$GLOBALS['egw']->template->set_var('messages',$GLOBALS['egw']->common->error_list($errors)); $GLOBALS['egw']->template->set_var('messages',common::error_list($errors));
$GLOBALS['egw']->template->pfp('out','form'); $GLOBALS['egw']->template->pfp('out','form');
$GLOBALS['egw']->common->egw_exit(True); common::egw_exit(True);
} }
$passwd_changed = $this->bo->changepass($o_passwd, $n_passwd); $passwd_changed = $this->bo->changepass($o_passwd, $n_passwd);
if(!$passwd_changed) if(!$passwd_changed)
{ {
$errors[] = lang('Failed to change password. Please contact your administrator.'); $errors[] = lang('Failed to change password. Please contact your administrator.');
$GLOBALS['egw']->common->egw_header(); common::egw_header();
echo parse_navbar(); echo parse_navbar();
$GLOBALS['egw']->template->set_var('messages',$GLOBALS['egw']->common->error_list($errors)); $GLOBALS['egw']->template->set_var('messages',common::error_list($errors));
$GLOBALS['egw']->template->pfp('out','form'); $GLOBALS['egw']->template->pfp('out','form');
$GLOBALS['egw']->common->egw_exit(True); common::egw_exit(True);
} }
else else
{ {
$GLOBALS['egw']->session->appsession('password','phpgwapi',base64_encode($n_passwd)); $GLOBALS['egw']->session->appsession('password','phpgwapi',base64_encode($n_passwd));
$GLOBALS['egw_info']['user']['passwd'] = $n_passwd; $GLOBALS['egw_info']['user']['passwd'] = $n_passwd;
egw::invalidate_session_cache();
$GLOBALS['hook_values']['account_id'] = $GLOBALS['egw_info']['user']['account_id']; $GLOBALS['hook_values']['account_id'] = $GLOBALS['egw_info']['user']['account_id'];
$GLOBALS['hook_values']['old_passwd'] = $o_passwd; $GLOBALS['hook_values']['old_passwd'] = $o_passwd;
$GLOBALS['hook_values']['new_passwd'] = $n_passwd; $GLOBALS['hook_values']['new_passwd'] = $n_passwd;
@ -106,19 +113,19 @@
$GLOBALS['egw']->hooks->process($GLOBALS['hook_values']+array( $GLOBALS['egw']->hooks->process($GLOBALS['hook_values']+array(
'location' => 'changepassword', 'location' => 'changepassword',
),False,True); ),False,True);
$GLOBALS['egw']->redirect_link('/preferences/index.php','cd=18'); if ($GLOBALS['egw_info']['user']['apps']['preferences'])
}
}
else
{ {
egw::redirect_link('/preferences/index.php','cd=18');
}
$_GET['message'] = lang('Password changed');
}
}
$GLOBALS['egw_info']['flags']['app_header'] = lang('Change your password'); $GLOBALS['egw_info']['flags']['app_header'] = lang('Change your password');
$GLOBALS['egw']->common->egw_header(); common::egw_header();
echo parse_navbar(); echo parse_navbar();
$GLOBALS['egw']->template->set_var('messages',$_GET['message']); $GLOBALS['egw']->template->set_var('messages','<span class="redItalic">'.htmlspecialchars($_GET['message']).'</span>');
$GLOBALS['egw']->template->pfp('out','form'); $GLOBALS['egw']->template->pfp('out','form');
$GLOBALS['egw']->common->egw_footer(); common::egw_footer();
} }
} }
}
?>

24
preferences/password.php Normal file
View File

@ -0,0 +1,24 @@
<?php
/**
* EGroupware preferences password change without preferences rights
*
* @package preferences
* @link http://www.egroupware.org
* @author Ralf Becker <rb@stylite.de>
* @license http://opensource.org/licenses/gpl-license.php GPL - GNU General Public License
* @version $Id$
*/
$GLOBALS['egw_info'] = array(
'flags' => array(
'noheader' => True,
'nonavbar' => True,
'currentapp' => 'password',
)
);
include('../header.inc.php');
$GLOBALS['egw']->template = new Template(common::get_tpl_dir('preferences'));
ExecMethod('preferences.uipassword.change');
common::egw_footer();

View File

@ -29,3 +29,18 @@ $setup_info['preferences']['depends'][] = array(
'appname' => 'phpgwapi', 'appname' => 'phpgwapi',
'versions' => Array('1.2','1.3','1.4','1.5','1.6','1.7') 'versions' => Array('1.2','1.3','1.4','1.5','1.6','1.7')
); );
/**
* Password change without preferences rights
*/
$setup_info['password']['name'] = 'password';
$setup_info['password']['title'] = 'Password';
$setup_info['password']['version'] = $setup_info['preferences']['version'];
$setup_info['password']['app_order'] = 1;
$setup_info['password']['tables'] = array();
$setup_info['password']['enable'] = 2;
$setup_info['password']['index'] = '/preferences/password.php';
$setup_info['password']['author'] = $setup_info['preferences']['author'];
$setup_info['password']['maintainer']= $setup_info['preferences']['maintainer'];
$setup_info['password']['license'] = $setup_info['preferences']['license'];
$setup_info['password']['depends'] = $setup_info['preferences']['depends'];