Index: branches/5.2.x/core/kernel/db/db_event_handler.php
===================================================================
diff -u -r14092 -r14095
--- branches/5.2.x/core/kernel/db/db_event_handler.php (.../db_event_handler.php) (revision 14092)
+++ branches/5.2.x/core/kernel/db/db_event_handler.php (.../db_event_handler.php) (revision 14095)
@@ -1,6 +1,6 @@
getPrefixSpecial(true) instead of
- * $event->Prefix_Special as usual. This is due PHP
+ * $event->getPrefixSpecial() as usual. This is due PHP
* is converting "." symbols in variable names during
* submit info "_". $event->getPrefixSpecial optional
* 1st parameter returns correct corrent Prefix_Special
@@ -32,7 +32,7 @@
*
* 2. When using $this->Application-LinkVar on variables submitted
* from form which contain $Prefix_Special then note 1st item. Example:
- * LinkVar($event->getPrefixSpecial(true).'_varname',$event->Prefix_Special.'_varname')
+ * LinkVar($event->getPrefixSpecial(true).'_varname',$event->getPrefixSpecial().'_varname')
*
*/
@@ -45,26 +45,6 @@
class kDBEventHandler extends kEventHandler {
/**
- * Description
- *
- * @var kDBConnection
- * @access public
- */
- var $Conn;
-
- /**
- * Adds ability to address db connection
- *
- * @return kDBEventHandler
- * @access public
- */
- function kDBEventHandler()
- {
- parent::kBase();
- $this->Conn =& $this->Application->GetADODBConnection();
- }
-
- /**
* Checks permissions of user
*
* @param kEvent $event
@@ -321,10 +301,11 @@
// this smells... needs to be refactored
$first_id = getArrayValue($ret,0);
if (($first_id === false) && ($event->getEventParam('raise_warnings') == 1)) {
- if ($this->Application->isDebugMode()) {
+ if ( $this->Application->isDebugMode() ) {
$this->Application->Debugger->appendTrace();
}
- trigger_error('Requested ID for prefix '.$event->getPrefixSpecial().' not passed',E_USER_NOTICE);
+
+ trigger_error('Requested ID for prefix ' . $event->getPrefixSpecial() . ' not passed', E_USER_NOTICE);
}
$this->Application->SetVar($event->getPrefixSpecial() . '_id', $first_id);
@@ -405,12 +386,6 @@
$this->Application->SetVar($prefix_special.'_id', ''); // $event->getPrefixSpecial(true).'_id' too may be
}
- /*function SetSaveEvent(&$event)
- {
- $this->Application->SetVar($event->Prefix_Special.'_SaveEvent','OnUpdate');
- $this->Application->LinkVar($event->Prefix_Special.'_SaveEvent');
- }*/
-
/**
* Common builder part for Item & List
*
@@ -434,14 +409,10 @@
$object->SwitchToTemp();
}
- // This strange constuction creates hidden field for storing event name in form submit
- // It pass SaveEvent to next screen, otherwise after unsuccsefull create it will try to update rather than create
- $current_event = $this->Application->GetVar($event->Prefix_Special.'_event');
-// $this->Application->setEvent($event->Prefix_Special, $current_event);
- $this->Application->setEvent($event->Prefix_Special, '');
+ $this->Application->setEvent($event->getPrefixSpecial(), '');
$save_event = $this->UseTempTables($event) && $this->Application->GetTopmostPrefix($event->Prefix) == $event->Prefix ? 'OnSave' : 'OnUpdate';
- $this->Application->SetVar($event->Prefix_Special.'_SaveEvent',$save_event);
+ $this->Application->SetVar($event->getPrefixSpecial().'_SaveEvent',$save_event);
}
/**
@@ -482,9 +453,10 @@
return ;
}
- if ($this->Application->isDebugMode()) {
+ if ( $this->Application->isDebugMode() ) {
$this->Application->Debugger->appendTrace();
}
+
trigger_error('ItemLoad Permission Failed for prefix [' . $event->getPrefixSpecial() . '] in checkItemStatus, leading to "404 Not Found"', E_USER_NOTICE);
header('HTTP/1.0 404 Not Found');
@@ -551,7 +523,7 @@
if (!$perm_status) {
// when no permission to view item -> redirect to no pemrission template
- if ($this->Application->isDebugMode()) {
+ if ( $this->Application->isDebugMode() ) {
$this->Application->Debugger->appendTrace();
}
@@ -575,9 +547,9 @@
}
$actions =& $this->Application->recallObject('kActions');
- $actions->Set($event->Prefix_Special.'_GoTab', '');
+ $actions->Set($event->getPrefixSpecial().'_GoTab', '');
- $actions->Set($event->Prefix_Special.'_GoId', '');
+ $actions->Set($event->getPrefixSpecial().'_GoId', '');
}
/**
@@ -638,7 +610,7 @@
if ($object->Load($id)) {
$actions =& $this->Application->recallObject('kActions');
- $actions->Set($event->Prefix_Special.'_id', $object->GetID() );
+ $actions->Set($event->getPrefixSpecial().'_id', $object->GetID() );
}
else {
$object->setID($id);
@@ -658,12 +630,12 @@
$this->dbBuild($object,$event);
- if (!$object->mainList && $event->getEventParam('main_list')) {
+ if (!$object->isMainList() && $event->getEventParam('main_list')) {
// once list is set to main, then even "requery" parameter can't remove that
/*$passed = $this->Application->GetVar('passed');
$this->Application->SetVar('passed', $passed . ',' . $event->Prefix);*/
- $object->mainList = true;
+ $object->becameMain();
}
$object->setGridName( $event->getEventParam('grid') );
@@ -672,8 +644,7 @@
$sql = $this->Application->ReplaceLanguageTags($sql);
$object->setSelectSQL($sql);
- $object->Counted = false; // when requery="1" should re-count records too!
- $object->ClearOrderFields(); // prevents duplicate order fields, when using requery="1"
+ $object->reset();
$object->linkToParent( $this->getMainSpecial($event) );
@@ -682,14 +653,11 @@
$this->SetPagination($event);
$this->SetSorting($event);
-// $object->CalculateTotals(); // Now called in getTotals to avoid extra query
-
$actions =& $this->Application->recallObject('kActions');
- $actions->Set('remove_specials['.$event->Prefix_Special.']', '0');
- $actions->Set($event->Prefix_Special.'_GoTab', '');
+ $actions->Set('remove_specials['.$event->getPrefixSpecial().']', '0');
+ $actions->Set($event->getPrefixSpecial().'_GoTab', '');
}
-
/**
* Get's special of main item for linking with subitem
*
@@ -831,7 +799,7 @@
$object->SetPerPage( $this->getPerPage($event) );
// main lists on Front-End have special get parameter for page
- $page = $object->mainList ? $this->Application->GetVar('page') : false;
+ $page = $object->isMainList() ? $this->Application->GetVar('page') : false;
if (!$page) {
// page is given in "env" variable for given prefix
@@ -844,7 +812,7 @@
$page = $this->Application->GetVar($event->getPrefixSpecial(true) . '_Page');
}
- if (!$object->mainList) {
+ if (!$object->isMainList()) {
// main lists doesn't use session for page storing
$this->Application->StoreVarDefault($event->getPrefixSpecial() . '_Page', 1, true); // true for optional
@@ -906,7 +874,7 @@
return $per_page;
}
- if (!$per_page && $object->mainList) {
+ if (!$per_page && $object->isMainList()) {
// main lists on Front-End have special get parameter for per-page
$per_page = $this->Application->GetVar('per_page');
}
@@ -922,7 +890,7 @@
$per_page = $this->Application->GetVar($event->getPrefixSpecial(true) . '_PerPage');
}
- if (!$object->mainList) {
+ if (!$object->isMainList()) {
// per-page given in env and not in main list
$view_name = $this->Application->RecallVar($event->getPrefixSpecial() . '_current_view');
@@ -969,7 +937,7 @@
$object =& $event->getObject();
/* @var $object kDBList */
- if ($object->mainList) {
+ if ($object->isMainList()) {
$sort_by = $this->Application->GetVar('sort_by');
$cur_sort1 = $cur_sort1_dir = $cur_sort2 = $cur_sort2_dir = false;
@@ -1107,9 +1075,9 @@
if ($filter_data) {
$filter_data = unserialize($filter_data);
foreach ($filter_data as $filter_field => $filter_params) {
- $filter_type = ($filter_params['type'] == 'having') ? HAVING_FILTER : WHERE_FILTER;
+ $filter_type = ($filter_params['type'] == 'having') ? kDBList::HAVING_FILTER : kDBList::WHERE_FILTER;
$filter_value = str_replace(EDIT_MARK, $edit_mark, $filter_params['value']);
- $object->addFilter($filter_field, $filter_value, $filter_type, FLT_SEARCH);
+ $object->addFilter($filter_field, $filter_value, $filter_type, kDBList::FLT_SEARCH);
}
}
@@ -1123,9 +1091,9 @@
foreach ($custom_filters[$grid_name] as $field_name => $field_options) {
list ($filter_type, $field_options) = each($field_options);
if (isset($field_options['value']) && $field_options['value']) {
- $filter_type = ($field_options['sql_filter_type'] == 'having') ? HAVING_FILTER : WHERE_FILTER;
+ $filter_type = ($field_options['sql_filter_type'] == 'having') ? kDBList::HAVING_FILTER : kDBList::WHERE_FILTER;
$filter_value = str_replace(EDIT_MARK, $edit_mark, $field_options['value']);
- $object->addFilter($field_name, $filter_value, $filter_type, FLT_CUSTOM);
+ $object->addFilter($field_name, $filter_value, $filter_type, kDBList::FLT_CUSTOM);
}
}
}
@@ -1143,7 +1111,7 @@
{
$group_info = $filter_menu['Groups'][$group_key];
- $temp_filter->setType( constant('FLT_TYPE_'.$group_info['mode']) );
+ $temp_filter->setType( constant('kDBList::FLT_TYPE_'.$group_info['mode']) );
$temp_filter->clearFilters();
foreach ($group_info['filters'] as $flt_id)
{
@@ -1153,7 +1121,7 @@
$temp_filter->addFilter('view_filter_'.$flt_id, $filter_menu['Filters'][$flt_id][$sql_key]);
}
}
- $object->addFilter('view_group_'.$group_key, $temp_filter, $group_info['type'] , FLT_VIEW);
+ $object->addFilter('view_group_'.$group_key, $temp_filter, $group_info['type'] , kDBList::FLT_VIEW);
$group_key++;
}
}
@@ -1365,13 +1333,13 @@
//look at kDBItem' Create for ForceCreateId description, it's rarely used and is NOT set by default
if ( $object->Create($event->getEventParam('ForceCreateId')) ) {
$this->customProcessing($event,'after');
- $event->status=erSUCCESS;
- $event->redirect_params = Array('opener'=>'u');
+ $event->status=kEvent::erSUCCESS;
+ $event->setRedirectParams(Array('opener'=>'u'), true);
}
else {
- $event->status = erFAIL;
+ $event->status = kEvent::erFAIL;
$event->redirect = false;
- $this->Application->SetVar($event->Prefix_Special.'_SaveEvent','OnCreate');
+ $this->Application->SetVar($event->getPrefixSpecial().'_SaveEvent','OnCreate');
$object->setID($id);
}
}
@@ -1385,7 +1353,7 @@
function OnUpdate(&$event)
{
if ($this->Application->CheckPermission('SYSTEM_ACCESS.READONLY', 1)) {
- $event->status = erFAIL;
+ $event->status = kEvent::erFAIL;
return;
}
@@ -1400,10 +1368,10 @@
if ( $object->Update($id) ) {
$this->customProcessing($event, 'after');
- $event->status = erSUCCESS;
+ $event->status = kEvent::erSUCCESS;
}
else {
- $event->status = erFAIL;
+ $event->status = kEvent::erFAIL;
$event->redirect = false;
break;
}
@@ -1422,7 +1390,7 @@
function OnDelete(&$event)
{
if ($this->Application->CheckPermission('SYSTEM_ACCESS.READONLY', 1)) {
- $event->status = erFAIL;
+ $event->status = kEvent::erFAIL;
return;
}
@@ -1463,7 +1431,7 @@
/* @var $object kDBItem */
$object->Clear(0);
- $this->Application->SetVar($event->Prefix_Special.'_SaveEvent', 'OnCreate');
+ $this->Application->SetVar($event->getPrefixSpecial().'_SaveEvent', 'OnCreate');
if ($event->getEventParam('top_prefix') != $event->Prefix) {
// this is subitem prefix, so use main item special
@@ -1505,7 +1473,7 @@
}
}
- $event->redirect_params = Array('opener'=>'u');
+ $event->setRedirectParams(Array('opener'=>'u'), true);
}
@@ -1519,11 +1487,11 @@
function OnMassDelete(&$event)
{
if ($this->Application->CheckPermission('SYSTEM_ACCESS.READONLY', 1)) {
- $event->status = erFAIL;
+ $event->status = kEvent::erFAIL;
return;
}
- $event->status=erSUCCESS;
+ $event->status=kEvent::erSUCCESS;
$temp =& $this->Application->recallObject($event->getPrefixSpecial().'_TempHandler', 'kTempTablesHandler');
@@ -1596,7 +1564,7 @@
function OnSave(&$event)
{
$event->CallSubEvent('OnPreSave');
- if ($event->status == erSUCCESS) {
+ if ($event->status == kEvent::erSUCCESS) {
$skip_master = false;
$temp =& $this->Application->recallObject($event->getPrefixSpecial().'_TempHandler', 'kTempTablesHandler');
@@ -1606,7 +1574,7 @@
$live_ids = $temp->SaveEdit($event->getEventParam('master_ids') ? $event->getEventParam('master_ids') : Array());
if ($live_ids === false) {
// coping from table failed, because we have another coping process to same table, that wasn't finished
- $event->status = erFAIL;
+ $event->status = kEvent::erFAIL;
return ;
}
@@ -1632,12 +1600,12 @@
$this->SaveLoggedChanges($changes_var_name, $object->ShouldLogChanges());
}
else {
- $event->status = erFAIL;
+ $event->status = kEvent::erFAIL;
}
$this->clearSelectedIDs($event);
- $event->redirect_params = Array('opener' => 'u');
+ $event->setRedirectParams(Array('opener' => 'u'), true);
$this->Application->RemoveVar($event->getPrefixSpecial().'_modified');
// all temp tables are deleted here => all after hooks should think, that it's live mode now
@@ -1747,7 +1715,7 @@
$temp->CancelEdit();
$this->clearSelectedIDs($event);
- $event->redirect_params = Array('opener'=>'u');
+ $event->setRedirectParams(Array('opener'=>'u'), true);
$this->Application->RemoveVar($event->getPrefixSpecial().'_modified');
$changes_var_name = $this->Prefix . '_changes_' . $this->Application->GetTopmostWid($this->Prefix);
@@ -1793,21 +1761,21 @@
}
$object =& $event->getObject( Array('skip_autoload' => true) );
+ /* @var $object kDBItem */
$items_info = $this->Application->GetVar( $event->getPrefixSpecial(true) );
if ($items_info) {
foreach ($items_info as $id => $field_values) {
- $object->SetDefaultValues();
$object->Load($id);
$object->SetFieldsFromHash($field_values);
$this->customProcessing($event, 'before');
if( $object->Update($id) )
{
$this->customProcessing($event, 'after');
- $event->status=erSUCCESS;
+ $event->status=kEvent::erSUCCESS;
}
else {
- $event->status = erFAIL;
+ $event->status = kEvent::erFAIL;
$event->redirect = false;
break;
}
@@ -1825,7 +1793,7 @@
$not_created = $this->isNewItemCreate($event);
$event->CallSubEvent($not_created ? 'OnCreate' : 'OnUpdate');
- if ($event->status == erSUCCESS) {
+ if ($event->status == kEvent::erSUCCESS) {
$object =& $event->getObject();
/* @var $object kDBItem */
@@ -1849,7 +1817,7 @@
{
$event->CallSubEvent('OnPreSave');
- if ($event->status == erSUCCESS) {
+ if ($event->status == kEvent::erSUCCESS) {
$id = $this->Application->GetVar($event->getPrefixSpecial(true) . '_GoId');
$event->SetRedirectParam($event->getPrefixSpecial() . '_id', $id);
}
@@ -1864,7 +1832,7 @@
function OnPreSaveAndGoToTab(&$event)
{
$event->CallSubEvent('OnPreSave');
- if ($event->status==erSUCCESS) {
+ if ($event->status==kEvent::erSUCCESS) {
$event->redirect=$this->Application->GetVar($event->getPrefixSpecial(true).'_GoTab');
}
}
@@ -1879,7 +1847,7 @@
{
$event->setPseudoClass('_List');
$event->CallSubEvent('OnUpdate');
- if ($event->status==erSUCCESS) {
+ if ($event->status==kEvent::erSUCCESS) {
$event->redirect=$this->Application->GetVar($event->getPrefixSpecial(true).'_GoTab');
}
}
@@ -1931,12 +1899,12 @@
if( $object->Create() )
{
$this->customProcessing($event, 'after');
- $event->redirect_params[$event->getPrefixSpecial(true).'_id'] = $object->GetId();
- $event->status=erSUCCESS;
+ $event->SetRedirectParam($event->getPrefixSpecial(true).'_id', $object->GetId());
+ $event->status=kEvent::erSUCCESS;
}
else
{
- $event->status=erFAIL;
+ $event->status=kEvent::erFAIL;
$event->redirect=false;
$object->setID(0);
}
@@ -1963,7 +1931,7 @@
function iterateItems(&$event)
{
if ($this->Application->CheckPermission('SYSTEM_ACCESS.READONLY', 1)) {
- $event->status = erFAIL;
+ $event->status = kEvent::erFAIL;
return;
}
@@ -2000,10 +1968,10 @@
}
if ($object->Update()) {
- $event->status = erSUCCESS;
+ $event->status = kEvent::erSUCCESS;
}
else {
- $event->status = erFAIL;
+ $event->status = kEvent::erFAIL;
$event->redirect = false;
break;
}
@@ -2021,11 +1989,11 @@
function OnMassClone(&$event)
{
if ($this->Application->CheckPermission('SYSTEM_ACCESS.READONLY', 1)) {
- $event->status = erFAIL;
+ $event->status = kEvent::erFAIL;
return;
}
- $event->status = erSUCCESS;
+ $event->status = kEvent::erSUCCESS;
$temp =& $this->Application->recallObject($event->getPrefixSpecial().'_TempHandler', 'kTempTablesHandler');
@@ -2371,7 +2339,7 @@
$this->RemoveRequiredFields($object);
$event->CallSubEvent('OnPreSave');
- if ($event->status == erSUCCESS) {
+ if ($event->status == kEvent::erSUCCESS) {
$resource_id = $this->Application->GetVar('translator_resource_id');
if ($resource_id) {
@@ -2387,15 +2355,15 @@
}
$event->redirect = $this->Application->GetVar('translator_t');
- $event->redirect_params = Array (
+ $event->setRedirectParams(Array (
'pass' => 'all,trans,' . $this->Application->GetVar('translator_prefixes'),
'opener' => 's',
$event->getPrefixSpecial(true) . '_id' => $object->GetID(),
'trans_event' => 'OnLoad',
'trans_prefix' => $this->Application->GetVar('translator_prefixes'),
'trans_field' => $this->Application->GetVar('translator_field'),
'trans_multi_line' => $this->Application->GetVar('translator_multi_line'),
- );
+ ), true);
// 1. SAVE LAST TEMPLATE TO SESSION (really needed here, because of tweaky redirect)
$last_template = $this->Application->RecallVar('last_template');
@@ -2404,14 +2372,19 @@
}
}
+ /**
+ * Makes all fields non-required
+ *
+ * @param kDBItem $object
+ */
function RemoveRequiredFields(&$object)
{
// making all field non-required to achieve successful presave
- foreach($object->Fields as $field => $options)
- {
- if(isset($options['required']))
- {
- unset($object->Fields[$field]['required']);
+ $fields = $object->getFields();
+
+ foreach ($fields as $field => $options) {
+ if ( $object->isRequired($field) ) {
+ $object->setRequired($field, false);
}
}
}
@@ -2594,7 +2567,7 @@
$event->CallSubEvent('OnPreSave');
}
- if ($event->status == erSUCCESS) {
+ if ($event->status == kEvent::erSUCCESS) {
$this->Application->SetVar('m_lang', $this->Application->GetVar('language'));
$data = $this->Application->GetVar('st_id');
@@ -2612,7 +2585,7 @@
*/
function OnUploadFile(&$event)
{
- $event->status = erSTOP;
+ $event->status = kEvent::erSTOP;
// define('DBG_SKIP_REPORTING', 0);
$default_msg = "Flash requires that we output something or it won't fire the uploadSuccess event";
@@ -2740,7 +2713,7 @@
*/
function OnDeleteFile(&$event)
{
- $event->status = erSTOP;
+ $event->status = kEvent::erSTOP;
if (strpos($this->Application->GetVar('file'), '../') !== false) {
return ;
@@ -2763,6 +2736,8 @@
*/
function OnViewFile(&$event)
{
+ $event->status = kEvent::erSTOP;
+
$file = $this->Application->GetVar('file');
if ((strpos($file, '../') !== false) || (trim($file) !== $file)) {
// when relative paths or special chars are found template names from url, then it's hacking attempt
@@ -2810,10 +2785,7 @@
header('Content-Type: ' . $type);
header('Content-Disposition: inline; filename="' . $file . '"');
- safeDefine('DBG_SKIP_REPORTING', 1);
-
readfile($path);
- exit;
}
/**
@@ -2842,14 +2814,14 @@
return ;
}
- $event->status = erSTOP;
+ $event->status = kEvent::erSTOP;
$field = $this->Application->GetVar('field');
$cur_value = $this->Application->GetVar('cur_value');
$object =& $event->getObject();
- if (!$field || !$cur_value || !array_key_exists($field, $object->Fields)) {
+ if (!$field || !$cur_value || !$object->isField($field)) {
return ;
}
@@ -2883,7 +2855,7 @@
*/
function OnSaveWidths(&$event)
{
- $event->status = erSTOP;
+ $event->status = kEvent::erSTOP;
$lang =& $this->Application->recallObject('lang.current');
// header('Content-type: text/xml; charset='.$lang->GetDBField('Charset'));
@@ -2900,7 +2872,7 @@
/**
* Called from CSV import script after item fields
* are set and validated, but before actual item create/update.
- * If event status is erSUCCESS, line will be imported,
+ * If event status is kEvent::erSUCCESS, line will be imported,
* else it will not be imported but added to skipped lines
* and displayed in the end of import.
* Event status is preset from import script.