Initial Commit of AgileBill Open Source
This commit is contained in:
468
plugins/db_mapping/Mambo_4_5.php
Normal file
468
plugins/db_mapping/Mambo_4_5.php
Normal file
@@ -0,0 +1,468 @@
|
||||
<?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
|
||||
*/
|
||||
|
||||
################################################################################
|
||||
### Database Map for: Mambo 4.5.x
|
||||
### Last Update: 4-20-2005
|
||||
################################################################################
|
||||
|
||||
class map_MAMBO_4_5
|
||||
{
|
||||
|
||||
############################################################################
|
||||
### Define the settings for this database map
|
||||
############################################################################
|
||||
|
||||
function map_MAMBO_4_5 ()
|
||||
{
|
||||
$this->map =
|
||||
Array (
|
||||
'map' => 'Mambo_4_5',
|
||||
'db_type' => 'mysql',
|
||||
'notes' => 'This is for Mambo 4.5.x',
|
||||
'group_type' => 'db-status', // db, db-status, status, none
|
||||
|
||||
|
||||
### Define the group fields in the target db
|
||||
'group_map' =>
|
||||
Array
|
||||
(
|
||||
'table' => 'core_acl_aro_groups',
|
||||
'id' => 'group_id',
|
||||
'name' => 'name'
|
||||
),
|
||||
|
||||
|
||||
## Should records be deleted?
|
||||
'account_sync_field'=>
|
||||
Array
|
||||
(
|
||||
'delete' => '1'
|
||||
),
|
||||
|
||||
|
||||
# Set the user table & fields
|
||||
'account_map_field' => 'users',
|
||||
'account_status_field' => 'gid',
|
||||
'account_fields' =>
|
||||
Array
|
||||
(
|
||||
'id' =>
|
||||
Array
|
||||
(
|
||||
'map_field' => 'id'
|
||||
),
|
||||
'date_orig' =>
|
||||
Array
|
||||
(
|
||||
'map_field' => false
|
||||
),
|
||||
|
||||
'date_last' =>
|
||||
Array
|
||||
(
|
||||
'map_field' => false
|
||||
),
|
||||
|
||||
'date_expire' =>
|
||||
Array
|
||||
(
|
||||
'map_field' => false
|
||||
),
|
||||
|
||||
'language_id' =>
|
||||
Array
|
||||
(
|
||||
'map_field' => false
|
||||
),
|
||||
|
||||
'country_id' =>
|
||||
Array
|
||||
(
|
||||
'map_field' => false
|
||||
),
|
||||
|
||||
'username' =>
|
||||
Array
|
||||
(
|
||||
'map_field' => 'username'
|
||||
),
|
||||
|
||||
'password' =>
|
||||
Array
|
||||
(
|
||||
'map_field' => 'password'
|
||||
),
|
||||
|
||||
'misc' =>
|
||||
Array
|
||||
(
|
||||
'map_field' => false
|
||||
),
|
||||
|
||||
'first_name' =>
|
||||
Array
|
||||
(
|
||||
'map_field' => 'name',
|
||||
),
|
||||
|
||||
'last_name' =>
|
||||
Array
|
||||
(
|
||||
'map_field' => false,
|
||||
),
|
||||
|
||||
'middle_name' =>
|
||||
Array
|
||||
(
|
||||
'map_field' => false
|
||||
),
|
||||
|
||||
'company' =>
|
||||
Array
|
||||
(
|
||||
'map_field' => false
|
||||
),
|
||||
|
||||
'status' =>
|
||||
Array
|
||||
(
|
||||
'map_field' => false
|
||||
),
|
||||
|
||||
'email' =>
|
||||
Array
|
||||
(
|
||||
'map_field' => 'email'
|
||||
),
|
||||
|
||||
'email_type' =>
|
||||
Array
|
||||
(
|
||||
'map_field' => false
|
||||
)
|
||||
),
|
||||
|
||||
### Define any extra fields for account table in the target db:
|
||||
'extra_field' =>
|
||||
Array
|
||||
(
|
||||
Array
|
||||
(
|
||||
'name' => 'gid',
|
||||
'value' => '29',
|
||||
'add' => 1,
|
||||
'edit' => 0
|
||||
),
|
||||
Array
|
||||
(
|
||||
'name' => 'registerDate',
|
||||
'value' => '2005-04-20 18:54:29',
|
||||
'add' => 1,
|
||||
'edit' => 0
|
||||
)
|
||||
)
|
||||
);
|
||||
|
||||
}
|
||||
|
||||
|
||||
########################################################################
|
||||
### Syncronize all accounts & groups
|
||||
########################################################################
|
||||
|
||||
function sync($id, $file)
|
||||
{
|
||||
$db_map = new db_mapping;
|
||||
$db_map->MAP_sync ($id, $file);
|
||||
}
|
||||
|
||||
########################################################################
|
||||
### Create a new account in the target DB
|
||||
########################################################################
|
||||
|
||||
function account_add($account_id)
|
||||
{
|
||||
$db_map = new db_mapping;
|
||||
$db_map->MAP_account_add ($account_id);
|
||||
|
||||
### Sync the groups for this account:
|
||||
$this->account_group_sync( $account_id );
|
||||
}
|
||||
|
||||
########################################################################
|
||||
### Edit an existing account in the target DB
|
||||
########################################################################
|
||||
|
||||
function account_edit($account_id, $old_username)
|
||||
{
|
||||
$db_map = new db_mapping;
|
||||
$db_map->MAP_account_edit ($account_id, $old_username);
|
||||
|
||||
### Update the groups in the remote db
|
||||
$this->account_group_sync($account_id);
|
||||
}
|
||||
|
||||
########################################################################
|
||||
### Delete an existing account from the target DB
|
||||
########################################################################
|
||||
|
||||
function account_delete($account_id, $username)
|
||||
{
|
||||
$db_map = new db_mapping;
|
||||
$db_map->MAP_account_delete ($account_id, $username);
|
||||
}
|
||||
|
||||
########################################################################
|
||||
### Export / Update all accounts / groups to the target DB
|
||||
########################################################################
|
||||
|
||||
function account_import($remote_account_id)
|
||||
{
|
||||
$db_map = new db_mapping;
|
||||
$db_map->MAP_account_import ($remote_account_id);
|
||||
}
|
||||
|
||||
########################################################################
|
||||
### Create the cookie/session for login sync
|
||||
########################################################################
|
||||
|
||||
function login($account_id)
|
||||
{
|
||||
global $_COOKIE;
|
||||
|
||||
### Get the local account details
|
||||
$db = &DB();
|
||||
$sql= 'SELECT username,email FROM '.AGILE_DB_PREFIX.'account WHERE
|
||||
site_id = '.$db->qstr(DEFAULT_SITE).' AND
|
||||
id = '.$db->qstr($account_id);
|
||||
$result = $db->Execute($sql);
|
||||
$user = $result->fields['username'];
|
||||
|
||||
$dbm = new db_mapping;
|
||||
$db2 = $dbm->DB_connect(false, $this->map['map']);
|
||||
eval ( '@$db_prefix = DB2_PREFIX'. strtoupper($this->map['map']) .';' );
|
||||
|
||||
### Get the remote account_id
|
||||
$sql = "SELECT * FROM " . $db_prefix . 'users WHERE username = ' . $db2->qstr($user);
|
||||
$acct = $db2->Execute($sql);
|
||||
|
||||
### Determine if remote session exists:
|
||||
@$session_id = $_COOKIE['sessioncookie'];
|
||||
$sql = "SELECT * FROM " . $db_prefix . 'session WHERE session_id = ' . $db2->qstr( md5 ($session_id) );
|
||||
$result = $db2->Execute($sql);
|
||||
if ($result === false)
|
||||
{
|
||||
global $C_debug;
|
||||
$C_debug->error('Mambo_4_5.php','account_group_sync:2', $db2->ErrorMsg());
|
||||
return;
|
||||
}
|
||||
|
||||
if($result->RecordCount() == 0)
|
||||
{
|
||||
### New session
|
||||
$session_id = SESS;
|
||||
$sql = "INSERT INTO " . $db_prefix . "session SET
|
||||
time = ". time().",
|
||||
session_id = ". $db2->qstr( md5 ( $session_id ) ). ",
|
||||
guest = 0,
|
||||
userid = " . $acct->fields['id'].",
|
||||
gid = " . $acct->fields['gid'].",
|
||||
usertype = " . $db2->qstr($acct->fields['usertype']).",
|
||||
username = " . $db2->qstr($user);
|
||||
$db2->Execute($sql);
|
||||
} else {
|
||||
### Update session
|
||||
$sql = "UPDATE " . $db_prefix . "session SET
|
||||
time = ". time().",
|
||||
session_id = ". $db2->qstr( md5 ( $session_id ) ). ",
|
||||
guest = 0,
|
||||
userid = " . $acct->fields['id'].",
|
||||
gid = " . $acct->fields['gid'].",
|
||||
usertype = " . $db2->qstr($acct->fields['usertype']).",
|
||||
username = " . $db2->qstr($user) . "
|
||||
WHERE
|
||||
session_id = " . $db2->qstr( md5( $session_id) );
|
||||
$db2->Execute($sql);
|
||||
}
|
||||
|
||||
// set mambo session cookie
|
||||
if(COOKIE_EXPIRE == 0 )
|
||||
$cookie_expire = (time() + 86400*365);
|
||||
else
|
||||
$cookie_expire = (time() + (COOKIE_EXPIRE*60));
|
||||
setcookie( "sessioncookie", $session_id, $cookie_expire, "/" );
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
########################################################################
|
||||
### Delete the cookie/session on account logout
|
||||
########################################################################
|
||||
|
||||
function logout($account_id)
|
||||
{
|
||||
### Get the local account details
|
||||
$db = &DB();
|
||||
$sql= 'SELECT username,email FROM '.AGILE_DB_PREFIX.'account WHERE
|
||||
site_id = '.$db->qstr(DEFAULT_SITE).' AND
|
||||
id = '.$db->qstr($account_id);
|
||||
$result = $db->Execute($sql);
|
||||
$user = $result->fields['username'];
|
||||
|
||||
@$session_id = $_COOKIE['sessioncookie'];
|
||||
if(!empty($session_id)) {
|
||||
$dbm = new db_mapping;
|
||||
$db2 = $dbm->DB_connect(false, $this->map['map']);
|
||||
eval ( '@$db_prefix = DB2_PREFIX'. strtoupper($this->map['map']) .';' );
|
||||
$sql = "UPDATE " . $db_prefix . "session SET
|
||||
guest = 1,
|
||||
userid = '',
|
||||
gid = '',
|
||||
usertype = '',
|
||||
username = ''
|
||||
WHERE
|
||||
session_id = " . $db2->qstr( md5($session_id) ) . "
|
||||
OR
|
||||
username = " . $db2->qstr($user) ;
|
||||
$db2->Execute($sql);
|
||||
$acct = $db2->Execute($sql);
|
||||
}
|
||||
setcookie( "usercookie", "", time() - 1800, "/" );
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
########################################################################
|
||||
### Syncronize the groups for a specific account in the remote DB
|
||||
########################################################################
|
||||
|
||||
function account_group_sync($account_id)
|
||||
{
|
||||
$db_map = new db_mapping;
|
||||
$db_map->MAP_account_group_sync_db_status($account_id);
|
||||
|
||||
|
||||
### Get the local account details
|
||||
$db = &DB();
|
||||
$sql= 'SELECT username,email FROM '.AGILE_DB_PREFIX.'account WHERE
|
||||
site_id = '.$db->qstr(DEFAULT_SITE).' AND
|
||||
id = '.$db->qstr($account_id);
|
||||
$result = $db->Execute($sql);
|
||||
if ($result === false)
|
||||
{
|
||||
global $C_debug;
|
||||
$C_debug->error('Mambo_4_5.php','account_group_sync:1', $db->ErrorMsg());
|
||||
return;
|
||||
}
|
||||
|
||||
$user = $result->fields['username'];
|
||||
$email = $result->fields['email'];
|
||||
|
||||
|
||||
### Get the remote account id, username, and group ID:
|
||||
$dbm = new db_mapping;
|
||||
$db2 = $dbm->DB_connect(false, $this->map['map']);
|
||||
eval ( '@$db_prefix = DB2_PREFIX'. strtoupper($this->map['map']) .';' );
|
||||
$sql = "SELECT id,gid,username FROM " .
|
||||
$db_prefix . "" . $this->map['account_map_field'] . ' WHERE ' .
|
||||
$this->map['account_fields']['username']['map_field'] . " = " .
|
||||
$db2->qstr($user);
|
||||
$result = $db2->Execute($sql);
|
||||
if ($result === false)
|
||||
{
|
||||
global $C_debug;
|
||||
$C_debug->error('Mambo_4_5.php','account_group_sync:2', $db2->ErrorMsg());
|
||||
return;
|
||||
}
|
||||
|
||||
$id = $result->fields['id'];
|
||||
$user = $result->fields['username'];
|
||||
$gid = $result->fields['gid'];
|
||||
|
||||
# Clear old values:
|
||||
$sql = "DELETE FROM " . $db_prefix . "core_acl_aro WHERE value = $id";
|
||||
$result = $db2->Execute($sql);
|
||||
|
||||
# add the core_acl_aro record
|
||||
$sql = "INSERT INTO " . $db_prefix . "core_acl_aro SET
|
||||
section_value = 'users',
|
||||
value = $id,
|
||||
name = ".$db2->qstr($user);
|
||||
$result = $db2->Execute($sql);
|
||||
|
||||
|
||||
# Get the ID just inserted:
|
||||
$sql = "SELECT aro_id FROM " . $db_prefix . "core_acl_aro WHERE value = $id";
|
||||
$result = $db2->Execute($sql);
|
||||
$aro_id = $result->fields['aro_id'];
|
||||
|
||||
$sql = "DELETE FROM " . $db_prefix . "core_acl_groups_aro_map WHERE aro_id = $aro_id";
|
||||
$result = $db2->Execute($sql);
|
||||
|
||||
if($gid > 0 && $aro_id > 0)
|
||||
{
|
||||
# add the core_acl_groups_aro_map record
|
||||
$sql = "INSERT INTO " . $db_prefix . "core_acl_groups_aro_map SET
|
||||
group_id = $gid,
|
||||
aro_id = $aro_id";
|
||||
$result = $db2->Execute($sql);
|
||||
|
||||
# unblock
|
||||
$sql = "UPDATE " . $db_prefix . $this->map['account_map_field'] . "
|
||||
SET block = 0
|
||||
WHERE id = $id";
|
||||
$result = $db2->Execute($sql);
|
||||
}
|
||||
else
|
||||
{
|
||||
/*
|
||||
This member gets access to nothing.
|
||||
|
||||
Mambo doesn't have a group we can grant the users
|
||||
that allows them only public access articles. Lame.
|
||||
|
||||
After studying mambo's group system in depth,
|
||||
it makes no sense how something so complicated (6 tables?) can not
|
||||
be used to control access to the articles?! Wit a CMS system, it is
|
||||
all about the content and if you have groups, you should be able to
|
||||
display/hide content based on the user's group membership.
|
||||
|
||||
However, with mambo, apparently you can set the articles so they can
|
||||
be viewed by a) all users, (b) registered users, (c) Special.
|
||||
|
||||
Since I can find no way to map the users to option (c), and obviously
|
||||
non-paying members will still be registered after their subscription
|
||||
expires, our options are now to delete the user entirely (NO!)
|
||||
or set the user to blocked (lesser of two evils but will cause confusion
|
||||
since mambo will tell the user the login info they submitted is invalid)
|
||||
|
||||
Lets block the user and be done with it... Sigh...
|
||||
*/
|
||||
|
||||
$sql = "UPDATE " . $db_prefix . $this->map['account_map_field'] . "
|
||||
SET block = 1
|
||||
WHERE id = $id";
|
||||
$result = $db2->Execute($sql);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
?>
|
Reference in New Issue
Block a user