コード例 #1
0
function gs_callwaiting_activate($user, $active)
{
    if (!preg_match('/^[a-z0-9\\-_.]+$/', $user)) {
        return new GsError('User must be alphanumeric.');
    }
    $active = !!$active;
    # connect to db
    #
    $db = gs_db_master_connect();
    if (!$db) {
        return new GsError('Could not connect to database.');
    }
    # get user_id
    #
    $user_id = $db->executeGetOne('SELECT `id` FROM `users` WHERE `user`=\'' . $db->escape($user) . '\'');
    if (!$user_id) {
        return new GsError('Unknown user.');
    }
    # (de)activate
    #
    $num = $db->executeGetOne('SELECT COUNT(*) FROM `callwaiting` WHERE `user_id`=' . $user_id);
    if ($num < 1) {
        $ok = $db->execute('INSERT INTO `callwaiting` (`user_id`, `active`) VALUES (' . $user_id . ', 0)');
    } else {
        $ok = true;
    }
    $ok = $ok && $db->execute('UPDATE `callwaiting` SET `active`=' . (int) $active . ' WHERE `user_id`=' . $user_id);
    if (!$ok) {
        return new GsError('Failed to set call waiting.');
    }
    # reload phone config
    #
    //$user_name = $db->executeGetOne( 'SELECT `name` FROM `ast_sipfriends` WHERE `_user_id`='. $user_id );
    //@ exec( 'asterisk -rx \'sip notify snom-reboot '. $user_name .'\'' );
    @gs_prov_phone_checkcfg_by_user($user, false);
    return true;
}
コード例 #2
0
ファイル: gs_user_del.php プロジェクト: hehol/GemeinschaftPBX
function gs_user_del($user, $reload = true)
{
    if (!preg_match('/^[a-z0-9\\-_.]+$/', $user)) {
        return new GsError('User must be alphanumeric.');
    }
    # connect to db
    #
    $db = gs_db_master_connect();
    if (!$db) {
        return new GsError('Could not connect to database.');
    }
    # get user_id, nobody_index and softkey_profile_id
    #
    $rs = $db->execute('SELECT `id`, `nobody_index`, `softkey_profile_id`, `prov_param_profile_id` FROM `users` WHERE `user`=\'' . $db->escape($user) . '\'');
    if (!$rs) {
        return new GsError('DB error.');
    }
    if (!($r = $rs->fetchRow())) {
        return new GsError('Unknown user.');
    }
    $user_id = (int) $r['id'];
    $softkey_profile_id = (int) $r['softkey_profile_id'];
    $prov_profile_id = (int) $r['prov_param_profile_id'];
    /*
    if ($r['nobody_index'] > 0)
    	return new GsError( 'Cannot delete nobody user.' );
    */
    # get host_id
    #
    $host_id = (int) $db->executeGetOne('SELECT `host_id` FROM `users` WHERE `id`=' . $user_id);
    //if (! $host_id)
    //	return new GsError( 'Unknown host.' );
    $host = gs_host_by_id_or_ip($host_id);
    if (isGsError($host) || !is_array($host)) {
        $host = false;
    }
    # get user's sip name
    #
    $ext = $db->executeGetOne('SELECT `name` FROM `ast_sipfriends` WHERE `_user_id`=' . $user_id);
    # reboot phone
    #
    //$user_name = $db->executeGetOne( 'SELECT `name` FROM `ast_sipfriends` WHERE `_user_id`='. $user_id );
    //@ shell_exec( 'asterisk -rx \'sip notify snom-reboot '. $user_name .'\' >>/dev/null' );
    @gs_prov_phone_checkcfg_by_user($user, true);
    #delete user from all groups
    #
    gs_group_members_purge_by_type('user', array($user_id));
    # delete clir settings
    #
    $db->execute('DELETE FROM `clir` WHERE `user_id`=' . $user_id);
    # delete dial log
    #
    $db->execute('DELETE FROM `dial_log` WHERE `user_id`=' . $user_id);
    $db->execute('UPDATE `dial_log` SET `remote_user_id`=NULL WHERE `remote_user_id`=' . $user_id);
    # delete call waiting settings
    #
    $db->execute('DELETE FROM `callwaiting` WHERE `user_id`=' . $user_id);
    # delete call forward settings
    #
    $db->execute('DELETE FROM `callforwards` WHERE `user_id`=' . $user_id);
    # delete anounce files
    #
    $db->execute('DELETE FROM `vm_rec_messages` WHERE `_user_id`=' . $user_id);
    # delete parallel-call definition
    #
    $db->execute('DELETE FROM `cf_parallelcall` WHERE `_user_id`=' . $user_id);
    # delete timerules definition
    #
    $db->execute('DELETE FROM `cf_timerules` WHERE `_user_id`=' . $user_id);
    # delete from pickup groups
    #
    $db->execute('DELETE FROM `pickupgroups_users` WHERE `user_id`=' . $user_id);
    # delete from queue members
    #
    $db->execute('DELETE FROM `ast_queue_members` WHERE `_user_id`=' . $user_id);
    # delete external numbers
    #
    $db->execute('DELETE FROM `users_external_numbers` WHERE `user_id`=' . $user_id);
    # delete info about voicemail messages //FIXME - delete files?
    #
    $db->execute('DELETE FROM `vm_msgs` WHERE `user_id`=' . $user_id);
    # delete mailbox settings
    #
    $db->execute('DELETE FROM `vm` WHERE `user_id`=' . $user_id);
    # delete private phonebook
    #
    $db->execute('DELETE FROM `pb_prv` WHERE `user_id`=' . $user_id);
    # delete mailbox
    #
    $db->execute('DELETE FROM `ast_voicemail` WHERE `_user_id`=' . $user_id);
    # delete callblocking rules
    #
    $db->execute('DELETE FROM `callblocking` WHERE `user_id`=' . $user_id);
    # delete callerids
    #
    $db->execute('DELETE FROM `users_callerids` WHERE `user_id`=' . $user_id);
    # delete sip account
    #
    $db->execute('DELETE FROM `ast_sipfriends` WHERE `_user_id`=' . $user_id);
    # delete BOI permissions
    #
    $db->execute('DELETE FROM `boi_perms` WHERE `user_id`=' . $user_id);
    # delete ringtones
    #
    $db->execute('DELETE FROM `ringtones` WHERE `user_id`=' . $user_id);
    # delete softkeys
    #
    if ($softkey_profile_id > 0) {
        $db->execute('DELETE FROM `softkeys` WHERE `profile_id`=' . $softkey_profile_id);
        $db->execute('DELETE FROM `softkey_profiles` WHERE `id`=' . $softkey_profile_id . ' AND `is_user_profile`=1');
    }
    # delete prov_params
    #
    if ($prov_profile_id > 0) {
        $db->execute('DELETE FROM `prov_params` WHERE `profile_id`=' . $prov_profile_id);
        $db->execute('DELETE FROM `prov_param_profiles` WHERE `id`=' . $prov_profile_id . ' AND `is_group_profile`=0');
    }
    # delete watchlist buddies
    #
    $db->execute('DELETE FROM `user_watchlist` WHERE `user_id`=' . $user_id);
    $db->execute('DELETE FROM `user_watchlist` WHERE `buddy_user_id`=' . $user_id);
    # delete instant messaging
    #
    $db->execute('DELETE FROM `instant_messaging` WHERE `user_id`=' . $user_id);
    # delete monitor data
    #
    $db->execute('DELETE FROM `monitor` WHERE `user_id`=' . $user_id);
    $db->execute('DELETE FROM `monitor_queues` WHERE `user_id`=' . $user_id);
    $db->execute('DELETE FROM `monitor_colors` WHERE `user_id`=' . $user_id);
    # do a clean logout from the current phone
    #
    $db->execute('UPDATE `phones` SET `user_id`=NULL WHERE `user_id`=' . $user_id);
    # delete huntgroup memberships
    #
    $db->execute('DELETE FROM `huntgroups` WHERE `user_id`=' . $user_id);
    # delete drop targets
    #
    $db->execute('DELETE FROM `user_calldrop` WHERE `user_id`=' . $user_id);
    # delete dnd
    #
    $db->execute('DELETE FROM `dnd` WHERE `_user_id`=' . $user_id);
    # delete user
    #
    $db->execute('DELETE FROM `users` WHERE `id`=' . $user_id);
    # astbuttond
    if (GS_BUTTONDAEMON_USE == true) {
        gs_user_remove_ui($ext);
    }
    # reload dialplan (to update hints) and prune realtime peer
    #
    if ($host_id > 0) {
        if (is_array($host) && !$host['is_foreign']) {
            @gs_asterisks_prune_peer($ext, array($host_id));
            if ($reload) {
                @gs_asterisks_reload(array($host_id), true);
            }
        }
    }
    # delete user on foreign host
    #
    if (is_array($host) && $host['is_foreign']) {
        if (trim($ext) != '') {
            include_once GS_DIR . 'inc/boi-soap/boi-api.php';
            $api = gs_host_get_api($host['id']);
            switch ($api) {
                case 'm01':
                case 'm02':
                    $hp_route_prefix = (string) $db->executeGetOne('SELECT `value` FROM `host_params` ' . 'WHERE `host_id`=' . (int) $host['id'] . ' AND `param`=\'route_prefix\'');
                    $sub_ext = subStr($ext, 0, strLen($hp_route_prefix)) === $hp_route_prefix ? subStr($ext, strLen($hp_route_prefix)) : $ext;
                    gs_log(GS_LOG_DEBUG, "Mapping ext. {$ext} to {$sub_ext} for SOAP call");
                    //if (! class_exists('SoapClient')) {
                    if (!extension_loaded('soap')) {
                        return new GsError('Failed to delete user on foreign host (SoapClient not available).');
                    }
                    include_once GS_DIR . 'inc/boi-soap/boi-soap.php';
                    $soap_faultcode = null;
                    $ok = gs_boi_delete_extension($api, $host['host'], $hp_route_prefix, $sub_ext, $soap_faultcode);
                    if (!$ok) {
                        return new GsError('Failed to delete user on foreign host (SOAP error).');
                    }
                    break;
                case '':
                    # host does not provide any API
                    gs_log(GS_LOG_NOTICE, 'Deleting user ' . $user . ' on foreign host ' . $host['host'] . ' without any API');
                    break;
                default:
                    gs_log(GS_LOG_WARNING, 'Failed to delete user ' . $user . ' on foreign host ' . $host['host'] . ' - invalid API "' . $api . '"');
                    return new GsError('Failed to delete user on foreign host (Invalid API).');
            }
        }
    }
    # update fax authentication file if fax enabled
    #
    if (gs_get_conf('GS_FAX_ENABLED')) {
        $ok = gs_hylafax_authfile_sync();
        if (isGsError($ok)) {
            return new GsError($ok->getMsg());
        }
        if (!$ok) {
            return new GsError('Failed to update fax authentication file.');
        }
    }
    return true;
}
コード例 #3
0
			
			# delete unnecessary (inherited) entries
			$DB->execute(
				'DELETE FROM `softkeys` '.
				'WHERE '.
					'`phone_type`=\''. $DB->escape($phone_type) .'\' AND '.
					'`function`=\'\'' );
		}
		unset($save_keys);
		if (! $ok) {
			echo '<div class="errorbox">', __('Fehler beim Speichern') ,'</div>' ,"\n";
		}
	}
	
	if ($action === 'save-and-resync') {
		$ret = gs_prov_phone_checkcfg_by_user( @$_SESSION['sudo_user']['name'], false );
		if (isGsError($ret) || ! $ret) {
			// does not happen
			echo '<div class="errorbox">', __('Fehler beim Aktualisieren des Telefons') ,'</div>' ,"\n";
		}
	}
	
	$action = '';  # view
}
#####################################################################
# save }
#####################################################################

#####################################################################
# delete {
#####################################################################