/** * @param mixed $subject if applicable, the value to compare $subject with (value of model * attribute) * @param string $operator the type of comparison to be used * @param mixed $value the value being analyzed (specified in config menu) * @return boolean */ public static function evalComparison($subject, $operator, $value = null, Fields $field = null) { $value = self::parseArray($operator, $value); // if (!in_array ($operator, $expectsArray, true) && is_array ($value)) { // if (count ($value) > 1) { // return false; // } else { // $value = array_pop ($value); // } // } switch ($operator) { case '=': // check for multiselect dropdown if ($field && $field->type === 'dropdown') { $dropdown = $field->getDropdown(); if ($dropdown && $dropdown->multi) { $subject = StringUtil::jsonDecode($subject, false); AuxLib::coerceToArray($subject); AuxLib::coerceToArray($value); return $subject === $value; } // check for muti-assignment field } else { if ($field && $field->type === 'assignment' && $field->linkType === 'multiple') { $subject = explode(Fields::MULTI_ASSIGNMENT_DELIM, $subject); AuxLib::coerceToArray($subject); AuxLib::coerceToArray($value); return $subject === $value; } } // this case occurs when dropdown or assignment fields are changed from multiple // to single selection, and flow conditions are left over from before the change // was made if (is_array($value)) { AuxLib::coerceToArray($subject); } return $subject == $value; case '>': return $subject > $value; case '<': return $subject < $value; case '>=': return $subject >= $value; case '<=': return $subject <= $value; case 'between': if (count($value) !== 2) { return false; } return $subject >= min($value) && $subject <= max($value); case '<>': case '!=': return $subject != $value; case 'notEmpty': return $subject !== null && $subject !== ''; case 'empty': return $subject === null || trim($subject) === ''; case 'list': if (count($value) === 0) { // if the list is empty, return false; } // A isn't in it foreach ($value as &$val) { if ($subject == $val) { return true; } } return false; case 'notList': if (count($value) === 0) { // if the list is empty, return true; } // A isn't *not* in it foreach ($value as &$val) { if ($subject == $val) { return false; } } return true; case 'noContains': return stripos($subject, $value) === false; case 'contains': default: return stripos($subject, $value) !== false; } }
/** * Improved version of getItems which enables use of empty search string, pagination, and * configurable option values/names. * @param string $prefix name prefix of items to retrieve * @param int $page page number of results to retrieve * @param int $limit max number of results to retrieve * @param string|array $valueAttr attribute(s) used to popuplate the option values. If an * array is passed, value will composed of values of each of the attributes specified, joined * by commas * @param string $nameAttr attribute used to popuplate the option names * @return array name, value pairs */ public function getItems2($prefix = '', $page = 0, $limit = 20, $valueAttr = 'name', $nameAttr = 'name') { $modelClass = get_class($this->owner); $model = CActiveRecord::model($modelClass); $table = $model->tableName(); $offset = intval($page) * intval($limit); AuxLib::coerceToArray($valueAttr); $modelClass::checkThrowAttrError(array_merge($valueAttr, array($nameAttr))); $params = array(); if ($prefix !== '') { $params[':prefix'] = $prefix . '%'; } $offset = abs((int) $offset); $limit = abs((int) $limit); $command = Yii::app()->db->createCommand("\n SELECT " . implode(',', $valueAttr) . ", {$nameAttr} as __name\n FROM {$table}\n WHERE " . ($prefix === '' ? '1=1' : $nameAttr . ' LIKE :prefix') . "\n ORDER BY __name\n LIMIT {$offset}, {$limit}\n "); $rows = $command->queryAll(true, $params); $items = array(); foreach ($rows as $row) { $name = $row['__name']; unset($row['__name']); $items[] = array($name, $row); } return $items; }
public static function parseModelType($modelType) { //AuxLib::debugLogR ($modelType); if (isset($_GET['workflowAjax']) && $_GET['workflowAjax']) { $modelType = CJSON::decode($modelType); } if (empty($modelType) || is_array($modelType) && sizeof($modelType) === 1 && empty($modelType[0])) { return ''; } AuxLib::coerceToArray($modelType); return $modelType; }