Application->getUnitOption($prefix, 'TableName'); return $temp ? $this->Application->GetTempName($table_name, 'prefix:'.$prefix) : $table_name; } /** * Applies filter for multiple lists in inp_edit_picker control. * Called from SetCustomQuery of prefix, that contains all available items. * * @param kEvent $event * @param string $storage_field main item's field name, where values are located */ function applyFilter(&$event, $storage_field) { if ($event->Special != 'selected' && $event->Special != 'available') { return ; } $object =& $event->getObject(); /* @var $object kDBList */ $main_object =& $this->Application->recallObject($event->getEventParam('link_to_prefix')); /* @var $main_object kDBItem */ $selected_items = $main_object->GetDBField($storage_field); if ($selected_items) { $filter_type = $event->Special == 'selected' ? 'IN' : 'NOT IN'; $selected_items = explode('|', substr($selected_items, 1, -1)); $filter_clause = $object->IDField.' '.$filter_type.' ('.implode(',', $selected_items).')'; } else { $filter_clause = ($event->Special == 'selected') ? 'FALSE' : 'TRUE'; } $object->addFilter('edit_picker_filter', $filter_clause); } /** * Loads selected values from sub_prefix to main item virtual field. * Called from OnAfterItemLoad of main prefix. * * @param kEvent $event * @param string $store_field main item's field name, to store values into * @param string $source_field prefix and it's field used to store info about selected items (format: prefix.field) */ function LoadValues(&$event, $store_field, $source_field) { $object =& $event->getObject(); /* @var $object kDBItem */ list ($sub_prefix, $sub_prefix_field) = explode('.', $source_field); $foreign_key = $this->Application->getUnitOption($sub_prefix, 'ForeignKey'); $sql = 'SELECT '.$sub_prefix_field.' FROM '.$this->getTable($sub_prefix, $object->IsTempTable()).' WHERE '.$foreign_key.' = '.$object->GetID(); $selected_items = array_unique($this->Conn->GetCol($sql)); $object->SetDBField($store_field, $selected_items ? '|'.implode('|', $selected_items).'|' : ''); } } ?>