File indexing completed on 2024-12-22 05:36:50
0001 <?php 0002 /** 0003 * Zend Framework 0004 * 0005 * LICENSE 0006 * 0007 * This source file is subject to the new BSD license that is bundled 0008 * with this package in the file LICENSE.txt. 0009 * It is also available through the world-wide-web at this URL: 0010 * http://framework.zend.com/license/new-bsd 0011 * If you did not receive a copy of the license and are unable to 0012 * obtain it through the world-wide-web, please send an email 0013 * to license@zend.com so we can send you a copy immediately. 0014 * 0015 * @category Zend 0016 * @package Zend_Log 0017 * @subpackage Writer 0018 * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com) 0019 * @license http://framework.zend.com/license/new-bsd New BSD License 0020 * @version $Id$ 0021 */ 0022 0023 /** Zend_Log_Writer_Abstract */ 0024 // require_once 'Zend/Log/Writer/Abstract.php'; 0025 0026 /** 0027 * @category Zend 0028 * @package Zend_Log 0029 * @subpackage Writer 0030 * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com) 0031 * @license http://framework.zend.com/license/new-bsd New BSD License 0032 * @version $Id$ 0033 */ 0034 class Zend_Log_Writer_Db extends Zend_Log_Writer_Abstract 0035 { 0036 /** 0037 * Database adapter instance 0038 * 0039 * @var Zend_Db_Adapter 0040 */ 0041 protected $_db; 0042 0043 /** 0044 * Name of the log table in the database 0045 * 0046 * @var string 0047 */ 0048 protected $_table; 0049 0050 /** 0051 * Relates database columns names to log data field keys. 0052 * 0053 * @var null|array 0054 */ 0055 protected $_columnMap; 0056 0057 /** 0058 * Class constructor 0059 * 0060 * @param Zend_Db_Adapter $db Database adapter instance 0061 * @param string $table Log table in database 0062 * @param array $columnMap 0063 * @return void 0064 */ 0065 public function __construct($db, $table, $columnMap = null) 0066 { 0067 $this->_db = $db; 0068 $this->_table = $table; 0069 $this->_columnMap = $columnMap; 0070 } 0071 0072 /** 0073 * Create a new instance of Zend_Log_Writer_Db 0074 * 0075 * @param array|Zend_Config $config 0076 * @return Zend_Log_Writer_Db 0077 */ 0078 static public function factory($config) 0079 { 0080 $config = self::_parseConfig($config); 0081 $config = array_merge(array( 0082 'db' => null, 0083 'table' => null, 0084 'columnMap' => null, 0085 ), $config); 0086 0087 if (isset($config['columnmap'])) { 0088 $config['columnMap'] = $config['columnmap']; 0089 } 0090 0091 return new self( 0092 $config['db'], 0093 $config['table'], 0094 $config['columnMap'] 0095 ); 0096 } 0097 0098 /** 0099 * Formatting is not possible on this writer 0100 * 0101 * @return void 0102 * @throws Zend_Log_Exception 0103 */ 0104 public function setFormatter(Zend_Log_Formatter_Interface $formatter) 0105 { 0106 // require_once 'Zend/Log/Exception.php'; 0107 throw new Zend_Log_Exception(get_class($this) . ' does not support formatting'); 0108 } 0109 0110 /** 0111 * Remove reference to database adapter 0112 * 0113 * @return void 0114 */ 0115 public function shutdown() 0116 { 0117 $this->_db = null; 0118 } 0119 0120 /** 0121 * Write a message to the log. 0122 * 0123 * @param array $event event data 0124 * @return void 0125 * @throws Zend_Log_Exception 0126 */ 0127 protected function _write($event) 0128 { 0129 if ($this->_db === null) { 0130 // require_once 'Zend/Log/Exception.php'; 0131 throw new Zend_Log_Exception('Database adapter is null'); 0132 } 0133 0134 if ($this->_columnMap === null) { 0135 $dataToInsert = $event; 0136 } else { 0137 $dataToInsert = array(); 0138 foreach ($this->_columnMap as $columnName => $fieldKey) { 0139 if (isset($event[$fieldKey])) { 0140 $dataToInsert[$columnName] = $event[$fieldKey]; 0141 } 0142 } 0143 } 0144 0145 $this->_db->insert($this->_table, $dataToInsert); 0146 } 0147 }