2003-05-25 10:57:32 +00:00
< ? php
/*
$Id $
2009-10-27 18:47:12 +00:00
This code is part of LDAP Account Manager ( http :// www . ldap - account - manager . org / )
2014-01-15 20:48:52 +00:00
Copyright ( C ) 2003 - 2014 Roland Gruber
2003-05-25 10:57:32 +00:00
This program is free software ; you can redistribute it and / or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation ; either version 2 of the License , or
( at your option ) any later version .
This program is distributed in the hope that it will be useful ,
but WITHOUT ANY WARRANTY ; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE . See the
GNU General Public License for more details .
You should have received a copy of the GNU General Public License
along with this program ; if not , write to the Free Software
Foundation , Inc . , 59 Temple Place , Suite 330 , Boston , MA 02111 - 1307 USA
2004-06-10 22:13:39 +00:00
*/
2003-05-25 10:57:32 +00:00
2004-06-10 22:13:39 +00:00
/**
* This is the main window of the profile editor .
*
2004-10-09 11:04:20 +00:00
* @ package profiles
2004-06-10 22:13:39 +00:00
* @ author Roland Gruber
2003-05-25 10:57:32 +00:00
*/
2006-03-26 17:51:25 +00:00
/** security functions */
include_once ( " ../../lib/security.inc " );
2004-06-10 22:13:39 +00:00
/** helper functions for profiles */
2003-05-25 10:57:32 +00:00
include_once ( " ../../lib/profiles.inc " );
2004-06-10 22:13:39 +00:00
/** access to LDAP server */
2003-05-25 10:57:32 +00:00
include_once ( " ../../lib/ldap.inc " );
2004-06-10 22:13:39 +00:00
/** access to configuration options */
2003-08-03 11:05:40 +00:00
include_once ( " ../../lib/config.inc " );
2003-05-25 10:57:32 +00:00
// start session
2006-03-26 17:51:25 +00:00
startSecureSession ();
2003-05-25 10:57:32 +00:00
2007-12-30 13:15:39 +00:00
// die if no write access
if ( ! checkIfWriteAccessIsAllowed ()) die ();
2012-07-22 10:37:01 +00:00
checkIfToolIsActive ( 'toolProfileEditor' );
2003-08-03 11:05:40 +00:00
setlanguage ();
2006-01-01 16:30:05 +00:00
$types = $_SESSION [ 'config' ] -> get_ActiveTypes ();
$profileClasses = array ();
2010-05-19 19:22:29 +00:00
$profileClassesTemp = array ();
2006-01-01 16:30:05 +00:00
for ( $i = 0 ; $i < sizeof ( $types ); $i ++ ) {
2014-01-15 20:48:52 +00:00
if ( isAccountTypeHidden ( $types [ $i ]) || ! checkIfWriteAccessIsAllowed ( $types [ $i ])) {
2013-01-01 20:46:28 +00:00
continue ;
}
2010-05-19 19:22:29 +00:00
$profileClassesTemp [ getTypeAlias ( $types [ $i ])] = array (
2006-01-01 16:30:05 +00:00
'scope' => $types [ $i ],
'title' => getTypeAlias ( $types [ $i ]),
'profiles' => " " );
}
2010-05-19 19:22:29 +00:00
$profileClassesKeys = array_keys ( $profileClassesTemp );
natcasesort ( $profileClassesKeys );
$profileClassesKeys = array_values ( $profileClassesKeys );
for ( $i = 0 ; $i < sizeof ( $profileClassesKeys ); $i ++ ) {
$profileClasses [] = $profileClassesTemp [ $profileClassesKeys [ $i ]];
}
2004-12-12 11:27:57 +00:00
2003-05-25 10:57:32 +00:00
// check if user is logged in, if not go to login
if ( ! $_SESSION [ 'ldap' ] || ! $_SESSION [ 'ldap' ] -> server ()) {
2003-08-28 12:41:47 +00:00
metaRefresh ( " ../login.php " );
2003-05-25 10:57:32 +00:00
exit ;
}
2008-12-16 16:52:20 +00:00
// check if new profile should be created
elseif ( isset ( $_POST [ 'createProfileButton' ])) {
2012-03-20 20:44:24 +00:00
metaRefresh ( " profilepage.php?type= " . htmlspecialchars ( $_POST [ 'createProfile' ]));
2005-11-06 16:35:39 +00:00
exit ;
}
2008-12-16 16:52:20 +00:00
// check if a profile should be edited
for ( $i = 0 ; $i < sizeof ( $profileClasses ); $i ++ ) {
if ( isset ( $_POST [ 'editProfile_' . $profileClasses [ $i ][ 'scope' ]]) || isset ( $_POST [ 'editProfile_' . $profileClasses [ $i ][ 'scope' ] . '_x' ])) {
2012-03-20 20:44:24 +00:00
metaRefresh ( " profilepage.php?type= " . htmlspecialchars ( $profileClasses [ $i ][ 'scope' ]) .
" &edit= " . htmlspecialchars ( $_POST [ 'profile_' . $profileClasses [ $i ][ 'scope' ]]));
2008-12-16 16:52:20 +00:00
exit ;
}
}
2011-04-25 18:00:47 +00:00
include '../main_header.php' ;
2013-01-19 13:18:52 +00:00
echo " <div class= \" user-bright smallPaddingContent \" > \n " ;
2012-10-28 14:37:54 +00:00
echo " <form name= \" profilemainForm \" action= \" profilemain.php \" method= \" post \" > \n " ;
2013-01-12 13:58:47 +00:00
2011-04-25 18:00:47 +00:00
$container = new htmlTable ();
$container -> addElement ( new htmlTitle ( _ ( " Profile editor " )), true );
if ( isset ( $_POST [ 'deleteProfile' ]) && ( $_POST [ 'deleteProfile' ] == 'true' )) {
2013-01-01 20:46:28 +00:00
if ( isAccountTypeHidden ( $_POST [ 'profileDeleteType' ])) {
logNewMessage ( LOG_ERR , 'User tried to delete hidden account type profile: ' . $_POST [ 'profileDeleteType' ]);
die ();
}
2011-04-25 18:00:47 +00:00
// delete profile
if ( delAccountProfile ( $_POST [ 'profileDeleteName' ], $_POST [ 'profileDeleteType' ])) {
$message = new htmlStatusMessage ( 'INFO' , _ ( 'Deleted profile.' ), getTypeAlias ( $_POST [ 'profileDeleteType' ]) . ': ' . htmlspecialchars ( $_POST [ 'profileDeleteName' ]));
$message -> colspan = 10 ;
$container -> addElement ( $message , true );
}
else {
$message = new htmlStatusMessage ( 'ERROR' , _ ( 'Unable to delete profile!' ), getTypeAlias ( $_POST [ 'profileDeleteType' ]) . ': ' . htmlspecialchars ( $_POST [ 'profileDeleteName' ]));
$message -> colspan = 10 ;
$container -> addElement ( $message , true );
2003-05-25 10:57:32 +00:00
}
}
2012-10-28 14:37:54 +00:00
// check if profiles should be imported or exported
if ( isset ( $_POST [ 'importexport' ]) && ( $_POST [ 'importexport' ] === '1' )) {
$cfg = new LAMCfgMain ();
$impExpMessage = null ;
if ( isset ( $_POST [ 'importProfiles_' . $_POST [ 'scope' ]])) {
// check master password
if ( ! $cfg -> checkPassword ( $_POST [ 'passwd_' . $_POST [ 'scope' ]])) {
$impExpMessage = new htmlStatusMessage ( 'ERROR' , _ ( 'Master password is wrong!' ));
}
elseif ( copyAccountProfiles ( $_POST [ 'importProfiles_' . $_POST [ 'scope' ]], $_POST [ 'scope' ])) {
$impExpMessage = new htmlStatusMessage ( 'INFO' , _ ( 'Import successful' ));
}
} else if ( isset ( $_POST [ 'exportProfiles' ])) {
// check master password
if ( ! $cfg -> checkPassword ( $_POST [ 'passwd' ])) {
$impExpMessage = new htmlStatusMessage ( 'ERROR' , _ ( 'Master password is wrong!' ));
}
elseif ( copyAccountProfiles ( $_POST [ 'exportProfiles' ], $_POST [ 'scope' ], $_POST [ 'destServerProfiles' ])) {
$impExpMessage = new htmlStatusMessage ( 'INFO' , _ ( 'Export successful' ));
}
}
if ( $impExpMessage != null ) {
$impExpMessage -> colspan = 10 ;
$container -> addElement ( $impExpMessage , true );
}
}
2004-12-12 11:27:57 +00:00
// get list of profiles for each account type
for ( $i = 0 ; $i < sizeof ( $profileClasses ); $i ++ ) {
$profileList = getAccountProfiles ( $profileClasses [ $i ][ 'scope' ]);
2010-04-04 14:41:39 +00:00
natcasesort ( $profileList );
2010-10-16 17:52:08 +00:00
$profileClasses [ $i ][ 'profiles' ] = $profileList ;
2003-05-25 10:57:32 +00:00
}
2010-05-26 17:30:55 +00:00
if ( isset ( $_GET [ 'savedSuccessfully' ])) {
2010-10-16 17:52:08 +00:00
$message = new htmlStatusMessage ( " INFO " , _ ( " Profile was saved. " ), htmlspecialchars ( $_GET [ 'savedSuccessfully' ]));
$message -> colspan = 10 ;
$container -> addElement ( $message , true );
2010-05-26 17:30:55 +00:00
}
2008-12-16 16:52:20 +00:00
// new profile
2014-01-15 20:48:52 +00:00
if ( ! empty ( $profileClasses )) {
$container -> addElement ( new htmlSubTitle ( _ ( 'Create a new profile' )), true );
$sortedTypes = array ();
for ( $i = 0 ; $i < sizeof ( $profileClasses ); $i ++ ) {
$sortedTypes [ $profileClasses [ $i ][ 'title' ]] = $profileClasses [ $i ][ 'scope' ];
}
natcasesort ( $sortedTypes );
$newContainer = new htmlTable ();
$newProfileSelect = new htmlSelect ( 'createProfile' , $sortedTypes );
$newProfileSelect -> setHasDescriptiveElements ( true );
$newProfileSelect -> setWidth ( '15em' );
$newContainer -> addElement ( $newProfileSelect );
$newContainer -> addElement ( new htmlSpacer ( '10px' , null ));
$newContainer -> addElement ( new htmlButton ( 'createProfileButton' , _ ( 'Create' )), true );
$container -> addElement ( $newContainer , true );
2010-10-16 17:52:08 +00:00
}
$container -> addElement ( new htmlSpacer ( null , '10px' ), true );
2008-12-16 16:52:20 +00:00
// existing profiles
2010-10-16 17:52:08 +00:00
$container -> addElement ( new htmlSubTitle ( _ ( 'Manage existing profiles' )), true );
$existingContainer = new htmlTable ();
$existingContainer -> colspan = 5 ;
2012-10-28 14:37:54 +00:00
$configProfiles = getConfigProfiles ();
2008-12-16 16:52:20 +00:00
for ( $i = 0 ; $i < sizeof ( $profileClasses ); $i ++ ) {
2008-12-28 13:50:31 +00:00
if ( $i > 0 ) {
2010-10-16 17:52:08 +00:00
$existingContainer -> addElement ( new htmlSpacer ( null , '10px' ), true );
2008-12-28 13:50:31 +00:00
}
2012-10-28 14:37:54 +00:00
2010-10-28 18:11:16 +00:00
$existingContainer -> addElement ( new htmlImage ( '../../graphics/' . $profileClasses [ $i ][ 'scope' ] . '.png' ));
2010-10-16 17:52:08 +00:00
$existingContainer -> addElement ( new htmlSpacer ( '3px' , null ));
$existingContainer -> addElement ( new htmlOutputText ( $profileClasses [ $i ][ 'title' ]));
$existingContainer -> addElement ( new htmlSpacer ( '3px' , null ));
2010-10-18 19:46:21 +00:00
$select = new htmlSelect ( 'profile_' . $profileClasses [ $i ][ 'scope' ], $profileClasses [ $i ][ 'profiles' ]);
$select -> setWidth ( '15em' );
$existingContainer -> addElement ( $select );
2010-10-16 17:52:08 +00:00
$existingContainer -> addElement ( new htmlSpacer ( '3px' , null ));
$editButton = new htmlButton ( 'editProfile_' . $profileClasses [ $i ][ 'scope' ], 'edit.png' , true );
$editButton -> setTitle ( _ ( 'Edit' ));
$existingContainer -> addElement ( $editButton );
2011-04-25 18:00:47 +00:00
$deleteLink = new htmlLink ( null , '#' , '../../graphics/delete.png' );
$deleteLink -> setTitle ( _ ( 'Delete' ));
$deleteLink -> setOnClick ( " profileShowDeleteDialog(' " . _ ( 'Delete' ) . " ', ' " . _ ( 'Ok' ) . " ', ' " . _ ( 'Cancel' ) . " ', ' " . $profileClasses [ $i ][ 'scope' ] . " ', ' " . 'profile_' . $profileClasses [ $i ][ 'scope' ] . " '); " );
$existingContainer -> addElement ( $deleteLink );
2012-10-28 15:06:33 +00:00
if ( count ( $configProfiles ) > 1 ) {
$importLink = new htmlLink ( null , '#' , '../../graphics/import.png' );
$importLink -> setTitle ( _ ( 'Import profiles' ));
$importLink -> setOnClick ( " showDistributionDialog(' " . _ ( " Import profiles " ) . " ', ' " .
_ ( 'Ok' ) . " ', ' " . _ ( 'Cancel' ) . " ', ' " . $profileClasses [ $i ][ 'scope' ] . " ', 'import'); " );
$existingContainer -> addElement ( $importLink );
}
2012-10-28 15:03:36 +00:00
$exportLink = new htmlLink ( null , '#' , '../../graphics/export.png' );
$exportLink -> setTitle ( _ ( 'Export profile' ));
$exportLink -> setOnClick ( " showDistributionDialog(' " . _ ( " Export profile " ) . " ', ' " .
_ ( 'Ok' ) . " ', ' " . _ ( 'Cancel' ) . " ', ' " . $profileClasses [ $i ][ 'scope' ] . " ', 'export', ' " . 'profile_' . $profileClasses [ $i ][ 'scope' ] . " ', ' " . $_SESSION [ 'config' ] -> getName () . " '); " );
$existingContainer -> addElement ( $exportLink );
2010-10-16 17:52:08 +00:00
$existingContainer -> addNewLine ();
2004-12-12 11:27:57 +00:00
}
2010-10-16 17:52:08 +00:00
$container -> addElement ( $existingContainer );
2012-10-28 14:37:54 +00:00
$container -> addElement ( new htmlSpacer ( null , '10px' ), true );
2010-10-16 17:52:08 +00:00
// generate content
$tabindex = 1 ;
parseHtml ( null , $container , array (), false , $tabindex , 'user' );
2003-05-25 10:57:32 +00:00
2004-12-12 11:27:57 +00:00
echo " </form> \n " ;
2010-10-16 17:52:08 +00:00
echo " </div> \n " ;
2011-04-25 18:00:47 +00:00
2012-10-28 14:37:54 +00:00
for ( $i = 0 ; $i < sizeof ( $profileClasses ); $i ++ ) {
$scope = $profileClasses [ $i ][ 'scope' ];
$tmpArr = array ();
foreach ( $configProfiles as $profile ) {
if ( $profile != $_SESSION [ 'config' ] -> getName ()) {
$accountProfiles = getAccountProfiles ( $scope , $profile );
if ( ! empty ( $accountProfiles )) {
for ( $p = 0 ; $p < sizeof ( $accountProfiles ); $p ++ ) {
$tmpArr [ $profile ][ $accountProfiles [ $p ]] = $profile . '##' . $accountProfiles [ $p ];
}
}
}
}
//import dialog
echo " <div id= \" importDialog_ $scope\ " class = \ " hidden \" > \n " ;
echo " <form id= \" importDialogForm_ $scope\ " method = \ " post \" action= \" profilemain.php \" > \n " ;
$container = new htmlTable ();
$container -> addElement ( new htmlOutputText ( _ ( 'Profiles' )), true );
$select = new htmlSelect ( 'importProfiles_' . $scope , $tmpArr , array (), count ( $tmpArr , 1 ) < 15 ? count ( $tmpArr , 1 ) : 15 );
$select -> setMultiSelect ( true );
$select -> setHasDescriptiveElements ( true );
$select -> setContainsOptgroups ( true );
$select -> setWidth ( '290px' );
$container -> addElement ( $select );
$container -> addElement ( new htmlHelpLink ( '362' ), true );
$container -> addElement ( new htmlSpacer ( null , '10px' ), true );
$container -> addElement ( new htmlOutputText ( _ ( " Master password " )), true );
$exportPasswd = new htmlInputField ( 'passwd_' . $scope );
$exportPasswd -> setIsPassword ( true );
$container -> addElement ( $exportPasswd );
$container -> addElement ( new htmlHelpLink ( '236' ));
$container -> addElement ( new htmlHiddenInput ( 'importexport' , '1' ));
$container -> addElement ( new htmlHiddenInput ( 'scope' , $scope ), true );
parseHtml ( null , $container , array (), false , $tabindex , 'user' );
echo '</form>' ;
echo " </div> \n " ;
}
//export dialog
echo " <div id= \" exportDialog \" class= \" hidden \" > \n " ;
echo " <form id= \" exportDialogForm \" method= \" post \" action= \" profilemain.php \" > \n " ;
$container = new htmlTable ();
$container -> addElement ( new htmlOutputText ( _ ( 'Profile name' )), true );
$expStructGroup = new htmlTable ();
$expStructGroup -> addElement ( new htmlSpacer ( '10px' , null ));
$expStructGroup -> addElement ( new htmlDiv ( 'exportName' , '' ));
$container -> addElement ( $expStructGroup , true );
$container -> addElement ( new htmlSpacer ( null , '10px' ), true );
$container -> addElement ( new htmlOutputText ( _ ( " Target server profile " )), true );
foreach ( $configProfiles as $key => $value ) {
$tmpProfiles [ $value ] = $value ;
}
natcasesort ( $tmpProfiles );
$tmpProfiles [ '*' . _ ( 'Global templates' )] = 'templates*' ;
$findProfile = array_search ( $_SESSION [ 'config' ] -> getName (), $tmpProfiles );
if ( $findProfile !== false ) {
unset ( $tmpProfiles [ $findProfile ]);
}
$select = new htmlSelect ( 'destServerProfiles' , $tmpProfiles , array (), count ( $tmpProfiles ) < 10 ? count ( $tmpProfiles ) : 10 );
$select -> setHasDescriptiveElements ( true );
$select -> setSortElements ( false );
$select -> setMultiSelect ( true );
$container -> addElement ( $select );
$container -> addElement ( new htmlHelpLink ( '363' ), true );
$container -> addElement ( new htmlSpacer ( null , '10px' ), true );
$container -> addElement ( new htmlOutputText ( _ ( " Master password " )), true );
$exportPasswd = new htmlInputField ( 'passwd' );
$exportPasswd -> setIsPassword ( true );
$container -> addElement ( $exportPasswd );
$container -> addElement ( new htmlHelpLink ( '236' ));
$container -> addElement ( new htmlHiddenInput ( 'importexport' , '1' ), true );
parseHtml ( null , $container , array (), false , $tabindex , 'user' );
echo '</form>' ;
echo " </div> \n " ;
2011-04-25 18:00:47 +00:00
// form for delete action
echo '<div id="deleteProfileDialog" class="hidden"><form id="deleteProfileForm" action="profilemain.php" method="post">' ;
echo _ ( " Do you really want to delete this profile? " );
echo '<br><br><div class="nowrap">' ;
echo _ ( " Profile name " ) . ': <div id="deleteText" style="display: inline;"></div></div>' ;
echo '<input id="profileDeleteType" type="hidden" name="profileDeleteType" value="">' ;
echo '<input id="profileDeleteName" type="hidden" name="profileDeleteName" value="">' ;
echo '<input type="hidden" name="deleteProfile" value="true">' ;
echo '</form></div>' ;
2010-08-21 09:43:52 +00:00
include '../main_footer.php' ;
2003-05-25 10:57:32 +00:00
2004-12-12 11:27:57 +00:00
?>