This repository has been archived on 2024-04-08. You can view files and clone it, but cannot push or open issues or pull requests.
khosb/modules/core/service_group.inc.php
2008-11-26 14:50:40 -08:00

268 lines
6.9 KiB
PHP

<?php
/**
* AgileBill - Open Billing Software
*
* This body of work is free software; you can redistribute it and/or
* modify it under the terms of the Open AgileBill License
* License as published at http://www.agileco.com/agilebill/license1-4.txt
*
* For questions, help, comments, discussion, etc., please join the
* Agileco community forums at http://forum.agileco.com/
*
* @link http://www.agileco.com/
* @copyright 2004-2008 Agileco, LLC.
* @license http://www.agileco.com/agilebill/license1-4.txt
* @author Tony Landis <tony@agileco.com>
* @package AgileBill
* @version 1.4.93
*/
class service_group
{
# Set variables
function service_group ( $rs, $groups ) {
$this->rs = $rs;
$this->groups = $groups;
}
###############################################
# Add new groups
###############################################
function s_new()
{
# Loop through each group to add:
for($i=0; $i<count($this->groups); $i++)
{
# Determine the expiry date:
$this->calcExpiry();
# Create the new group
$this->addGroup( $this->groups[$i] );
}
}
###############################################
# Activate groups
###############################################
function s_active()
{
# Loop through each group to add:
for($i=0; $i<count($this->groups); $i++)
{
# Determine the expiry date:
$this->calcExpiry();
# Create the new group
$this->addGroup( $this->groups[$i] );
}
}
###############################################
# Deactivate groups
###############################################
function s_inactive()
{
# Loop through each group to add:
for($i=0; $i<count($this->groups); $i++)
{
# Create the new group
$this->deleteGroup( $this->groups[$i] );
}
}
###############################################
# Delete Groups
###############################################
function s_delete()
{
# Loop through each group to add:
for($i=0; $i<count($this->groups); $i++)
{
# Create the new group
$this->deleteGroup( $this->groups[$i] );
}
}
function s_edit() {
return;
}
########################################################################################################
# MISC METHODS
########################################################################################################
# Add new group to account
function addGroup($id)
{
# Delete any existing groups for this service & account
$db = &DB();
$q = "DELETE FROM ".AGILE_DB_PREFIX."account_group WHERE
account_id = ".$db->qstr($this->rs['account_id'])." AND
group_id = ".$db->qstr($id)." AND
service_id = ".$db->qstr($this->rs['id'])." AND
site_id = ".$db->qstr(DEFAULT_SITE);
$db->Execute($q);
# Create the new group:
$idx = $db->GenID(AGILE_DB_PREFIX . 'account_group_id');
$q = "INSERT INTO ".AGILE_DB_PREFIX."account_group SET
id = ".$db->qstr( $idx ).",
site_id = ".$db->qstr( DEFAULT_SITE ).",
date_orig = ".$db->qstr( time() ).",
date_expire = ".$db->qstr( $this->expire ).",
group_id = ".$db->qstr( $id ).",
account_id = ".$db->qstr( $this->rs['account_id'] ).",
service_id = ".$db->qstr( $this->rs['id'] ).",
active = ".$db->qstr( '1' );
$rs1 = $db->Execute($q);
if ($rs1 === false) {
global $C_debug;
$C_debug->error('service_group.inc.php','addGroup', $db->ErrorMsg());
}
# update session cache
if(defined('SESS_ACCOUNT') && SESS_ACCOUNT == $this->rs['account_id'] && SESS_LOGGED == 1)
{
if(CACHE_SESSIONS == '1') {
$force = true;
$C_auth = new CORE_auth($force);
global $C_auth2;
$C_auth2 = $C_auth;
}
}
elseif (!defined('SESS_ACCOUNT') || SESS_ACCOUNT != $this->rs['account_id'])
{
# delete the users_session_auth so it is reloaded on their next page view:
$q = "SELECT id FROM ".AGILE_DB_PREFIX."session WHERE
account_id = ".$db->qstr($this->rs['account_id'])." AND
site_id = ".$db->qstr(DEFAULT_SITE);
$rss = $db->Execute($q);
while(!$rss->EOF)
{
$q = "DELETE FROM ".AGILE_DB_PREFIX."session_auth_cache WHERE
session_id = ".$db->qstr($rss->fields['id'])." AND
site_id = ".$db->qstr(DEFAULT_SITE);
$db->Execute($q);
$rss->MoveNext();
}
}
# Call the dbmap:
$this->dbmap();
}
# Delete/suspend groups
function deleteGroup($id)
{
# Delete any existing groups for this service & account
$db = &DB();
$q = "DELETE FROM ".AGILE_DB_PREFIX."account_group WHERE
account_id = ".$db->qstr($this->rs['account_id'])." AND
group_id = ".$db->qstr($id)." AND
service_id = ".$db->qstr($this->rs['id'])." AND
site_id = ".$db->qstr(DEFAULT_SITE);
$db->Execute($q);
# update session cache
if(SESS_ACCOUNT == $this->rs['account_id'] && SESS_LOGGED == 1)
{
if(CACHE_SESSIONS == '1') {
$force = true;
$C_auth = new CORE_auth($force);
global $C_auth2;
$C_auth2 = $C_auth;
}
}
elseif (SESS_ACCOUNT != $this->rs['account_id'])
{
# delete the users_session_auth so it is reloaded on their next page view:
$q = "SELECT id FROM ".AGILE_DB_PREFIX."session WHERE
account_id = ".$db->qstr($this->rs['account_id'])." AND
site_id = ".$db->qstr(DEFAULT_SITE);
$rss = $db->Execute($q);
while(!$rss->EOF)
{
$q = "DELETE FROM ".AGILE_DB_PREFIX."session_auth_cache WHERE
session_id = ".$db->qstr($rss->fields['id'])." AND
site_id = ".$db->qstr(DEFAULT_SITE);
$db->Execute($q);
$rss->MoveNext();
}
}
# Call the dbmap:
$this->dbmap();
}
# Calculate the expiry date for adding/activating groups:
function calcExpiry()
{
if ($this->rs['group_type'] == 0) {
$this->expire = $this->rs['date_orig'] + (86400*$this->rs['group_days']);
} else {
$this->expire = false;
}
}
# Force new login by deleting user's session/session_auth_cache records:
function forceLogin()
{
$db = &DB();
$q = "SELECT id FROM ".AGILE_DB_PREFIX."session WHERE
account_id = ".$db->qstr( $this->rs['account_id'] )." AND
site_id = ".$db->qstr(DEFAULT_SITE);;
$rs = $db->Execute($q);
if ($rs->RecordCount() > 0)
{
$q = "DELETE FROM ".AGILE_DB_PREFIX."session WHERE
id = ".$db->qstr($rs->fields['id'])." AND
site_id = ".$db->qstr(DEFAULT_SITE);
$db->Execute($q);
$q = "DELETE FROM ".AGILE_DB_PREFIX."sess_auth_cache WHERE
session_id = ".$db->qstr($rs->fields['id'])." AND
site_id = ".$db->qstr(DEFAULT_SITE);
$db->Execute($q);
}
# Call the dbmap:
$this->dbmap();
}
# Call the db_mapping update
function dbmap()
{
global $C_list;
if(!is_object($C_list)) {
include_once(PATH_CORE . 'list.inc.php');
$C_list = new CORE_list;
}
if($C_list->is_installed('db_mapping'))
{
# Update the db_mapping accounts
include_once ( PATH_MODULES . 'db_mapping/db_mapping.inc.php' );
$db_map = new db_mapping;
$db_map->account_group_sync ( $this->rs['account_id'] );
}
}
}
?>