Index: trunk/kernel/units/images/image_event_handler.php =================================================================== diff -u -N --- trunk/kernel/units/images/image_event_handler.php (revision 8388) +++ trunk/kernel/units/images/image_event_handler.php (revision 0) @@ -1,350 +0,0 @@ -'ImageAction', - 'OnBeforeDeleteFromLive'=>'ImageAction', - 'OnBeforeCopyToLive'=>'ImageAction', - 'OnBeforeItemDelete'=>'ImageAction', - 'OnAfterClone'=>'ImageAction', - ); - - $this->eventMethods = array_merge($this->eventMethods, $image_events); - } - - /** - * Get's special of main item for linking with subitem - * - * @param kEvent $event - * @return string - */ - function getMainSpecial(&$event) - { - if ($event->Special == 'list' && !$this->Application->IsAdmin()) { - // ListImages aggregated tag uses this special - return ''; - } - - return parent::getMainSpecial($event); - } - - function customProcessing(&$event, $type) - { - $object =& $event->GetObject(); - switch ($type) - { - case 'before' : - if ($object->GetDBField('LocalImage')) - { - $object->SetDBField('Url', ''); - } - else - { - $object->SetDBField('LocalPath', ''); - } - - if ($object->GetDBField('LocalThumb')) - { - $object->SetDBField('ThumbUrl', ''); - } - else - { - $object->SetDBField('ThumbPath', ''); - } - - if ($object->GetDBField('SameImages')) - { - $object->SetDBField('LocalImage', 1); - $object->SetDBField('LocalPath', ''); - $object->SetDBField('Url', ''); - } - break; - case 'after' : - if ($object->GetDBField('DefaultImg') ) - { - $sql = 'UPDATE '.$object->TableName.' SET DefaultImg=0 WHERE ResourceId='. - $object->GetDBField('ResourceId').' AND ImageId<>'. - $object->GetId(); - $res = $this->Conn->Query($sql); - } - break; - default: - } - } - - function ImageAction(&$event) - { - $id = $event->getEventParam('id'); - $object =& $this->Application->recallObject($event->Prefix.'.-item', $event->Prefix); - if (in_array($event->Name, Array('OnBeforeDeleteFromLive','OnAfterClone')) ) { - $object->SwitchToLive(); - } - elseif ($event->Name == 'OnBeforeItemDelete') { - // keep current table - } - else { - $object->SwitchToTemp(); - } - - $object->Load($id); - - $fields = Array('LocalPath' => 'LocalImage', 'ThumbPath' => 'LocalThumb'); - foreach ($fields as $a_field => $mode_field) { - $file = $object->GetField($a_field); - if (!$file) continue; - $source_file = FULL_PATH.$file; - - switch ($event->Name) { - // Copy image files to pending dir and update corresponding fields in temp record - // Checking for existing files and renaming if nessessary - two users may upload same pending files at the same time! - case 'OnAfterCopyToTemp': - $new_file = IMAGES_PENDING_PATH . $this->ValidateFileName(FULL_PATH.IMAGES_PENDING_PATH, basename($file)); - $dest_file = FULL_PATH.$new_file; - copy($source_file, $dest_file); - $object->Fields[$a_field]['skip_empty'] = false; - $object->SetDBField($a_field, $new_file); - break; - - // Copy image files to live dir (checking if fileexists and renameing if nessessary) - // and update corresponding fields in temp record (which gets copied to live automatically) - case 'OnBeforeCopyToLive': - if ( $object->GetDBField($mode_field) ) { // if image is local - // rename file if it exists in live folder - $new_file = IMAGES_PATH . $this->ValidateFileName(FULL_PATH.IMAGES_PATH, basename($file)); - $dest_file = FULL_PATH.$new_file; - rename($source_file, $dest_file); - } - else { // if image is remote url - remove local file (if any), update local file field with empty value - if (file_exists($source_file)) @unlink($source_file); - $new_file = ''; - } - $object->Fields[$a_field]['skip_empty'] = false; - $object->SetDBField($a_field, $new_file); - break; - - case 'OnBeforeDeleteFromLive': // Delete image files from live folder before copying over from temp - case 'OnBeforeItemDelete': // Delete image files when deleteing Image object - @unlink(FULL_PATH.$file); - break; - - case 'OnAfterClone': // Copy files when cloning objects, renaming it on the fly - $path_info = pathinfo($file); - $new_file = $path_info['dirname'].'/'.$this->ValidateFileName(FULL_PATH.$path_info['dirname'], $path_info['basename']); - $dest_file = FULL_PATH . $new_file; - copy($source_file, $dest_file); - $object->Fields[$a_field]['skip_empty'] = false; - $object->SetDBField($a_field, $new_file); - break; - } - } - if ( in_array($event->Name, Array('OnAfterClone', 'OnBeforeCopyToLive', 'OnAfterCopyToTemp')) ) { - $object->Update(null, true); - } - } - - function ValidateFileName($path, $name) - { - $parts = pathinfo($name); - $ext = '.'.$parts['extension']; - $filename = substr($parts['basename'], 0, -strlen($ext)); - $new_name = $filename.$ext; - while ( file_exists($path.'/'.$new_name) ) - { - if ( preg_match("/({$filename}_)([0-9]*)($ext)/", $new_name, $regs) ) { - $new_name = $regs[1].($regs[2]+1).$regs[3]; - } - else { - $new_name = $filename.'_1'.$ext; - } - } - return $new_name; - } - - /** - * Enter description here... - * - * @param kEvent $event - */ - function OnSetPrimary(&$event) - { - $object =& $event->getObject(); - $object->SetDBField('DefaultImg', 1); - $object->Update(); - } - - /** - * Enter description here... - * - * @param kEvent $event - */ - function OnBeforeItemUpdate(&$event) - { - $object =& $event->getObject(); -// $parent_info = $object->getLinkedInfo(); - $id = $object->GetDBField('ResourceId'); -// $id = $parent_info['ParentId'] ? $parent_info['ParentId'] : $this->Application->GetVar('p_id'); - $sql = 'SELECT ImageId FROM '.$object->TableName.' WHERE ResourceId='.$id.' AND DefaultImg=1'; - if(!$this->Conn->GetOne($sql)) - { - $object->SetDBField('DefaultImg', 1); - } - if($object->GetDBField('DefaultImg') && $object->Validate()) - { - - $sql = 'UPDATE '.$object->TableName.' - SET DefaultImg = 0 - WHERE ResourceId = '.$id.' AND ImageId <> '.$object->GetDBField('ImageId'); - $this->Conn->Query($sql); - $object->SetDBField('Enabled', 1); - } - } - - function OnAfterItemCreate(&$event) - { - $event->CallSubEvent('OnBeforeItemUpdate'); - $object =& $event->getObject(); - $object->Update(); - } - - /** - * Deletes all selected items. - * Automatically recurse into sub-items using temp handler, and deletes sub-items - * by calling its Delete method if sub-item has AutoDelete set to true in its config file - * - * @param kEvent $event - */ - function OnMassDelete(&$event) - { - $event->status=erSUCCESS; - - $temp =& $this->Application->recallObject($event->getPrefixSpecial().'_TempHandler', 'kTempTablesHandler'); - - $event->setEventParam('ids', $this->StoreSelectedIDs($event) ); - $this->customProcessing($event, 'before'); - $ids = $event->getEventParam('ids'); - - $object =& $event->getObject(); - $sql = 'SELECT ImageId FROM '.$object->TableName.' WHERE DefaultImg=1'; - $primary = $this->Conn->GetOne($sql); - if( $primary && ($key = array_search($primary, $ids)) ) - { - $sql = 'SELECT ImageId FROM '.$object->TableName.' WHERE DefaultImg=0'; - $res = $this->Conn->Query($sql); - if($res) - { - unset($ids[$key]); - } - } - - if($ids) - { - $temp->DeleteItems($event->Prefix, $event->Special, $ids); - } - $this->clearSelectedIDs($event); - } - - /*function OnAfterItemLoad(&$event) - { - $object =& $event->getObject(); - - if ( $object->GetDBField('ThumbPath') || $object->GetDBField('SameImages') ) - { - // return local image or url - $path = $object->GetDBField('LocalThumb') ? PROTOCOL.SERVER_NAME.BASE_PATH.$object->GetDBField('ThumbPath') : $object->GetDBField('ThumbUrl'); - if ( $object->GetDBField('LocalThumb') && !file_exists(FULL_PATH.$object->GetDBField('ThumbPath')) ) $path = ''; - } - else { // if we need full which is not the same as thumb - $path = $object->GetDBField('LocalImage') ? PROTOCOL.SERVER_NAME.BASE_PATH.$object->GetDBField('LocalPath') : $object->GetDBField('Url'); - if ( $object->GetDBField('LocalImage') && !file_exists(FULL_PATH.$object->GetDBField('LocalPath')) ) $path = ''; - } - - $object->SetDBField('ImageUrl', $path); - }*/ - - function SetCustomQuery(&$event) - { - parent::SetCustomQuery($event); - - $types=$event->getEventParam('types'); - $except_types=$event->getEventParam('except'); - $object =& $event->getObject(); - $type_clauses = Array(); - - if( !$this->Application->IsAdmin() ) - { - $object->addFilter('active', '%1$s.Enabled = 1'); - } - - if($product_id = $event->getEventParam('product_id')) - { - $object->removeFilter('parent_filter'); - $sql = 'SELECT ResourceId FROM '.$this->Application->getUnitOption('p', 'TableName').' - WHERE ProductId = '.$product_id; - $resource_id = (int) $this->Conn->GetOne($sql); - $object->addFilter('product_images', '%1$s.ResourceId = '.$resource_id); - } - - $type_clauses['additional']['include'] = '%1$s.DefaultImg != 1'; - $type_clauses['additional']['except'] = '%1$s.DefaultImg = 1'; - $type_clauses['additional']['having_filter'] = false; - - /********************************************/ - - $includes_or_filter =& $this->Application->makeClass('kMultipleFilter'); - $includes_or_filter->setType(FLT_TYPE_OR); - - $excepts_and_filter =& $this->Application->makeClass('kMultipleFilter'); - $excepts_and_filter->setType(FLT_TYPE_AND); - - $includes_or_filter_h =& $this->Application->makeClass('kMultipleFilter'); - $includes_or_filter_h->setType(FLT_TYPE_OR); - - $excepts_and_filter_h =& $this->Application->makeClass('kMultipleFilter'); - $excepts_and_filter_h->setType(FLT_TYPE_AND); - - $except_types_array=explode(',', $types); - - if ($types){ - $types_array=explode(',', $types); - for ($i=0; $iremoveFilter('filter_'.$type); - $includes_or_filter_h->addFilter('filter_'.$type, $type_clauses[$type]['include']); - }else{ - $includes_or_filter->removeFilter('filter_'.$type); - $includes_or_filter->addFilter('filter_'.$type, $type_clauses[$type]['include']); - } - } - } - } - - if ($except_types){ - $except_types_array=explode(',', $except_types); - for ($i=0; $iremoveFilter('filter_'.$type); - $excepts_and_filter_h->addFilter('filter_'.$type, $type_clauses[$type]['except']); - }else{ - $excepts_and_filter->removeFilter('filter_'.$type); - $excepts_and_filter->addFilter('filter_'.$type, $type_clauses[$type]['except']); - } - } - } - } - - $object->addFilter('includes_filter', $includes_or_filter); - $object->addFilter('excepts_filter', $excepts_and_filter); - - $object->addFilter('includes_filter_h', $includes_or_filter_h, HAVING_FILTER); - $object->addFilter('excepts_filter_h', $excepts_and_filter_h, HAVING_FILTER); - } -} - -?> \ No newline at end of file