View Issue Details
| ID | Project | Category | View Status | Date Submitted | Last Update |
|---|---|---|---|---|---|
| 72 | PHPOF2 | Default | public | 21 Jul 2008 10:32 | 18 Sep 2008 16:44 |
| Reporter | mrosenquist | Assigned To | timj | ||
| Priority | normal | Severity | minor | Reproducibility | have not tried |
| Status | closed | Resolution | fixed | ||
| Target Version | 0.10.1 | Fixed in Version | 0.10.1 | ||
| Summary | 72: Use of Audit drivers could cause the creation of Two mysqli connections | ||||
| Description | Currently a instantiated AuditDriver Object needs to be passed in to DB::factory() in the options. #Example realworld objlib config: #// --- The main database connection #require_once 'PHPOF2/DB.php'; #require_once 'PHPOF2/Audit/GenericDb.php'; # #// Let's store the audit data in the same database as the main app data #$dsn1 = Objlib::get(Objlib::TYPE_CONFIG)->global->dsn1; # #$db_options = array( # 'audit_driver' => new PHPOF2_Audit_GenericDb($dsn1) #); # #$options = array( # //Moved to options # Objlib::OPTION_METHOD_PARAMS => array($dsn1, $db_options), # Objlib::OPTION_IS_DEFAULT => true #); #Objlib::setAutoLoad(Objlib::TYPE_DB, 'db1', array('PHPOF2_DB','factory'), #$options); It would be helpful to pass-in just a String of the class to use new $audit_class($db, $options['audit_options']); | ||||
| Tags | No tags attached. | ||||
| Attached Files | Patch_GenericDb.php.patch (482 bytes)
--- GenericDb.php.old 2008-07-21 11:05:33.000000000 +0100
+++ GenericDb.php 2008-07-21 11:05:44.000000000 +0100
@@ -41,7 +41,7 @@
public function __construct(&$dsn, $options = array())
{
if (is_object($dsn)) {
- if ($dsn instanceof MDB2) {
+ if ($dsn instanceof MDB2 || $dsn instanceof MDB2_Driver_Common) {
$this->_db = &$dsn;
} else {
throw new Exception('PHPOF2_Audit_GenericDb was passed an object which was not an MDB2 object in the "dsn" parameter');
DB.php.patch (1,470 bytes)
--- DB.php.old 2008-07-21 10:35:14.000000000 +0100
+++ DB.php 2008-07-21 11:03:38.000000000 +0100
@@ -41,7 +41,7 @@
{
// Options that are specific to PHPOF2_DB and are not to be passed to MDB2
// (MDB2 throws errors if it gets options it doesn't know about)
- $private_option_list = array('audit_driver');
+ $private_option_list = array('audit_driver', 'audit_driver_options');
$private_options = array();
if (is_array($options)) {
foreach ($options as $key => $val) {
@@ -70,11 +70,22 @@
}
// Enable audit driver if required
- if (isset($private_options['audit_driver'])) {
- if (!$private_options['audit_driver'] instanceof PHPOF2_Audit_Interface) {
+ if (isset($private_options['audit_driver'])) {
+ // If the driver is a string try and load the class
+ if (is_string($private_options['audit_driver'])) {
+ $driver = $private_options['audit_driver'];
+ if (isset($private_options['audit_driver_options'])) {
+ $mdb2->phpof2_auditor = new $driver($mdb2, $private_options['audit_driver_options']);
+ } else {
+ $mdb2->phpof2_auditor = new $driver($mdb2);
+ }
+ } else {
+ $mdb2->phpof2_auditor = $private_options['audit_driver'];
+ }
+
+ if (!$mdb2->phpof2_auditor instanceof PHPOF2_Audit_Interface) {
throw new Exception("Audit driver passed to PHPOF2_DB is not a PHPOF2_Audit_Interface object");
}
- $mdb2->phpof2_auditor = $private_options['audit_driver'];
}
return $mdb2;
}
Audited.php.patch (311 bytes)
--- DBRow/Audited.php.old 2008-07-21 15:16:12.000000000 +0100
+++ DBRow/Audited.php 2008-07-21 15:17:15.000000000 +0100
@@ -83,6 +83,8 @@
{
if ($this->skip_audit) return;
+ if (!isset($this->db->phpof2_auditor)) return;
+
$changes = $this->getChanges();
if ($this->audit_owner === null) {
Audit_README.txt.patch (713 bytes)
--- README.txt.old 2008-07-21 15:22:04.000000000 +0100
+++ README.txt 2008-07-21 17:14:55.000000000 +0100
@@ -51,8 +51,22 @@
$db_options = array('audit_driver' => $audit_driver);
$db = PHPOF2_DB::factory($dsn, $db_options);
+OR
+
+<?php
+require_once 'PHPOF2/DB.php';
+require_once 'PHPOF2/Audit/GenericDb.php';
+
+// The DSN to the main application database
+$dsn = 'mysqli://foo:password@foohost/somedb';
+
+$db = PHPOF2_DB::factory($dsn, array('audit_driver' => 'PHPOF2_Audit_GenericDb'));
+
class widgets extends PHPOF2_DBTable {
- protected $audit_logging = true;
+ protected $default_row_class = 'widget';
+}
+
+class widget extends PHPOF2_DBRow_Audited {
}
$widgets = new widgets($db, 'widgets');
| ||||
|
|
Added a small fix to audit driver of allow insurances of MDB2_Driver_Common for $dsn |
|
|
Included a patch to added the class loading functionality. #Example of Oblib conf $options = array( //Moved to options Objlib::OPTION_METHOD_PARAMS => array( Objlib::get(Objlib::TYPE_CONFIG)->global->dsn1, array('audit_driver' => 'PHPOF2_Audit_GenericDb') ), Objlib::OPTION_REQUIRED_FILES => array( 'PHPOF2/DB.php', 'PHPOF2/Audit/GenericDb.php' ), Objlib::OPTION_IS_DEFAULT => true ); Objlib::setAutoLoad(Objlib::TYPE_DB, 'db1', array('PHPOF2_DB','factory'), $options); |
|
|
protected $audit_columns_ignore = array(); in DBTable is not uses, It could be moved to the row class now |
|
|
SVN r1141 has the fix to make it possible to use PHPOF2_DBRow_Audited objects even if no audit driver is loaded |
|
|
SVN r1142 has the fix to allow audit drivers to be passed by name instead of instance to PHPOF2_DB::factory() |
|
|
SVN r1143 updates the docs as per the README patch |
|
|
SVN r1144 fixes the problem with passing an MDB2 object direct to PHPOF2_Audit_GenericDb, although I have modified your patch because there was a bug in PHPOF - there is no need to allow MDB2-derived objects through, only those derived from MDB2_Driver_Common. |
| Date Modified | Username | Field | Change |
|---|---|---|---|
| 21 Jul 2008 10:32 | mrosenquist | New Issue | |
| 21 Jul 2008 11:07 | mrosenquist | File Added: Patch_GenericDb.php.patch | |
| 21 Jul 2008 11:08 | mrosenquist | Note Added: 59 | |
| 21 Jul 2008 11:13 | mrosenquist | File Added: DB.php.patch | |
| 21 Jul 2008 11:15 | mrosenquist | Note Added: 60 | |
| 21 Jul 2008 15:19 | mrosenquist | File Added: Audited.php.patch | |
| 21 Jul 2008 17:31 | mrosenquist | Note Added: 61 | |
| 21 Jul 2008 17:32 | mrosenquist | File Added: Audit_README.txt.patch | |
| 23 Jul 2008 21:53 | timj | Note Added: 62 | |
| 23 Jul 2008 21:56 | timj | Note Added: 63 | |
| 23 Jul 2008 21:57 | timj | Note Added: 64 | |
| 23 Jul 2008 21:57 | timj | Status | new => assigned |
| 23 Jul 2008 21:57 | timj | Assigned To | => timj |
| 23 Jul 2008 22:04 | timj | Note Added: 65 | |
| 23 Jul 2008 22:04 | timj | Status | assigned => resolved |
| 23 Jul 2008 22:04 | timj | Fixed in Version | => 0.10.1 |
| 23 Jul 2008 22:04 | timj | Resolution | open => fixed |
| 24 Jul 2008 11:06 | timj | Target Version | => 0.10.1 |
| 18 Sep 2008 16:44 | timj | Status | resolved => closed |