Index: branches/5.3.x/core/kernel/db/db_event_handler.php
===================================================================
diff -u -N -r15987 -r15988
--- branches/5.3.x/core/kernel/db/db_event_handler.php (.../db_event_handler.php) (revision 15987)
+++ branches/5.3.x/core/kernel/db/db_event_handler.php (.../db_event_handler.php) (revision 15988)
@@ -1,6 +1,6 @@
Array ('self' => 'view', 'subitem' => 'view'),
'OnItemBuild' => Array ('self' => 'view', 'subitem' => 'view'),
'OnSuggestValues' => Array ('self' => 'admin', 'subitem' => 'admin'),
+ 'OnSuggestValuesJSON' => Array ('self' => 'admin', 'subitem' => 'admin'),
'OnBuild' => Array ('self' => true),
@@ -3484,36 +3485,84 @@
{
$event->status = kEvent::erSTOP;
- $field = $this->Application->GetVar('field');
- $cur_value = $this->Application->GetVar('cur_value');
+ $this->Application->XMLHeader();
+ $data = $this->getAutoCompleteSuggestions($event, $this->Application->GetVar('cur_value'));
+ echo '';
+
+ if ( kUtil::isAssoc($data) ) {
+ foreach ($data as $key => $title) {
+ echo '- ' . kUtil::escape($title, kUtil::ESCAPE_HTML) . '
';
+ }
+ }
+ else {
+ foreach ($data as $title) {
+ echo '- ' . kUtil::escape($title, kUtil::ESCAPE_HTML) . '
';
+ }
+ }
+
+ echo '';
+ }
+
+ /**
+ * Returns auto-complete values for jQueryUI.AutoComplete
+ *
+ * @param kEvent $event
+ * @return void
+ * @access protected
+ */
+ protected function OnSuggestValuesJSON(kEvent $event)
+ {
+ $event->status = kEvent::erSTOP;
+
+ $data = $this->getAutoCompleteSuggestions($event, $this->Application->GetVar('term'));
+
+ if ( kUtil::isAssoc($data) ) {
+ $transformed_data = array();
+
+ foreach ($data as $key => $title) {
+ $transformed_data[] = array('value' => $key, 'label' => $title);
+ }
+
+ $data = $transformed_data;
+ }
+
+ echo json_encode($data);
+ }
+
+ /**
+ * Prepares a suggestion list based on a given term.
+ *
+ * @param kEvent $event Event.
+ * @param string $term Term.
+ *
+ * @return Array
+ * @access protected
+ */
+ protected function getAutoCompleteSuggestions(kEvent $event, $term)
+ {
$object = $event->getObject();
+ /* @var $object kDBItem */
- if ( !$field || !$cur_value || !$object->isField($field) ) {
- return;
+ $field = $this->Application->GetVar('field');
+
+ if ( !$field || !$term || !$object->isField($field) ) {
+ return array();
}
$limit = $this->Application->GetVar('limit');
+
if ( !$limit ) {
$limit = 20;
}
$sql = 'SELECT DISTINCT ' . $field . '
FROM ' . $event->getUnitConfig()->getTableName() . '
- WHERE ' . $field . ' LIKE ' . $this->Conn->qstr($cur_value . '%') . '
+ WHERE ' . $field . ' LIKE ' . $this->Conn->qstr($term . '%') . '
ORDER BY ' . $field . '
LIMIT 0,' . $limit;
- $data = $this->Conn->GetCol($sql);
- $this->Application->XMLHeader();
-
- echo '';
-
- foreach ($data as $item) {
- echo '- ' . kUtil::escape($item, kUtil::ESCAPE_HTML) . '
';
- }
-
- echo '';
+ return $this->Conn->GetCol($sql);
}
/**