/** * Adds a search parameter to the StatementBuilder, or other InputOutput-extending class instance, located at $this->build_args * @param string $target Column name * @param string $t_table Table name * @param mixed $value Primitive or scalar array. Condition or threshold records must meet in the search * @param string $operator ModelCaller const */ protected function makeSearchRequest($target, $t_table, $value, $operator) { \Segment\utilities\Utilities::areArgumentsValid(__METHOD__, func_get_args(), $this); $clmn_n = $this->build_args->getClassName('Column'); $tbl_n = $this->build_args->getClassName('Table'); $descrip = $this->controller->getDescription(); $search_func_n = $this->getRestSearch($operator); if (is_array($value)) { for ($i = count($value) - 1; $i > -1; $i--) { if (is_array($v) && $this->isModelCallerClassName(key($v))) { $caller_name = key($v); $new_caller = new $caller_name($v[$caller_name]); $value[$i] = $new_caller->build_args->getStatement(); } if (!is_scalar($value[$i]) && !is_a($value[$i], 'Statement')) { $value[$i] = NULL; } } } switch (strtolower(trim($operator))) { case ModelCaller::EQUAL: $temp_value = is_array($value) ? $value[0] : $value; $clmn = new $clmn_n(new $tbl_n(Segment\Model\production\__DB_NAME__, $t_table), $target); $type = $descrip->getType($clmn); $value_class_n = ucfirst($type) . "Value"; settype($temp_value, $type); $this->build_args->addSearchEqual($clmn, new $value_class_n($temp_value)); break; case ModelCaller::NEQUAL: $temp_value = is_array($value) ? $value[0] : $value; $clmn = new $clmn_n(new $tbl_n(Segment\Model\production\__DB_NAME__, $t_table), $target); $type = $descrip->getType($clmn); $value_class_n = ucfirst($type) . "Value"; settype($temp_value, $type); $this->build_args->addSearchNotEqual($clmn, $temp_value); break; case ModelCaller::EQUALANY: $temp_value = is_array($value) ? $value : [$value]; $clmn = new $clmn_n(new $tbl_n(Segment\Model\production\__DB_NAME__, $t_table), $target); $type = $descrip->getType($clmn); $value_class_n = ucfirst($type) . "Value"; end($temp_value); for ($i = key($temp_value); $i > -1; $i--) { settype($temp_value[$i], $type); $temp_value[$i] = new $value_class_n($temp_value[$i]); } $temp_value = new AnyAllValues(...$temp_value); $this->build_args->addSearchNotEqual($clmn, $temp_value); break; case ModelCaller::GREATER: $temp_value = is_array($value) ? $value[0] : $value; $clmn = new $clmn_n(new $tbl_n(Segment\Model\production\__DB_NAME__, $t_table), $target); $type = $descrip->getType($clmn); $value_class_n = ucfirst($type) . "Value"; settype($temp_value, $type); $this->build_args->addSearchGreater($clmn, TRUE, $temp_value); break; case ModelCaller::GREATEQ: $temp_value = is_array($value) ? $value[0] : $value; $clmn = new $clmn_n(new $tbl_n(Segment\Model\production\__DB_NAME__, $t_table), $target); $type = $descrip->getType($clmn); $value_class_n = ucfirst($type) . "Value"; settype($temp_value, $type); $this->build_args->addSearchGreater($clmn, FALSE, $temp_value); break; case ModelCaller::GREATANY: $temp_value = is_array($value) ? $value : [$value]; $clmn = new $clmn_n(new $tbl_n(Segment\Model\production\__DB_NAME__, $t_table), $target); $type = $descrip->getType($clmn); $value_class_n = ucfirst($type) . "Value"; end($temp_value); for ($i = key($temp_value); $i > -1; $i--) { settype($temp_value[$i], $type); $temp_value[$i] = new $value_class_n($temp_value[$i]); } $temp_value = new AnyAllValues(...$temp_value); $this->build_args->addSearchGreaterAny($clmn, $temp_value); break; case ModelCaller::GREATALL: $temp_value = is_array($value) ? $value : [$value]; $clmn = new $clmn_n(new $tbl_n(Segment\Model\production\__DB_NAME__, $t_table), $target); $type = $descrip->getType($clmn); $value_class_n = ucfirst($type) . "Value"; end($temp_value); for ($i = key($temp_value); $i > -1; $i--) { settype($temp_value[$i], $type); $temp_value[$i] = new $value_class_n($temp_value[$i]); } $this->build_args->addSearchGreaterAll(new $clmn_n(new $tbl_n(Segment\Model\production\__DB_NAME__, $t_table), $target), new AnyAllValues(...$temp_value)); break; case ModelCaller::LESSER: $temp_value = is_array($value) ? $value[0] : $value; $clmn = new $clmn_n(new $tbl_n(Segment\Model\production\__DB_NAME__, $t_table), $target); $type = $descrip->getType($clmn); $value_class_n = ucfirst($type) . "Value"; settype($temp_value, $type); $this->build_args->addSearchLesser($clmn, TRUE, new $value_class_n($temp_value)); break; case ModelCaller::LESSEQ: $temp_value = is_array($value) ? $value[0] : $value; $clmn = new $clmn_n(new $tbl_n(Segment\Model\production\__DB_NAME__, $t_table), $target); $type = $descrip->getType($clmn); $value_class_n = ucfirst($type) . "Value"; settype($temp_value, $type); $this->build_args->addSearchLesser($clmn, FALSE, new $value_class_n($value)); break; case ModelCaller::LESSANY: $temp_value = is_array($value) ? $value : [$value]; $clmn = new $clmn_n(new $tbl_n(Segment\Model\production\__DB_NAME__, $t_table), $target); $type = $descrip->getType($clmn); $value_class_n = ucfirst($type) . "Value"; end($temp_value); for ($i = key($temp_value); $i > -1; $i--) { settype($temp_value[$i], $type); $temp_value[$i] = new $value_class_n($temp_value[$i]); } $this->build_args->addSearchLesserAny($clmn, new AnyAllValues(...$temp_value)); break; case ModelCaller::LESSALL: $temp_value = is_array($value) ? $value : [$value]; $clmn = new $clmn_n(new $tbl_n(Segment\Model\production\__DB_NAME__, $t_table), $target); $type = $descrip->getType($clmn); $value_class_n = ucfirst($type) . "Value"; end($temp_value); for ($i = key($temp_value); $i > -1; $i--) { settype($temp_value[$i], $type); $temp_value[$i] = new $value_class_n($temp_value[$i]); } $this->build_args->addSearchLesserAll($clmn, new AnyAllValues(...$temp_value)); break; case ModelCaller::BETWEEN: $temp1 = is_array($value) && isset($value[0]) ? $value[0] : $value; $temp2 = is_array($value) && isset($value[1]) ? $value[1] : NULL; $clmn = new $clmn_n(new $tbl_n(Segment\Model\production\__DB_NAME__, $t_table), $target); $type = $descrip->getType($clmn); $value_class_n = ucfirst($type) . "Value"; settype($temp1, $type); settype($temp2, $type); $temp1 = new $value_class_n($temp1); $temp2 = new $value_class_n($temp2); $this->build_args->addSearchBetween($clmn, new BetweenValues($temp1, $temp2)); break; case ModelCaller::NBETWEEN: $temp1 = is_array($value) && isset($value[0]) ? $value[0] : $value; $temp2 = is_array($value) && isset($value[1]) ? $value[1] : NULL; $clmn = new $clmn_n(new $tbl_n(Segment\Model\production\__DB_NAME__, $t_table), $target); $type = $descrip->getType($clmn); $value_class_n = ucfirst($type) . "Value"; settype($temp1, $type); settype($temp2, $type); $temp1 = new $value_class_n($temp1); $temp2 = new $value_class_n($temp2); $this->build_args->addSearchNotBetween($clmn, new BetweenValues($temp1, $temp2)); break; default: throw new \InvalidArgumentException(__CLASS__ . '::' . __METHOD__ . " expects fourth argument to" . " be a const of ModelCaller. Provided: " . print_r($operator, TRUE)); } }
/** * Returns function getModelCallArgs() * @param string $rest_type the REST call for this operation * @param \Segment\utilities\Rest $rest * @return callable * @throws \InvalidArgumentException */ private static function getMCArgsFunc($rest_type, \Segment\utilities\Rest $rest) { \Segment\utilities\Utilities::areArgumentsValid(__METHOD__, func_get_args(), $this); $answer; $temp = $rest->getValue('x'); $temp = is_string($temp) ? json_decode($temp, TRUE) : $temp; $id = is_array($temp) ? key($temp) : ''; switch (strtoupper(trim($rest_type))) { case 'GET': $id = $rest->getId(); if (strpos($id, '_search') && strpos($id, '_search') + 7 === strlen($id) || strpos($id, '_field_set') && strpos($id, '_field_set') + 10 === strlen($id) || strpos($id, '_field_count') && strpos($id, '_field_count') + 12 === strlen($id) || strpos($id, '_field_avg') && strpos($id, '_field_avg') + 10 === strlen($id) || strpos($id, '_field_mode') && strpos($id, '_field_mode') + 11 === strlen($id) || strpos($id, '_field_median') && strpos($id, '_field_median') + 13 === strlen($id) || strpos($id, '_field_firstq') && strpos($id, '_field_firstq') + 10 === strlen($id) || strpos($id, '_field_thirdq') && strpos($id, '_field_thirdq') + 10 === strlen($id)) { /**` * @return \Segment\utilities\RestRequest * @var \Segment\Controller\Controller $this */ $answer = function () { $answer = array(); if ($this->isAuthorizationNeeded()) { return $answer; } $x = $this->getRest(); $answer = new \Segment\utilities\SearchHttpRequest($n = $x->hasKey('x') ? $x->getValue('x') : ''); return $answer; }; } else { if (strpos($id, '_wild') && strpos($id, '_wild') + 6 === strlen($id)) { /** * @return \Segment\utilities\RestRequest * @var \Segment\Controller\Controller $this */ $answer = function () { $answer = array(); if ($this->isAuthorizationNeeded()) { return $answer; } $x = $this->getRest(); $answer = new \Segment\utilities\WildHttpRequest($n = $x->hasKey('x') ? $x->getValue('x') : ''); return $answer; }; } } break; case 'POST': /** * @return \Segment\utilities\RestRequest * @var \Segment\Controller\Controller $this */ $answer = function () { $answer = array(); if ($this->isAuthorizationNeeded()) { return $answer; } $x = $this->getRest(); $answer = new \Segment\utilities\PostHttpRequest($n = $x->hasKey('x') ? $x->getValue('x') : ''); return $answer; }; break; case 'PUT': /** * @return \Segment\utilities\RestRequest * @var \Segment\Controller\Controller $this */ $answer = function () { $answer = array(); if ($this->isAuthorizationNeeded()) { return $answer; } $x = $this->getRest(); $answer = new \Segment\utilities\PutHttpRequest($n = $x->hasKey('x') ? $x->getValue('x') : ''); return $answer; }; break; case 'DELETE': /** * @return \Segment\utilities\RestRequest * @var \Segment\Controller\Controller $this */ $answer = function () { $answer = array(); if ($this->isAuthorizationNeeded()) { return $answer; } $x = $this->getRest(); $answer = new \Segment\utilities\DeleteHttpRequest($n = $x->hasKey('x') ? $x->getValue('x') : ''); return $answer; }; break; // assign $answer a function break; } return ['getModelCallArgument' => $answer]; }
/** * Return (PHP) Database Object placeholder variable string * @param string $var_as_str * @return string */ public function getPdoPlaceholder($var_as_str) { \Segment\utilities\Utilities::areArgumentsValid(__CLASS__, __METHOD__, func_get_args()); return '?'; }