'', 'field' => '', 'narrow by' => '', 'disable child' => true ); /** @var Column caches the referenced column */ protected $narrowByColumn = null; /** * Get the configured lookup column * * @return Column|false */ protected function getNarrowByColumn() { if($this->narrowByColumn !== null) return $this->narrowByColumn; $this->narrowByColumn = $this->getColumn($this->config['schema'], $this->config['narrow by']); return $this->narrowByColumn; } /** * Creates the options array * * @return array */ protected function getNarrowByOptions() { $schema = $this->config['schema']; $column = $this->getNarrowByColumn(); if(!$column) return array(); $field = $column->getLabel(); $search = new Search(); $search->addSchema($schema); $search->addColumn($field); $search->addSort($field); $options = array('' => ''); $results = $search->execute(); foreach ($results as $result) { $options[$result[0]->getRawValue()] = $result[0]->getDisplayValue(); } return $options; } protected function getRawValueNarrowingValue($rawvalue) { $schema = $this->config['schema']; $column = $this->getNarrowByColumn(); if(!$column) return ''; $field = $column->getLabel(); $search = new Search(); $search->addSchema($schema); $search->addColumn($field); $search->addFilter($this->config['field'], $rawvalue, '='); $result = $search->execute(); if (!isset($result[0])) return ''; return $result[0][0]->getRawValue(); } /** * Creates the options array * * @return array */ protected function getOptions() { $schema = $this->config['schema']; $column = $this->getLookupColumn(); if(!$column) return array(); $field = $column->getLabel(); $narrowingColumn = $this->getNarrowByColumn(); if(!$narrowingColumn) return array(); $narrowingField = $narrowingColumn->getLabel(); $search = new Search(); $search->addSchema($schema); $search->addColumn($field); $search->addColumn($narrowingField); $search->addSort($field); $result = $search->execute(); $pids = $search->getPids(); $len = count($result); /** @var Value[][] $result */ $options = array('' => array('', '')); for($i = 0; $i < $len; $i++) { $options[$pids[$i]] = array($result[$i][0]->getDisplayValue(), $result[$i][1]->getRawValue()); } return $options; } protected function parentValueEditor($name, $rawvalue, $htmlID) { $params = array( 'data-child-id' => $htmlID, 'class' => 'struct_'.strtolower($this->getClass()). '_parent', 'onchange' => 'structcombolookup_change_narrowby(this, '.(int)$this->config['disable child'].')' ); $attributes = buildAttributes($params, true); $html = "'; return $html; } /** * A Dropdown with a single value to pick * * @param string $name * @param string $rawvalue * @return string */ public function valueEditor($name, $rawvalue, $htmlID) { $html = $this->parentValueEditor($name, $rawvalue, $htmlID); $params = array( 'name' => $name, 'class' => 'struct_'.strtolower($this->getClass()) . '_child', 'id' => $htmlID ); if ($this->config['disable child']) { $params['disabled'] = 'disabled'; } $attributes = buildAttributes($params, true); $html .= "'; return $html; } }