2016-10-05 18:29:30 +02:00
< ? php
/*
FusionPBX
Version : MPL 1.1
The contents of this file are subject to the Mozilla Public License Version
1.1 ( the " License " ); you may not use this file except in compliance with
the License . You may obtain a copy of the License at
http :// www . mozilla . org / MPL /
Software distributed under the License is distributed on an " AS IS " basis ,
WITHOUT WARRANTY OF ANY KIND , either express or implied . See the License
for the specific language governing rights and limitations under the
License .
The Original Code is FusionPBX
The Initial Developer of the Original Code is
Mark J Crane < markjcrane @ fusionpbx . com >
2019-06-09 04:08:29 +02:00
Portions created by the Initial Developer are Copyright ( C ) 2008 - 2019
2016-10-05 18:29:30 +02:00
the Initial Developer . All Rights Reserved .
Contributor ( s ) :
Mark J Crane < markjcrane @ fusionpbx . com >
Luis Daniel Lucio Quiroz < dlucio @ okay . com . mx >
*/
//includes
include " root.php " ;
require_once " resources/require.php " ;
require_once " resources/check_auth.php " ;
//add multi-lingual support
$language = new text ;
$text = $language -> get ();
//get user uuid
2019-09-11 10:34:25 +02:00
if (( is_uuid ( $_REQUEST [ " id " ]) && permission_exists ( 'user_edit' )) || ( is_uuid ( $_REQUEST [ " id " ]) && $_REQUEST [ " id " ] == $_SESSION [ 'user_uuid' ])) {
2019-06-09 04:08:29 +02:00
$user_uuid = $_REQUEST [ " id " ];
2016-10-05 18:29:30 +02:00
$action = 'edit' ;
}
2019-08-16 21:46:40 +02:00
elseif ( permission_exists ( 'user_add' ) && ! isset ( $_REQUEST [ " id " ])) {
2016-10-05 18:29:30 +02:00
$user_uuid = uuid ();
$action = 'add' ;
}
else {
// load users own account
2019-08-24 05:38:17 +02:00
header ( " Location: user_edit.php?id= " . urlencode ( $_SESSION [ 'user_uuid' ]));
2018-11-08 08:58:16 +01:00
exit ;
2016-10-05 18:29:30 +02:00
}
//get total user count from the database, check limit, if defined
if ( permission_exists ( 'user_add' ) && $action == 'add' && $_SESSION [ 'limit' ][ 'users' ][ 'numeric' ] != '' ) {
2019-07-19 23:05:18 +02:00
$sql = " select count(*) " ;
$sql .= " from v_users " ;
$sql .= " where domain_uuid = :domain_uuid " ;
2019-06-09 04:08:29 +02:00
$parameters [ 'domain_uuid' ] = $_SESSION [ 'domain_uuid' ];
$database = new database ;
2019-07-19 23:05:18 +02:00
$num_rows = $database -> select ( $sql , $parameters , 'column' );
unset ( $sql , $parameters );
2019-06-09 04:08:29 +02:00
2019-07-19 23:05:18 +02:00
if ( $num_rows >= $_SESSION [ 'limit' ][ 'users' ][ 'numeric' ]) {
2018-08-31 05:09:01 +02:00
message :: add ( $text [ 'message-maximum_users' ] . ' ' . $_SESSION [ 'limit' ][ 'users' ][ 'numeric' ], 'negative' );
2016-10-05 18:29:30 +02:00
header ( 'Location: users.php' );
exit ;
}
}
//required to be a superadmin to update an account that is a member of the superadmin group
if ( permission_exists ( 'user_edit' ) && $action == 'edit' ) {
2019-08-29 01:53:34 +02:00
$superadmins = superadmin_list ();
2016-10-05 18:29:30 +02:00
if ( if_superadmin ( $superadmins , $user_uuid )) {
if ( ! if_group ( " superadmin " )) {
echo " access denied " ;
exit ;
}
}
}
//delete the group from the user
2019-07-19 23:05:18 +02:00
if ( $_GET [ " a " ] == " delete " && is_uuid ( $_GET [ " group_uuid " ]) && is_uuid ( $user_uuid ) && permission_exists ( " user_delete " )) {
2016-10-05 18:29:30 +02:00
//set the variables
2019-02-10 18:16:56 +01:00
$group_uuid = $_GET [ " group_uuid " ];
2016-10-05 18:29:30 +02:00
//delete the group from the users
2019-07-19 23:05:18 +02:00
$array [ 'user_groups' ][ 0 ][ 'group_uuid' ] = $group_uuid ;
$array [ 'user_groups' ][ 0 ][ 'user_uuid' ] = $user_uuid ;
$p = new permissions ;
$p -> add ( 'user_group_delete' , 'temp' );
$database = new database ;
$database -> app_name = 'users' ;
$database -> app_uuid = '112124b3-95c2-5352-7e9d-d14c0b88f207' ;
$database -> delete ( $array );
unset ( $array );
$p -> delete ( 'user_group_delete' , 'temp' );
2016-10-05 18:29:30 +02:00
//redirect the user
2018-08-31 05:09:01 +02:00
message :: add ( $text [ 'message-update' ]);
2019-09-11 10:34:25 +02:00
header ( " Location: user_edit.php?id= " . urlencode ( $user_uuid ));
2019-07-19 23:05:18 +02:00
exit ;
2016-10-05 18:29:30 +02:00
}
2019-04-11 03:35:34 +02:00
//retrieve password requirements
2019-07-29 18:27:06 +02:00
$required [ 'length' ] = $_SESSION [ 'users' ][ 'password_length' ][ 'numeric' ];
$required [ 'number' ] = ( $_SESSION [ 'users' ][ 'password_number' ][ 'boolean' ] == 'true' ) ? true : false ;
$required [ 'lowercase' ] = ( $_SESSION [ 'users' ][ 'password_lowercase' ][ 'boolean' ] == 'true' ) ? true : false ;
$required [ 'uppercase' ] = ( $_SESSION [ 'users' ][ 'password_uppercase' ][ 'boolean' ] == 'true' ) ? true : false ;
$required [ 'special' ] = ( $_SESSION [ 'users' ][ 'password_special' ][ 'boolean' ] == 'true' ) ? true : false ;
2019-04-11 03:35:34 +02:00
2018-11-08 08:58:16 +01:00
//prepare the data
if ( count ( $_POST ) > 0 ) {
2016-10-05 18:29:30 +02:00
2018-11-08 08:58:16 +01:00
//get the HTTP values and set as variables
if ( permission_exists ( 'user_edit' ) && $action == 'edit' ) {
$user_uuid = $_REQUEST [ " id " ];
2019-06-09 04:08:29 +02:00
$username_old = $_POST [ " username_old " ];
}
$domain_uuid = $_POST [ " domain_uuid " ];
2019-11-24 06:15:30 +01:00
$username = $_POST [ " username " ];
$password = $_POST [ " password " ];
$password_confirm = $_POST [ " password_confirm " ];
$user_email = $_POST [ " user_email " ];
2019-06-09 04:08:29 +02:00
$user_status = $_POST [ " user_status " ];
$user_language = $_POST [ " user_language " ];
$user_time_zone = $_POST [ " user_time_zone " ];
2018-11-08 08:58:16 +01:00
if ( permission_exists ( 'user_edit' ) && $action == 'edit' ) {
2019-06-09 04:08:29 +02:00
$contact_uuid = $_POST [ " contact_uuid " ];
2018-11-08 08:58:16 +01:00
}
else if ( permission_exists ( 'user_add' ) && $action == 'add' ) {
2019-11-24 06:15:30 +01:00
$contact_organization = $_POST [ " contact_organization " ];
$contact_name_given = $_POST [ " contact_name_given " ];
$contact_name_family = $_POST [ " contact_name_family " ];
2019-06-09 04:08:29 +02:00
}
$group_uuid_name = $_POST [ " group_uuid_name " ];
$user_enabled = $_POST [ " user_enabled " ];
2019-11-24 06:15:30 +01:00
$api_key = $_POST [ " api_key " ];
2018-11-08 08:58:16 +01:00
if ( permission_exists ( 'message_view' )) {
2019-11-24 06:15:30 +01:00
$message_key = $_POST [ " message_key " ];
2018-11-08 08:58:16 +01:00
}
2016-10-05 18:29:30 +02:00
2019-09-19 16:14:14 +02:00
//validate the token
$token = new token ;
if ( ! $token -> validate ( $_SERVER [ 'PHP_SELF' ])) {
message :: add ( $text [ 'message-invalid_token' ], 'negative' );
header ( 'Location: users.php' );
exit ;
}
2018-11-08 08:58:16 +01:00
//check required values
if ( $username == '' ) {
2019-03-08 22:17:59 +01:00
message :: add ( $text [ 'message-required' ] . $text [ 'label-username' ], 'negative' , 7500 );
2018-11-08 08:58:16 +01:00
}
2019-09-11 10:34:25 +02:00
if (( permission_exists ( 'user_edit' ) && $action == 'edit' && $username != $username_old && $username != '' ) ||
( permission_exists ( 'user_add' ) && $action == 'add' && $username != '' )) {
2019-09-11 03:23:14 +02:00
$sql = " select count(*) from v_users where username = :username " ;
if ( $_SESSION [ " users " ][ " unique " ][ " text " ] != " global " ) {
$sql .= " and domain_uuid = :domain_uuid " ;
$parameters [ 'domain_uuid' ] = $domain_uuid ;
}
$parameters [ 'username' ] = $username ;
$database = new database ;
$num_rows = $database -> select ( $sql , $parameters , 'column' );
if ( $num_rows > 0 ) {
message :: add ( $text [ 'message-username_exists' ], 'negative' , 7500 );
2016-10-05 18:29:30 +02:00
}
2019-09-11 03:23:14 +02:00
unset ( $sql );
2016-10-05 18:29:30 +02:00
}
2018-11-08 08:58:16 +01:00
if ( $password != '' && $password != $password_confirm ) {
2019-03-08 22:17:59 +01:00
message :: add ( $text [ 'message-password_mismatch' ], 'negative' , 7500 );
2016-10-05 18:29:30 +02:00
}
2018-11-08 08:58:16 +01:00
if ( permission_exists ( 'user_add' ) && $action == 'add' ) {
if ( $password == '' ) {
2019-03-08 22:17:59 +01:00
message :: add ( $text [ 'message-password_blank' ], 'negative' , 7500 );
2018-11-08 08:58:16 +01:00
}
if ( $user_email == '' ) {
2019-03-08 22:17:59 +01:00
message :: add ( $text [ 'message-required' ] . $text [ 'label-email' ], 'negative' , 7500 );
2018-11-08 08:58:16 +01:00
}
if ( $group_uuid_name == '' ) {
2019-03-08 22:17:59 +01:00
message :: add ( $text [ 'message-required' ] . $text [ 'label-group' ], 'negative' , 7500 );
2018-11-08 08:58:16 +01:00
}
2016-10-05 18:29:30 +02:00
}
2018-11-08 08:58:16 +01:00
if ( strlen ( $password ) > 0 ) {
if ( is_numeric ( $required [ 'length' ]) && $required [ 'length' ] != 0 ) {
if ( strlen ( $password ) < $required [ 'length' ]) {
2019-03-08 22:17:59 +01:00
message :: add ( $text [ 'message-required' ] . $text [ 'label-characters' ], 'negative' , 7500 );
2018-11-08 08:58:16 +01:00
}
}
if ( $required [ 'number' ]) {
if ( ! preg_match ( '/(?=.*[\d])/' , $password )) {
2019-03-08 22:17:59 +01:00
message :: add ( $text [ 'message-required' ] . $text [ 'label-numbers' ], 'negative' , 7500 );
2018-11-08 08:58:16 +01:00
}
}
if ( $required [ 'lowercase' ]) {
if ( ! preg_match ( '/(?=.*[a-z])/' , $password )) {
2019-03-08 22:17:59 +01:00
message :: add ( $text [ 'message-required' ] . $text [ 'label-lowercase_letters' ], 'negative' , 7500 );
2018-11-08 08:58:16 +01:00
}
}
if ( $required [ 'uppercase' ]) {
if ( ! preg_match ( '/(?=.*[A-Z])/' , $password )) {
2019-03-08 22:17:59 +01:00
message :: add ( $text [ 'message-required' ] . $text [ 'label-uppercase_letters' ], 'negative' , 7500 );
2018-11-08 08:58:16 +01:00
}
}
if ( $required [ 'special' ]) {
if ( ! preg_match ( '/(?=.*[\W])/' , $password )) {
2019-03-08 22:17:59 +01:00
message :: add ( $text [ 'message-required' ] . $text [ 'label-special_characters' ], 'negative' , 7500 );
2018-11-08 08:58:16 +01:00
}
}
2016-10-05 18:29:30 +02:00
}
2019-03-08 22:17:59 +01:00
//return if error
if ( message :: count () != 0 ) {
2019-08-24 05:38:17 +02:00
header ( " Location: user_edit.php " . ( permission_exists ( 'user_edit' ) && $action != 'add' ? " ?id= " . urlencode ( $user_uuid ) : null ));
2019-03-08 22:17:59 +01:00
exit ;
}
//save the data
$i = $n = $x = $c = 0 ; //set initial array indexes
2016-10-05 18:29:30 +02:00
2018-11-08 08:58:16 +01:00
//check to see if user language is set
$sql = " select user_setting_uuid, user_setting_value from v_user_settings " ;
$sql .= " where user_setting_category = 'domain' " ;
$sql .= " and user_setting_subcategory = 'language' " ;
2019-06-09 04:08:29 +02:00
$sql .= " and user_uuid = :user_uuid " ;
$parameters [ 'user_uuid' ] = $user_uuid ;
$database = new database ;
$row = $database -> select ( $sql , $parameters , 'row' );
2019-07-19 23:05:18 +02:00
if ( ! is_uuid ( $row [ 'user_setting_uuid' ]) && $user_language != '' ) {
2019-06-09 04:08:29 +02:00
//add user setting to array for insert
$array [ 'user_settings' ][ $i ][ 'user_setting_uuid' ] = uuid ();
$array [ 'user_settings' ][ $i ][ 'user_uuid' ] = $user_uuid ;
$array [ 'user_settings' ][ $i ][ 'domain_uuid' ] = $domain_uuid ;
$array [ 'user_settings' ][ $i ][ 'user_setting_category' ] = 'domain' ;
$array [ 'user_settings' ][ $i ][ 'user_setting_subcategory' ] = 'language' ;
$array [ 'user_settings' ][ $i ][ 'user_setting_name' ] = 'code' ;
$array [ 'user_settings' ][ $i ][ 'user_setting_value' ] = $user_language ;
$array [ 'user_settings' ][ $i ][ 'user_setting_enabled' ] = 'true' ;
$i ++ ;
}
else {
if ( $row [ 'user_setting_value' ] == '' || $user_language == '' ) {
2019-07-19 23:05:18 +02:00
$array_delete [ 'user_settings' ][ 0 ][ 'user_setting_category' ] = 'domain' ;
$array_delete [ 'user_settings' ][ 0 ][ 'user_setting_subcategory' ] = 'language' ;
$array_delete [ 'user_settings' ][ 0 ][ 'user_uuid' ] = $user_uuid ;
$p = new permissions ;
$p -> add ( 'user_setting_delete' , 'temp' );
2019-06-09 04:08:29 +02:00
$database = new database ;
2019-07-19 23:05:18 +02:00
$database -> app_name = 'users' ;
$database -> app_uuid = '112124b3-95c2-5352-7e9d-d14c0b88f207' ;
$database -> delete ( $array_delete );
unset ( $array_delete );
$p -> delete ( 'user_setting_delete' , 'temp' );
2016-10-05 18:29:30 +02:00
}
else {
2019-06-09 04:08:29 +02:00
//add user setting to array for update
$array [ 'user_settings' ][ $i ][ 'user_setting_uuid' ] = $row [ 'user_setting_uuid' ];
$array [ 'user_settings' ][ $i ][ 'user_uuid' ] = $user_uuid ;
$array [ 'user_settings' ][ $i ][ 'domain_uuid' ] = $domain_uuid ;
$array [ 'user_settings' ][ $i ][ 'user_setting_category' ] = 'domain' ;
$array [ 'user_settings' ][ $i ][ 'user_setting_subcategory' ] = 'language' ;
$array [ 'user_settings' ][ $i ][ 'user_setting_name' ] = 'code' ;
$array [ 'user_settings' ][ $i ][ 'user_setting_value' ] = $user_language ;
$array [ 'user_settings' ][ $i ][ 'user_setting_enabled' ] = 'true' ;
$i ++ ;
2016-10-05 18:29:30 +02:00
}
}
2019-06-09 04:08:29 +02:00
unset ( $sql , $parameters , $row );
2016-10-05 18:29:30 +02:00
2018-11-08 08:58:16 +01:00
//check to see if user time zone is set
2018-08-30 18:11:23 +02:00
$sql = " select user_setting_uuid, user_setting_value from v_user_settings " ;
2018-11-08 08:58:16 +01:00
$sql .= " where user_setting_category = 'domain' " ;
$sql .= " and user_setting_subcategory = 'time_zone' " ;
2019-06-09 04:08:29 +02:00
$sql .= " and user_uuid = :user_uuid " ;
$parameters [ 'user_uuid' ] = $user_uuid ;
$database = new database ;
$row = $database -> select ( $sql , $parameters , 'row' );
if ( $row [ 'user_setting_uuid' ] == '' && $user_time_zone != '' ) {
//add user setting to array for insert
$array [ 'user_settings' ][ $i ][ 'user_setting_uuid' ] = uuid ();
$array [ 'user_settings' ][ $i ][ 'user_uuid' ] = $user_uuid ;
$array [ 'user_settings' ][ $i ][ 'domain_uuid' ] = $domain_uuid ;
$array [ 'user_settings' ][ $i ][ 'user_setting_category' ] = 'domain' ;
$array [ 'user_settings' ][ $i ][ 'user_setting_subcategory' ] = 'time_zone' ;
$array [ 'user_settings' ][ $i ][ 'user_setting_name' ] = 'name' ;
$array [ 'user_settings' ][ $i ][ 'user_setting_value' ] = $user_time_zone ;
$array [ 'user_settings' ][ $i ][ 'user_setting_enabled' ] = 'true' ;
$i ++ ;
}
else {
if ( $row [ 'user_setting_value' ] == '' || $user_time_zone == '' ) {
2019-07-19 23:05:18 +02:00
$array_delete [ 'user_settings' ][ 0 ][ 'user_setting_category' ] = 'domain' ;
$array_delete [ 'user_settings' ][ 0 ][ 'user_setting_subcategory' ] = 'time_zone' ;
$array_delete [ 'user_settings' ][ 0 ][ 'user_uuid' ] = $user_uuid ;
$p = new permissions ;
$p -> add ( 'user_setting_delete' , 'temp' );
2019-06-09 04:08:29 +02:00
$database = new database ;
2019-07-19 23:05:18 +02:00
$database -> app_name = 'users' ;
$database -> app_uuid = '112124b3-95c2-5352-7e9d-d14c0b88f207' ;
$database -> delete ( $array_delete );
unset ( $array_delete );
$p -> delete ( 'user_setting_delete' , 'temp' );
2018-08-30 18:11:23 +02:00
}
else {
2019-06-09 04:08:29 +02:00
//add user setting to array for update
$array [ 'user_settings' ][ $i ][ 'user_setting_uuid' ] = $row [ 'user_setting_uuid' ];
$array [ 'user_settings' ][ $i ][ 'user_uuid' ] = $user_uuid ;
$array [ 'user_settings' ][ $i ][ 'domain_uuid' ] = $domain_uuid ;
$array [ 'user_settings' ][ $i ][ 'user_setting_category' ] = 'domain' ;
$array [ 'user_settings' ][ $i ][ 'user_setting_subcategory' ] = 'time_zone' ;
$array [ 'user_settings' ][ $i ][ 'user_setting_name' ] = 'name' ;
$array [ 'user_settings' ][ $i ][ 'user_setting_value' ] = $user_time_zone ;
$array [ 'user_settings' ][ $i ][ 'user_setting_enabled' ] = 'true' ;
$i ++ ;
2018-08-30 18:11:23 +02:00
}
}
2019-06-09 04:08:29 +02:00
unset ( $sql , $parameters , $row );
2018-08-30 18:11:23 +02:00
2018-11-08 08:58:16 +01:00
//check to see if message key is set
if ( permission_exists ( 'message_view' )) {
$sql = " select user_setting_uuid, user_setting_value from v_user_settings " ;
$sql .= " where user_setting_category = 'message' " ;
$sql .= " and user_setting_subcategory = 'key' " ;
2019-06-09 04:08:29 +02:00
$sql .= " and user_uuid = :user_uuid " ;
$parameters [ 'user_uuid' ] = $user_uuid ;
$database = new database ;
$row = $database -> select ( $sql , $parameters , 'row' );
if ( $row [ 'user_setting_uuid' ] == '' && $message_key != '' ) {
//add user setting to array for insert
$array [ 'user_settings' ][ $i ][ 'user_setting_uuid' ] = uuid ();
$array [ 'user_settings' ][ $i ][ 'user_uuid' ] = $user_uuid ;
$array [ 'user_settings' ][ $i ][ 'domain_uuid' ] = $domain_uuid ;
$array [ 'user_settings' ][ $i ][ 'user_setting_category' ] = 'message' ;
$array [ 'user_settings' ][ $i ][ 'user_setting_subcategory' ] = 'key' ;
$array [ 'user_settings' ][ $i ][ 'user_setting_name' ] = 'text' ;
$array [ 'user_settings' ][ $i ][ 'user_setting_value' ] = $message_key ;
$array [ 'user_settings' ][ $i ][ 'user_setting_enabled' ] = 'true' ;
$i ++ ;
}
else {
if ( $row [ 'user_setting_value' ] == '' || $message_key == '' ) {
2019-07-19 23:05:18 +02:00
$array_delete [ 'user_settings' ][ 0 ][ 'user_setting_category' ] = 'message' ;
$array_delete [ 'user_settings' ][ 0 ][ 'user_setting_subcategory' ] = 'key' ;
$array_delete [ 'user_settings' ][ 0 ][ 'user_uuid' ] = $user_uuid ;
$p = new permissions ;
$p -> add ( 'user_setting_delete' , 'temp' );
2019-06-09 04:08:29 +02:00
$database = new database ;
2019-07-19 23:05:18 +02:00
$database -> app_name = 'users' ;
$database -> app_uuid = '112124b3-95c2-5352-7e9d-d14c0b88f207' ;
$database -> delete ( $array_delete );
unset ( $array_delete );
$p -> delete ( 'user_setting_delete' , 'temp' );
2016-10-05 18:29:30 +02:00
}
2018-11-08 08:58:16 +01:00
else {
2019-06-09 04:08:29 +02:00
//add user setting to array for update
$array [ 'user_settings' ][ $i ][ 'user_setting_uuid' ] = $row [ 'user_setting_uuid' ];
$array [ 'user_settings' ][ $i ][ 'user_uuid' ] = $user_uuid ;
$array [ 'user_settings' ][ $i ][ 'domain_uuid' ] = $domain_uuid ;
$array [ 'user_settings' ][ $i ][ 'user_setting_category' ] = 'message' ;
$array [ 'user_settings' ][ $i ][ 'user_setting_subcategory' ] = 'key' ;
$array [ 'user_settings' ][ $i ][ 'user_setting_name' ] = 'text' ;
$array [ 'user_settings' ][ $i ][ 'user_setting_value' ] = $message_key ;
$array [ 'user_settings' ][ $i ][ 'user_setting_enabled' ] = 'true' ;
$i ++ ;
2018-11-08 08:58:16 +01:00
}
2016-10-05 18:29:30 +02:00
}
}
2018-11-08 08:58:16 +01:00
//assign the user to the group
if (( permission_exists ( 'user_add' ) || permission_exists ( 'user_edit' )) && $_REQUEST [ " group_uuid_name " ] != '' ) {
$group_data = explode ( '|' , $group_uuid_name );
$group_uuid = $group_data [ 0 ];
$group_name = $group_data [ 1 ];
2019-07-26 09:09:58 +02:00
//compare the group level to only add groups at the same level or lower than the user
$sql = " select * from v_groups " ;
$sql .= " where (domain_uuid = :domain_uuid or domain_uuid is null) " ;
$sql .= " and group_uuid = :group_uuid " ;
$parameters [ 'domain_uuid' ] = $_SESSION [ 'domain_uuid' ];
$parameters [ 'group_uuid' ] = $group_uuid ;
$database = new database ;
$row = $database -> select ( $sql , $parameters , 'row' );
if ( $row [ 'group_level' ] <= $_SESSION [ 'user' ][ 'group_level' ]) {
$array [ 'user_groups' ][ $n ][ 'user_group_uuid' ] = uuid ();
$array [ 'user_groups' ][ $n ][ 'domain_uuid' ] = $domain_uuid ;
$array [ 'user_groups' ][ $n ][ 'group_name' ] = $group_name ;
$array [ 'user_groups' ][ $n ][ 'group_uuid' ] = $group_uuid ;
$array [ 'user_groups' ][ $n ][ 'user_uuid' ] = $user_uuid ;
$n ++ ;
2019-02-10 18:16:56 +01:00
}
2019-07-26 09:09:58 +02:00
unset ( $parameters );
2016-10-05 18:29:30 +02:00
}
2018-11-08 08:58:16 +01:00
//update domain, if changed
if (( permission_exists ( 'user_add' ) || permission_exists ( 'user_edit' )) && permission_exists ( 'user_domain' )) {
//adjust group user records
2019-02-09 16:10:21 +01:00
$sql = " select user_group_uuid from v_user_groups " ;
2019-06-09 04:08:29 +02:00
$sql .= " where user_uuid = :user_uuid " ;
$parameters [ 'user_uuid' ] = $user_uuid ;
$database = new database ;
$result = $database -> select ( $sql , $parameters , 'all' );
if ( is_array ( $result )) {
2018-11-08 08:58:16 +01:00
foreach ( $result as $row ) {
//add group user to array for update
2019-06-09 04:08:29 +02:00
$array [ 'user_groups' ][ $n ][ 'user_group_uuid' ] = $row [ 'user_group_uuid' ];
$array [ 'user_groups' ][ $n ][ 'domain_uuid' ] = $domain_uuid ;
$n ++ ;
2018-11-08 08:58:16 +01:00
}
}
2019-06-09 04:08:29 +02:00
unset ( $sql , $parameters );
2018-11-08 08:58:16 +01:00
//adjust user setting records
$sql = " select user_setting_uuid from v_user_settings " ;
2019-06-09 04:08:29 +02:00
$sql .= " where user_uuid = :user_uuid " ;
$parameters [ 'user_uuid' ] = $user_uuid ;
$database = new database ;
$result = $database -> select ( $sql , $parameters );
if ( is_array ( $result )) {
2018-11-08 08:58:16 +01:00
foreach ( $result as $row ) {
//add user setting to array for update
2019-06-09 04:08:29 +02:00
$array [ 'user_settings' ][ $i ][ 'user_setting_uuid' ] = $row [ 'user_setting_uuid' ];
$array [ 'user_settings' ][ $i ][ 'domain_uuid' ] = $domain_uuid ;
$i ++ ;
2018-11-08 08:58:16 +01:00
}
}
2019-06-09 04:08:29 +02:00
unset ( $sql , $parameters );
2018-11-08 08:58:16 +01:00
//unassign any foreign domain groups
2019-06-09 04:08:29 +02:00
$sql = " delete from v_user_groups " ;
$sql .= " where domain_uuid = :domain_uuid " ;
$sql .= " and user_uuid = :user_uuid " ;
2018-11-08 08:58:16 +01:00
$sql .= " and group_uuid not in ( " ;
2019-06-09 04:08:29 +02:00
$sql .= " select group_uuid from v_groups where domain_uuid = :domain_uuid or domain_uuid is null " ;
2018-11-08 08:58:16 +01:00
$sql .= " ) " ;
2019-06-09 04:08:29 +02:00
$parameters [ 'domain_uuid' ] = $_SESSION [ 'domain_uuid' ];
$parameters [ 'user_uuid' ] = $user_uuid ;
$database = new database ;
$database -> execute ( $sql , $parameters );
unset ( $sql , $parameters );
2018-11-08 08:58:16 +01:00
}
2016-10-05 18:29:30 +02:00
2018-11-08 08:58:16 +01:00
//add contact to array for insert
if ( $action == 'add' && permission_exists ( 'user_add' ) && permission_exists ( 'contact_add' )) {
$contact_uuid = uuid ();
$array [ 'contacts' ][ $c ][ 'domain_uuid' ] = $domain_uuid ;
$array [ 'contacts' ][ $c ][ 'contact_uuid' ] = $contact_uuid ;
$array [ 'contacts' ][ $c ][ 'contact_type' ] = 'user' ;
$array [ 'contacts' ][ $c ][ 'contact_organization' ] = $contact_organization ;
$array [ 'contacts' ][ $c ][ 'contact_name_given' ] = $contact_name_given ;
$array [ 'contacts' ][ $c ][ 'contact_name_family' ] = $contact_name_family ;
$array [ 'contacts' ][ $c ][ 'contact_nickname' ] = $username ;
$c ++ ;
if ( permission_exists ( 'contact_email_add' )) {
$contact_email_uuid = uuid ();
$array [ 'contact_emails' ][ $c ][ 'contact_email_uuid' ] = $contact_email_uuid ;
$array [ 'contact_emails' ][ $c ][ 'domain_uuid' ] = $domain_uuid ;
$array [ 'contact_emails' ][ $c ][ 'contact_uuid' ] = $contact_uuid ;
$array [ 'contact_emails' ][ $c ][ 'email_address' ] = $user_email ;
$array [ 'contact_emails' ][ $c ][ 'email_primary' ] = '1' ;
$c ++ ;
2018-04-26 06:15:03 +02:00
}
2018-11-08 08:58:16 +01:00
}
2016-10-05 18:29:30 +02:00
2018-11-08 08:58:16 +01:00
//add user setting to array for update
$array [ 'users' ][ $x ][ 'user_uuid' ] = $user_uuid ;
$array [ 'users' ][ $x ][ 'domain_uuid' ] = $domain_uuid ;
if ( $username != '' && $username != $username_old ) {
$array [ 'users' ][ $x ][ 'username' ] = $username ;
}
if ( $password != '' && $password == $password_confirm ) {
$salt = uuid ();
$array [ 'users' ][ $x ][ 'password' ] = md5 ( $salt . $password );
$array [ 'users' ][ $x ][ 'salt' ] = $salt ;
}
2019-08-16 21:15:52 +02:00
$array [ 'users' ][ $x ][ 'user_email' ] = $user_email ;
2018-11-08 08:58:16 +01:00
$array [ 'users' ][ $x ][ 'user_status' ] = $user_status ;
if ( permission_exists ( 'user_add' ) || permission_exists ( 'user_edit' )) {
$array [ 'users' ][ $x ][ 'api_key' ] = ( $api_key != '' ) ? $api_key : null ;
$array [ 'users' ][ $x ][ 'user_enabled' ] = $user_enabled ;
$array [ 'users' ][ $x ][ 'contact_uuid' ] = ( $contact_uuid != '' ) ? $contact_uuid : null ;
if ( $action == 'add' ) {
$array [ 'users' ][ $x ][ 'add_user' ] = $_SESSION [ " user " ][ " username " ];
$array [ 'users' ][ $x ][ 'add_date' ] = date ( " Y-m-d H:i:s.uO " );
2018-04-26 06:15:03 +02:00
}
2018-11-08 08:58:16 +01:00
}
$x ++ ;
//add the user_edit permission
$p = new permissions ;
$p -> add ( " user_setting_add " , " temp " );
$p -> add ( " user_setting_edit " , " temp " );
$p -> add ( " user_edit " , " temp " );
2019-07-26 09:24:57 +02:00
$p -> add ( 'user_group_add' , 'temp' );
2018-11-08 08:58:16 +01:00
//save the data
$database = new database ;
$database -> app_name = 'users' ;
$database -> app_uuid = '112124b3-95c2-5352-7e9d-d14c0b88f207' ;
$database -> save ( $array );
//$message = $database->message;
//remove the temporary permission
$p -> delete ( " user_setting_add " , " temp " );
$p -> delete ( " user_setting_edit " , " temp " );
$p -> delete ( " user_edit " , " temp " );
2019-07-26 09:24:57 +02:00
$p -> delete ( 'user_group_add' , 'temp' );
2018-11-08 08:58:16 +01:00
//if call center installed
if ( $action == 'edit' && permission_exists ( 'user_edit' ) && file_exists ( $_SERVER [ " PROJECT_ROOT " ] . " /app/call_centers/app_config.php " )) {
//get the call center agent uuid
$sql = " select call_center_agent_uuid from v_call_center_agents " ;
2019-06-09 04:08:29 +02:00
$sql .= " where domain_uuid = :domain_uuid " ;
$sql .= " and user_uuid = :user_uuid " ;
$parameters [ 'domain_uuid' ] = $_SESSION [ 'domain_uuid' ];
$parameters [ 'user_uuid' ] = $user_uuid ;
$database = new database ;
$call_center_agent_uuid = $database -> select ( $sql , $parameters , 'column' );
unset ( $sql , $parameters );
2016-10-05 18:29:30 +02:00
2018-11-08 08:58:16 +01:00
//update the user_status
2019-06-09 04:08:29 +02:00
if ( isset ( $call_center_agent_uuid ) && is_uuid ( $call_center_agent_uuid )) {
2018-11-08 08:58:16 +01:00
$fp = event_socket_create ( $_SESSION [ 'event_socket_ip_address' ], $_SESSION [ 'event_socket_port' ], $_SESSION [ 'event_socket_password' ]);
$switch_cmd .= " callcenter_config agent set status " . $call_center_agent_uuid . " ' " . $user_status . " ' " ;
$switch_result = event_socket_request ( $fp , 'api ' . $switch_cmd );
}
2016-10-05 18:29:30 +02:00
2018-11-08 08:58:16 +01:00
//update the user state
2019-06-09 04:08:29 +02:00
if ( isset ( $call_center_agent_uuid ) && is_uuid ( $call_center_agent_uuid )) {
2018-11-08 08:58:16 +01:00
$cmd = " api callcenter_config agent set state " . $call_center_agent_uuid . " Waiting " ;
$response = event_socket_request ( $fp , $cmd );
}
}
2016-10-05 18:29:30 +02:00
2019-03-08 22:17:59 +01:00
//response message
if ( $action == 'edit' ) {
message :: add ( $text [ 'message-update' ], 'positive' );
2016-10-05 18:29:30 +02:00
}
else {
2019-03-08 22:17:59 +01:00
message :: add ( $text [ 'message-add' ], 'positive' );
2016-10-05 18:29:30 +02:00
}
2019-09-11 10:34:25 +02:00
header ( " Location: user_edit.php?id= " . urldecode ( $user_uuid ));
2019-03-08 22:17:59 +01:00
exit ;
}
2016-10-05 18:29:30 +02:00
2019-09-11 10:34:25 +02:00
//populate the form with values from db
if ( $action == 'edit' ) {
$sql = " select * from v_users where user_uuid = :user_uuid " ;
if ( ! permission_exists ( 'user_all' )) {
$sql .= " and domain_uuid = :domain_uuid " ;
$parameters [ 'domain_uuid' ] = $domain_uuid ;
}
$parameters [ 'user_uuid' ] = $user_uuid ;
$database = new database ;
$row = $database -> select ( $sql , $parameters , 'row' );
if ( is_array ( $row ) && sizeof ( $row ) > 0 ) {
$domain_uuid = $row [ " domain_uuid " ];
$user_uuid = $row [ " user_uuid " ];
$username = $row [ " username " ];
$user_email = $row [ " user_email " ];
$api_key = $row [ " api_key " ];
$user_enabled = $row [ " user_enabled " ];
$contact_uuid = $row [ " contact_uuid " ];
$user_status = $row [ " user_status " ];
}
else {
message :: add ( $text [ 'message-invalid_user' ], 'negative' , 7500 );
header ( " Location: user_edit.php?id= " . $_SESSION [ 'user_uuid' ]);
exit ;
}
unset ( $sql , $parameters , $row );
2019-03-08 22:17:59 +01:00
2019-09-11 10:34:25 +02:00
//get user settings
$sql = " select * from v_user_settings " ;
$sql .= " where user_uuid = :user_uuid " ;
$sql .= " and user_setting_enabled = 'true' " ;
$parameters [ 'user_uuid' ] = $user_uuid ;
$database = new database ;
$result = $database -> select ( $sql , $parameters , 'all' );
if ( is_array ( $result )) {
foreach ( $result as $row ) {
$name = $row [ 'user_setting_name' ];
$category = $row [ 'user_setting_category' ];
$subcategory = $row [ 'user_setting_subcategory' ];
if ( strlen ( $subcategory ) == 0 ) {
//$$category[$name] = $row['domain_setting_value'];
$user_settings [ $category ][ $name ] = $row [ 'user_setting_value' ];
}
else {
$user_settings [ $category ][ $subcategory ][ $name ] = $row [ 'user_setting_value' ];
2016-10-05 18:29:30 +02:00
}
2019-04-11 03:35:34 +02:00
}
2019-03-08 22:17:59 +01:00
}
2019-09-11 10:34:25 +02:00
unset ( $sql , $parameters , $result , $row );
2016-10-05 18:29:30 +02:00
}
2019-09-19 16:14:14 +02:00
//create token
$object = new token ;
$token = $object -> create ( $_SERVER [ 'PHP_SELF' ]);
2016-10-05 18:29:30 +02:00
//include the header
require_once " resources/header.php " ;
$document [ 'title' ] = $text [ 'title-user_edit' ];
//show the content
echo " <script> \n " ;
echo " function compare_passwords() { \n " ;
echo " if (document.getElementById('password') === document.activeElement || document.getElementById('password_confirm') === document.activeElement) { \n " ;
echo " if ( $ ('#password').val() != '' || $ ('#password_confirm').val() != '') { \n " ;
echo " if ( $ ('#password').val() != $ ('#password_confirm').val()) { \n " ;
echo " $ ('#password').removeClass('formfld_highlight_good'); \n " ;
echo " $ ('#password_confirm').removeClass('formfld_highlight_good'); \n " ;
echo " $ ('#password').addClass('formfld_highlight_bad'); \n " ;
echo " $ ('#password_confirm').addClass('formfld_highlight_bad'); \n " ;
echo " } \n " ;
echo " else { \n " ;
echo " $ ('#password').removeClass('formfld_highlight_bad'); \n " ;
echo " $ ('#password_confirm').removeClass('formfld_highlight_bad'); \n " ;
echo " $ ('#password').addClass('formfld_highlight_good'); \n " ;
echo " $ ('#password_confirm').addClass('formfld_highlight_good'); \n " ;
echo " } \n " ;
echo " } \n " ;
echo " } \n " ;
echo " else { \n " ;
echo " $ ('#password').removeClass('formfld_highlight_bad'); \n " ;
echo " $ ('#password_confirm').removeClass('formfld_highlight_bad'); \n " ;
echo " $ ('#password').removeClass('formfld_highlight_good'); \n " ;
echo " $ ('#password_confirm').removeClass('formfld_highlight_good'); \n " ;
echo " } \n " ;
echo " } \n " ;
2017-08-25 21:22:42 +02:00
echo " function show_strength_meter() { \n " ;
2016-10-05 18:29:30 +02:00
echo " $ ('#pwstrength_progress').slideDown(); \n " ;
echo " } \n " ;
echo " </script> \n " ;
echo " <form name='frm' id='frm' method='post'> \n " ;
echo " <input type='hidden' name='action' id='action' value=''> \n " ;
2019-03-08 22:17:59 +01:00
echo " <div style='float:right; white-space: nowrap;'> \n " ;
if ( $unsaved ) {
2019-08-21 03:53:21 +02:00
echo " <span style='color: #b00;'> " . $text [ 'message-unsaved_changes' ] . " <i class='fas fa-exclamation-triangle' style='margin-right: 15px;'></i></span> " ;
2019-03-08 22:17:59 +01:00
}
2016-10-05 18:29:30 +02:00
if ( permission_exists ( 'user_add' ) || permission_exists ( 'user_edit' )) {
2019-04-17 00:14:01 +02:00
echo " <input type='button' class='btn' style='margin-right: 10px;' onclick= \" window.location='users.php' \" value=' " . $text [ 'button-back' ] . " '> " ;
2016-10-05 18:29:30 +02:00
}
2019-08-04 09:34:50 +02:00
if ( permission_exists ( 'ticket_add' ) || permission_exists ( 'ticket_edit' )) {
2019-08-24 05:38:17 +02:00
echo " <input type='button' class='btn' style='margin-right: 3px;' onclick= \" window.location='/app/tickets/tickets.php?user_uuid= " . urlencode ( $user_uuid ) . " ' \" value=' " . $text [ 'button-tickets' ] . " '> " ;
2019-08-04 09:34:50 +02:00
}
2018-11-08 08:58:16 +01:00
echo " <input type='submit' class='btn' value=' " . $text [ 'button-save' ] . " '> " ;
2019-03-08 22:17:59 +01:00
echo " </div> \n " ;
echo " <b> " . $text [ 'header-user_edit' ] . " </b><br /> \n " ;
echo $text [ 'description-user_edit' ] . " <br /><br /> \n " ;
2016-10-05 18:29:30 +02:00
echo " <table cellpadding='0' cellspacing='0' border='0' width='100%'> " ;
echo " <tr> " ;
echo " <td width='30%' class='vncellreq' valign='top'> " . $text [ 'label-username' ] . " </td> " ;
echo " <td width='70%' class='vtable'> " ;
if ( permission_exists ( " user_edit " )) {
2019-02-19 17:04:16 +01:00
echo " <input type='text' class='formfld' name='username' id='username' autocomplete='new-password' value=' " . escape ( $username ) . " ' required='required'> \n " ;
2019-04-12 18:18:03 +02:00
echo " <input type='text' style='display: none;' disabled='disabled'> \n " ; //help defeat browser auto-fill
2016-10-05 18:29:30 +02:00
}
else {
2018-06-08 21:42:42 +02:00
echo " " . escape ( $username ) . " \n " ;
2019-02-19 17:04:16 +01:00
echo " <input type='hidden' name='username' id='username' autocomplete='new-password' value=' " . escape ( $username ) . " '> \n " ;
2016-10-05 18:29:30 +02:00
}
echo " </td> " ;
echo " </tr> " ;
echo " <tr> " ;
echo " <td class='vncell " . (( $action == 'add' ) ? 'req' : null ) . " ' valign='top'> " . $text [ 'label-password' ] . " </td> " ;
echo " <td class='vtable'> " ;
2019-04-12 18:18:03 +02:00
echo " <input type='password' style='display: none;' disabled='disabled'> " ; //help defeat browser auto-fill
2019-04-11 03:35:34 +02:00
echo " <input type='password' autocomplete='new-password' class='formfld' name='password' id='password' value= \" " . escape ( $password ) . " \" " . ( $action == 'add' ? " required='required' " : null ) . " onkeypress='show_strength_meter();' onfocus='compare_passwords();' onkeyup='compare_passwords();' onblur='compare_passwords();'> " ;
echo " <div id='pwstrength_progress' class='pwstrength_progress'></div><br /> \n " ;
if (( is_numeric ( $required [ 'length' ]) && $required [ 'length' ] != 0 ) || $required [ 'number' ] || $required [ 'lowercase' ] || $required [ 'uppercase' ] || $required [ 'special' ]) {
echo $text [ 'label-required' ] . ': ' ;
if ( is_numeric ( $required [ 'length' ]) && $required [ 'length' ] != 0 ) {
echo $required [ 'length' ] . " " . $text [ 'label-characters' ];
if ( $required [ 'number' ] || $required [ 'lowercase' ] || $required [ 'uppercase' ] || $required [ 'special' ]) {
echo " ( " ;
}
}
if ( $required [ 'number' ]) {
$required_temp [] = $text [ 'label-number' ];
}
if ( $required [ 'lowercase' ]) {
$required_temp [] = $text [ 'label-lowercase' ];
}
if ( $required [ 'uppercase' ]) {
$required_temp [] = $text [ 'label-uppercase' ];
}
if ( $required [ 'special' ]) {
$required_temp [] = $text [ 'label-special' ];
}
if ( is_array ( $required_temp ) && sizeof ( $required_temp ) != 0 ) {
echo implode ( ', ' , $required_temp );
if ( is_numeric ( $required [ 'length' ]) && $required [ 'length' ] != 0 ) {
echo " ) " ;
}
}
unset ( $required_temp );
}
2016-10-05 18:29:30 +02:00
echo " </td> " ;
echo " </tr> " ;
echo " <tr> " ;
echo " <td class='vncell " . (( $action == 'add' ) ? 'req' : null ) . " ' valign='top'> " . $text [ 'label-confirm_password' ] . " </td> " ;
echo " <td class='vtable'> " ;
2019-04-11 03:35:34 +02:00
echo " <input type='password' autocomplete='new-password' class='formfld' name='password_confirm' id='password_confirm' value= \" " . escape ( $password_confirm ) . " \" " . ( $action == 'add' ? " required='required' " : null ) . " onfocus='compare_passwords();' onkeyup='compare_passwords();' onblur='compare_passwords();'><br /> \n " ;
echo " " . $text [ 'message-green_border_passwords_match' ] . " \n " ;
2016-10-05 18:29:30 +02:00
echo " </td> " ;
echo " </tr> " ;
2019-08-16 21:15:52 +02:00
echo " <tr> " ;
echo " <td class='vncellreq'> " . $text [ 'label-email' ] . " </td> " ;
echo " <td class='vtable'><input type='text' class='formfld' name='user_email' value=' " . escape ( $user_email ) . " ' required='required'></td> " ;
echo " </tr> " ;
2016-10-05 18:29:30 +02:00
echo " <tr> \n " ;
echo " <td width='20%' class= \" vncell \" valign='top'> \n " ;
echo " " . $text [ 'label-user_language' ] . " \n " ;
echo " </td> \n " ;
echo " <td class= \" vtable \" align='left'> \n " ;
echo " <select id='user_language' name='user_language' class='formfld' style=''> \n " ;
echo " <option value=''></option> \n " ;
//get all language codes from database
2019-06-09 04:08:29 +02:00
$sql = " select * from v_languages order by language asc " ;
$database = new database ;
2019-07-19 23:05:18 +02:00
$languages = $database -> select ( $sql , null , 'all' );
if ( is_array ( $languages ) && sizeof ( $languages ) != 0 ) {
foreach ( $languages as $row ) {
$language_codes [ $row [ " code " ]] = $row [ " language " ];
}
2016-10-05 18:29:30 +02:00
}
2019-07-19 23:05:18 +02:00
unset ( $sql , $languages , $row );
if ( is_array ( $_SESSION [ 'app' ][ 'languages' ]) && sizeof ( $_SESSION [ 'app' ][ 'languages' ]) != 0 ) {
foreach ( $_SESSION [ 'app' ][ 'languages' ] as $code ) {
$selected = ( $code == $user_settings [ 'domain' ][ 'language' ][ 'code' ]) ? " selected='selected' " : null ;
2019-08-22 01:32:40 +02:00
echo " <option value=' " . $code . " ' " . $selected . " > " . escape ( $language_codes [ $code ]) . " [ " . escape ( $code ) . " ]</option> \n " ;
2019-07-19 23:05:18 +02:00
}
2016-10-05 18:29:30 +02:00
}
echo " </select> \n " ;
echo " <br /> \n " ;
echo " " . $text [ 'description-user_language' ] . " <br /> \n " ;
echo " </td> \n " ;
echo " </tr> \n " ;
echo " <tr> \n " ;
echo " <td width='20%' class= \" vncell \" valign='top'> \n " ;
echo " " . $text [ 'label-time_zone' ] . " \n " ;
echo " </td> \n " ;
echo " <td class= \" vtable \" align='left'> \n " ;
echo " <select id='user_time_zone' name='user_time_zone' class='formfld' style=''> \n " ;
echo " <option value=''></option> \n " ;
//$list = DateTimeZone::listAbbreviations();
2017-04-27 19:30:52 +02:00
$time_zone_identifiers = DateTimeZone :: listIdentifiers ();
2016-10-05 18:29:30 +02:00
$previous_category = '' ;
$x = 0 ;
foreach ( $time_zone_identifiers as $key => $row ) {
$time_zone = explode ( " / " , $row );
$category = $time_zone [ 0 ];
if ( $category != $previous_category ) {
if ( $x > 0 ) {
echo " </optgroup> \n " ;
}
echo " <optgroup label=' " . $category . " '> \n " ;
}
if ( $row == $user_settings [ 'domain' ][ 'time_zone' ][ 'name' ]) {
2018-06-08 21:42:42 +02:00
echo " <option value=' " . escape ( $row ) . " ' selected='selected'> " . escape ( $row ) . " </option> \n " ;
2016-10-05 18:29:30 +02:00
}
else {
2018-06-08 21:42:42 +02:00
echo " <option value=' " . escape ( $row ) . " '> " . escape ( $row ) . " </option> \n " ;
2016-10-05 18:29:30 +02:00
}
$previous_category = $category ;
$x ++ ;
}
echo " </select> \n " ;
echo " <br /> \n " ;
echo " " . $text [ 'description-time_zone' ] . " <br /> \n " ;
echo " </td> \n " ;
echo " </tr> \n " ;
if ( $_SESSION [ 'user_status_display' ] != " false " ) {
echo " <tr> \n " ;
echo " <td width='20%' class= \" vncell \" valign='top'> \n " ;
echo " " . $text [ 'label-status' ] . " \n " ;
echo " </td> \n " ;
echo " <td class= \" vtable \" > \n " ;
2018-06-13 09:03:34 +02:00
$cmd = " ' " . PROJECT_PATH . " /app/calls_active/v_calls_exec.php?cmd=callcenter_config+agent+set+status+ " . escape ( $username ) . " @ " . $_SESSION [ 'domains' ][ $domain_uuid ][ 'domain_name' ] . " +'+this.value " ;
2016-10-05 18:29:30 +02:00
echo " <select id='user_status' name='user_status' class='formfld' style='' onchange= \" send_cmd( $cmd ); \" > \n " ;
echo " <option value=''></option> \n " ;
echo " <option value='Available' " . (( $user_status == " Available " ) ? " selected='selected' " : null ) . " > " . $text [ 'option-available' ] . " </option> \n " ;
echo " <option value='Available (On Demand)' " . (( $user_status == " Available (On Demand) " ) ? " selected='selected' " : null ) . " > " . $text [ 'option-available_on_demand' ] . " </option> \n " ;
echo " <option value='Logged Out' " . (( $user_status == " Logged Out " ) ? " selected='selected' " : null ) . " > " . $text [ 'option-logged_out' ] . " </option> \n " ;
echo " <option value='On Break' " . (( $user_status == " On Break " ) ? " selected='selected' " : null ) . " > " . $text [ 'option-on_break' ] . " </option> \n " ;
echo " <option value='Do Not Disturb' " . (( $user_status == " Do Not Disturb " ) ? " selected='selected' " : null ) . " > " . $text [ 'option-do_not_disturb' ] . " </option> \n " ;
echo " </select> \n " ;
echo " <br /> \n " ;
echo " " . $text [ 'description-status' ] . " <br /> \n " ;
echo " </td> \n " ;
echo " </tr> \n " ;
}
if ( $action == 'edit' && permission_exists ( " user_edit " )) {
echo " <tr> " ;
echo " <td class='vncell' valign='top'> " . $text [ 'label-contact' ] . " </td> " ;
echo " <td class='vtable'> \n " ;
2019-03-07 04:50:17 +01:00
$sql = " select " ;
$sql .= " c.contact_uuid, " ;
$sql .= " c.contact_organization, " ;
$sql .= " c.contact_name_given, " ;
$sql .= " c.contact_name_family, " ;
$sql .= " c.contact_nickname " ;
$sql .= " from " ;
$sql .= " v_contacts as c " ;
$sql .= " where " ;
2019-06-09 04:08:29 +02:00
$sql .= " c.domain_uuid = :domain_uuid " ;
2019-03-07 04:50:17 +01:00
$sql .= " and not exists ( " ;
$sql .= " select " ;
$sql .= " contact_uuid " ;
$sql .= " from " ;
$sql .= " v_users as u " ;
$sql .= " where " ;
2019-06-09 04:08:29 +02:00
$sql .= " u.domain_uuid = :domain_uuid " ;
2019-03-07 04:50:17 +01:00
if ( is_uuid ( $contact_uuid )) { //don't exclude currently assigned contact
2019-06-09 04:08:29 +02:00
$sql .= " and u.contact_uuid <> :contact_uuid " ;
$parameters [ 'contact_uuid' ] = $contact_uuid ;
2019-03-07 04:50:17 +01:00
}
$sql .= " and u.contact_uuid = c.contact_uuid " ;
2019-03-07 03:54:12 +01:00
$sql .= " ) " ;
2019-03-07 04:50:17 +01:00
$sql .= " order by " ;
$sql .= " lower(c.contact_organization) asc, " ;
$sql .= " lower(c.contact_name_family) asc, " ;
$sql .= " lower(c.contact_name_given) asc, " ;
$sql .= " lower(c.contact_nickname) asc " ;
2019-06-09 04:08:29 +02:00
$parameters [ 'domain_uuid' ] = $_SESSION [ 'domain_uuid' ];
$database = new database ;
$contacts = $database -> select ( $sql , $parameters , 'all' );
unset ( $parameters );
2016-10-05 18:29:30 +02:00
echo " <select name= \" contact_uuid \" id= \" contact_uuid \" class= \" formfld \" > \n " ;
echo " <option value= \" \" ></option> \n " ;
2019-06-09 04:08:29 +02:00
foreach ( $contacts as $row ) {
2018-07-17 06:32:08 +02:00
$contact_name = array ();
if ( $row [ 'contact_organization' ] != '' ) { $contact_name [] = $row [ 'contact_organization' ]; }
if ( $row [ 'contact_name_family' ] != '' ) { $contact_name [] = $row [ 'contact_name_family' ]; }
if ( $row [ 'contact_name_given' ] != '' ) { $contact_name [] = $row [ 'contact_name_given' ]; }
if ( $row [ 'contact_name_family' ] == '' && $row [ 'contact_name_family' ] == '' && $row [ 'contact_nickname' ] != '' ) { $contact_name [] = $row [ 'contact_nickname' ]; }
echo " <option value=' " . escape ( $row [ 'contact_uuid' ]) . " ' " . (( $row [ 'contact_uuid' ] == $contact_uuid ) ? " selected='selected' " : null ) . " > " . escape ( implode ( ', ' , $contact_name )) . " </option> \n " ;
2016-10-05 18:29:30 +02:00
}
2019-06-09 04:08:29 +02:00
unset ( $sql , $row_count );
2016-10-05 18:29:30 +02:00
echo " </select> \n " ;
echo " <br /> \n " ;
echo $text [ 'description-contact' ] . " \n " ;
if ( strlen ( $contact_uuid ) > 0 ) {
2019-08-24 05:38:17 +02:00
echo " <a href= \" " . PROJECT_PATH . " /app/contacts/contact_edit.php?id= " . urlencode ( $contact_uuid ) . " \" > " . $text [ 'description-contact_view' ] . " </a> \n " ;
2016-10-05 18:29:30 +02:00
}
echo " </td> " ;
echo " </tr> " ;
}
else if ( $action == 'add' && permission_exists ( " user_add " )) {
echo " <tr> " ;
echo " <td class='vncell'> " . $text [ 'label-first_name' ] . " </td> " ;
2018-06-08 21:42:42 +02:00
echo " <td class='vtable'><input type='text' class='formfld' name='contact_name_given' value=' " . escape ( $contact_name_given ) . " '></td> " ;
2016-10-05 18:29:30 +02:00
echo " </tr> " ;
echo " <tr> " ;
echo " <td class='vncell'> " . $text [ 'label-last_name' ] . " </td> " ;
2018-06-08 21:42:42 +02:00
echo " <td class='vtable'><input type='text' class='formfld' name='contact_name_family' value=' " . escape ( $contact_name_family ) . " '></td> " ;
2016-10-05 18:29:30 +02:00
echo " </tr> " ;
echo " <tr> " ;
2019-06-10 21:15:04 +02:00
echo " <td class='vncell'> " . $text [ 'label-organization' ] . " </td> " ;
2018-06-08 21:42:42 +02:00
echo " <td class='vtable'><input type='text' class='formfld' name='contact_organization' value=' " . escape ( $contact_organization ) . " '></td> " ;
2016-10-05 18:29:30 +02:00
echo " </tr> " ;
}
2019-01-29 23:45:38 +01:00
if ( permission_exists ( " user_groups " )) {
2016-10-05 18:29:30 +02:00
echo " <tr> " ;
2019-01-29 23:45:38 +01:00
echo " <td class='vncellreq' valign='top'> " . $text [ 'label-groups' ] . " </td> " ;
2016-10-05 18:29:30 +02:00
echo " <td class='vtable'> " ;
$sql = " select " ;
2019-02-09 16:10:21 +01:00
$sql .= " ug.*, g.domain_uuid as group_domain_uuid " ;
2016-10-05 18:29:30 +02:00
$sql .= " from " ;
2019-02-09 16:10:21 +01:00
$sql .= " v_user_groups as ug, " ;
2016-10-05 18:29:30 +02:00
$sql .= " v_groups as g " ;
$sql .= " where " ;
2019-02-09 16:10:21 +01:00
$sql .= " ug.group_uuid = g.group_uuid " ;
2016-10-05 18:29:30 +02:00
$sql .= " and ( " ;
$sql .= " g.domain_uuid = :domain_uuid " ;
$sql .= " or g.domain_uuid is null " ;
$sql .= " ) " ;
2019-02-09 16:10:21 +01:00
$sql .= " and ug.domain_uuid = :domain_uuid " ;
$sql .= " and ug.user_uuid = :user_uuid " ;
2016-10-05 18:29:30 +02:00
$sql .= " order by " ;
$sql .= " g.domain_uuid desc, " ;
$sql .= " g.group_name asc " ;
2019-06-09 04:08:29 +02:00
$parameters [ 'domain_uuid' ] = $_SESSION [ 'domain_uuid' ];
$parameters [ 'user_uuid' ] = $user_uuid ;
$database = new database ;
$user_groups = $database -> select ( $sql , $parameters , 'all' );
if ( is_array ( $user_groups )) {
2016-10-05 18:29:30 +02:00
echo " <table cellpadding='0' cellspacing='0' border='0'> \n " ;
2019-06-09 04:08:29 +02:00
foreach ( $user_groups as $field ) {
2016-10-05 18:29:30 +02:00
if ( strlen ( $field [ 'group_name' ]) > 0 ) {
echo " <tr> \n " ;
echo " <td class='vtable' style='white-space: nowrap; padding-right: 30px;' nowrap='nowrap'> " ;
2018-06-13 09:03:34 +02:00
echo escape ( $field [ 'group_name' ]) . (( $field [ 'group_domain_uuid' ] != '' ) ? " @ " . $_SESSION [ 'domains' ][ $field [ 'group_domain_uuid' ]][ 'domain_name' ] : null );
2016-10-05 18:29:30 +02:00
echo " </td> \n " ;
2019-02-10 18:16:56 +01:00
if ( permission_exists ( 'group_member_delete' ) || if_group ( " superadmin " )) {
echo " <td class='list_control_icons' style='width: 25px;'> \n " ;
2019-08-24 05:38:17 +02:00
echo " <a href='user_edit.php?id= " . urlencode ( $user_uuid ) . " &domain_uuid= " . urlencode ( $domain_uuid ) . " &group_uuid= " . urlencode ( $field [ 'group_uuid' ]) . " &a=delete' alt=' " . $text [ 'button-delete' ] . " ' onclick= \" return confirm(' " . $text [ 'confirm-delete' ] . " ') \" > " . $v_link_label_delete . " </a> \n " ;
2019-02-10 18:16:56 +01:00
echo " </td> \n " ;
2016-10-05 18:29:30 +02:00
}
echo " </tr> \n " ;
2019-06-09 04:08:29 +02:00
if ( is_uuid ( $field [ 'group_uuid' ])) {
$assigned_groups [] = $field [ 'group_uuid' ];
}
2016-10-05 18:29:30 +02:00
}
}
echo " </table> \n " ;
}
2019-07-19 23:05:18 +02:00
unset ( $sql , $parameters , $user_groups , $field );
2016-10-05 18:29:30 +02:00
$sql = " select * from v_groups " ;
2019-06-09 04:08:29 +02:00
$sql .= " where (domain_uuid = :domain_uuid or domain_uuid is null) " ;
2019-10-15 04:53:51 +02:00
if ( is_array ( $assigned_groups ) && sizeof ( $assigned_groups ) > 0 ) {
2016-10-05 18:29:30 +02:00
$sql .= " and group_uuid not in (' " . implode ( " ',' " , $assigned_groups ) . " ') " ;
}
$sql .= " order by domain_uuid desc, group_name asc " ;
2019-06-09 04:08:29 +02:00
$parameters [ 'domain_uuid' ] = $_SESSION [ 'domain_uuid' ];
$database = new database ;
$groups = $database -> select ( $sql , $parameters , 'all' );
2018-11-08 08:58:16 +01:00
if ( is_array ( $groups )) {
2016-10-05 18:29:30 +02:00
if ( isset ( $assigned_groups )) { echo " <br /> \n " ; }
2019-04-11 03:35:34 +02:00
echo " <select name='group_uuid_name' class='formfld' style='width: auto; margin-right: 3px;' " . ( $action == 'add' ? " required='required' " : null ) . " > \n " ;
2016-10-05 18:29:30 +02:00
echo " <option value=''></option> \n " ;
2018-11-08 08:58:16 +01:00
foreach ( $groups as $field ) {
2019-07-26 09:09:58 +02:00
if ( $field [ 'group_level' ] <= $_SESSION [ 'user' ][ 'group_level' ]) {
if ( ! isset ( $assigned_groups ) || ( isset ( $assigned_groups ) && ! in_array ( $field [ " group_uuid " ], $assigned_groups ))) {
if ( $group_uuid_name == $field [ 'group_uuid' ] . " | " . $field [ 'group_name' ]) { $selected = " selected='selected' " ; } else { $selected = '' ; }
echo " <option value=' " . $field [ 'group_uuid' ] . " | " . $field [ 'group_name' ] . " ' $selected > " . $field [ 'group_name' ] . (( $field [ 'domain_uuid' ] != '' ) ? " @ " . $_SESSION [ 'domains' ][ $field [ 'domain_uuid' ]][ 'domain_name' ] : null ) . " </option> \n " ;
}
2016-10-05 18:29:30 +02:00
}
}
echo " </select> " ;
if ( $action == 'edit' ) {
2018-11-14 07:01:37 +01:00
echo " <input type='submit' class='btn' value= \" " . $text [ 'button-add' ] . " \" > \n " ;
2016-10-05 18:29:30 +02:00
}
}
2019-07-19 23:05:18 +02:00
unset ( $sql , $parameters , $groups , $field );
2016-10-05 18:29:30 +02:00
echo " </td> " ;
echo " </tr> " ;
2019-01-29 23:45:38 +01:00
}
2016-10-05 18:29:30 +02:00
2019-01-29 23:45:38 +01:00
if ( permission_exists ( 'user_domain' )) {
2016-10-05 18:29:30 +02:00
echo " <tr> \n " ;
echo " <td class='vncell' valign='top' align='left' nowrap='nowrap'> \n " ;
2019-01-29 23:45:38 +01:00
echo " " . $text [ 'label-domain' ] . " \n " ;
2016-10-05 18:29:30 +02:00
echo " </td> \n " ;
echo " <td class='vtable' align='left'> \n " ;
2019-01-29 23:45:38 +01:00
echo " <select class='formfld' name='domain_uuid'> \n " ;
foreach ( $_SESSION [ 'domains' ] as $row ) {
echo " <option value=' " . escape ( $row [ 'domain_uuid' ]) . " ' " . (( $row [ 'domain_uuid' ] == $domain_uuid ) ? " selected='selected' " : null ) . " > " . escape ( $row [ 'domain_name' ]) . " </option> \n " ;
}
echo " </select> \n " ;
2016-10-05 18:29:30 +02:00
echo " <br /> \n " ;
2019-01-29 23:45:38 +01:00
echo $text [ 'description-domain_name' ] . " \n " ;
2016-10-05 18:29:30 +02:00
echo " </td> \n " ;
echo " </tr> \n " ;
}
else {
2018-06-08 21:42:42 +02:00
echo " <input type='hidden' name='domain_uuid' value=' " . escape ( $domain_uuid ) . " '> " ;
2016-10-05 18:29:30 +02:00
}
2019-01-29 23:45:38 +01:00
if ( permission_exists ( 'api_key' )) {
echo " <tr> " ;
echo " <td class='vncell' valign='top'> " . $text [ 'label-api_key' ] . " </td> " ;
echo " <td class='vtable'> \n " ;
echo " <input type= \" text \" class='formfld' name= \" api_key \" id='api_key' value= \" " . escape ( $api_key ) . " \" > " ;
echo " <input type='button' class='btn' value=' " . $text [ 'button-generate' ] . " ' onclick= \" getElementById('api_key').value=' " . uuid () . " '; \" > " ;
if ( strlen ( $text [ 'description-api_key' ]) > 0 ) {
echo " <br /> " . $text [ 'description-api_key' ] . " <br /> \n " ;
}
echo " </td> " ;
echo " </tr> " ;
}
if ( permission_exists ( 'message_view' )) {
echo " <tr> " ;
echo " <td class='vncell' valign='top'> " . $text [ 'label-message_key' ] . " </td> " ;
echo " <td class='vtable'> \n " ;
2019-03-08 22:17:59 +01:00
echo " <input type='text' class='formfld' name='message_key' id='message_key' value= \" " . escape ( $user_settings [ " message " ][ " key " ][ " text " ]) . " \" > " ;
2019-01-29 23:45:38 +01:00
echo " <input type='button' class='btn' value=' " . $text [ 'button-generate' ] . " ' onclick= \" getElementById('message_key').value=' " . uuid () . " '; \" > " ;
if ( strlen ( $text [ 'description-message_key' ]) > 0 ) {
echo " <br /> " . $text [ 'description-message_key' ] . " <br /> \n " ;
}
echo " </td> " ;
echo " </tr> " ;
}
2019-03-15 21:17:41 +01:00
echo " <tr " . ( $user_uuid == $_SESSION [ 'user_uuid' ] ? " style='display: none;' " : null ) . " > \n " ;
echo " <td class='vncell' valign='top' align='left' nowrap='nowrap'> \n " ;
echo " " . $text [ 'label-enabled' ] . " \n " ;
echo " </td> \n " ;
echo " <td class='vtable' align='left'> \n " ;
echo " <select class='formfld' name='user_enabled'> \n " ;
echo " <option value='true'> " . $text [ 'option-true' ] . " </option> \n " ;
echo " <option value='false' " . (( $user_enabled != " true " ) ? " selected='selected' " : null ) . " > " . $text [ 'option-false' ] . " </option> \n " ;
echo " </select> \n " ;
echo " <br /> \n " ;
echo $text [ 'description-enabled' ] . " \n " ;
echo " </td> \n " ;
echo " </tr> \n " ;
2019-01-29 23:45:38 +01:00
2016-10-05 18:29:30 +02:00
echo " <tr> " ;
2019-03-08 22:17:59 +01:00
echo " <td colspan='2' align='right' style='white-space: nowrap;'> " ;
2016-10-05 18:29:30 +02:00
if ( $action == 'edit' ) {
2018-06-08 21:42:42 +02:00
echo " <input type='hidden' name='id' value= \" " . escape ( $user_uuid ) . " \" > " ;
2016-10-05 18:29:30 +02:00
if ( permission_exists ( " user_edit " )) {
2019-09-19 16:14:14 +02:00
echo " <input type='hidden' name='username_old' value= \" " . escape ( $username ) . " \" > " ;
2016-10-05 18:29:30 +02:00
}
}
2019-09-19 16:14:14 +02:00
echo " <input type='hidden' name=' " . $token [ 'name' ] . " ' value=' " . $token [ 'hash' ] . " '> \n " ;
2016-10-05 18:29:30 +02:00
echo " <br> " ;
2019-03-08 22:17:59 +01:00
if ( $unsaved ) {
2019-08-21 03:53:21 +02:00
echo " <span style='color: #b00;'> " . $text [ 'message-unsaved_changes' ] . " <i class='fas fa-exclamation-triangle' style='margin-right: 15px;'></i></span> " ;
2019-03-08 22:17:59 +01:00
}
2018-11-08 08:58:16 +01:00
echo " <input type='submit' class='btn' value=' " . $text [ 'button-save' ] . " '> " ;
2016-10-05 18:29:30 +02:00
echo " </td> " ;
echo " </tr> " ;
echo " </table> " ;
echo " <br><br> " ;
echo " </form> " ;
if ( permission_exists ( " user_edit " ) && permission_exists ( 'user_setting_view' ) && $action == 'edit' ) {
2019-09-11 03:23:14 +02:00
require $_SERVER [ " DOCUMENT_ROOT " ] . PROJECT_PATH . " /core/user_settings/user_settings.php " ;
2016-10-05 18:29:30 +02:00
}
//include the footer
require_once " resources/footer.php " ;
2019-09-11 10:34:25 +02:00
?>