/** * @param RecordEntity[] $records */ public function getDataFromRecords($records) { $person_names = ['First name', 'Middle name', 'Last name']; $field_names = Field::getFieldNames(); $headers = array_merge($person_names, $field_names); $headers = array_merge($headers, ['activities']); $recordData = []; foreach ($records as $record) { if (!empty($record)) { $row = $this->getRecordDataAsArray($record); if (!empty($row)) { $recordData[] = $row; } } } $this->sendXML('people', $headers, $recordData, SORT_NATURAL); }
/** * Returns the data field or creates it if it does not exist * * @param int $field_id * @return DataEntity * @since 0.0.7 Now takes into account the type of the field * @since 0.0.6 */ public function findOrCreateData($field_id) { /** * @var FieldEntity $field */ $field = Field::getRepository()->find($field_id); $data = Data::getRepository()->findOneBy(['record' => $this->getId(), 'field' => $field_id]); if ($data == null) { $data = new DataEntity(); $data->setRecord($this); $data->setField($field); $data->setUpdatedBy(Apollo::getInstance()->getConsole()->getEntity()); if ($field->hasDefault()) { if ($field->isMultiple()) { $data->setLongText(serialize([0])); } else { $data->setInt(0); } $data->setIsDefault(true); } else { if ($field->isMultiple()) { $value = ['']; $data->setLongText(serialize($value)); } } DB::getEntityManager()->persist($data); DB::getEntityManager()->flush(); } return $data; }
/** * Returns an array of all the fields of the record * @param RecordEntity $record * @param $is_essential * @return array */ public static function getFormattedFields($record, $is_essential) { $fieldsData = []; $fieldRepo = Field::getRepository(); $fields = $fieldRepo->findBy(['is_essential' => $is_essential, 'is_hidden' => false, 'organisation' => Apollo::getInstance()->getUser()->getOrganisationId()]); foreach ($fields as $field) { $fieldData = self::getFormattedField($record, $field); $fieldsData[] = $fieldData; } return $fieldsData; }
/** * Parses filters and applies them to the return values * * @todo: Include non-recent records too * @todo: extract. extract. extract. (this function is ~190 lines long!) * @param PersonEntity[] $people * @param $states * @return mixed[] */ private function applyFilters($people, $states = null) { $filteredPeople = []; $fieldRepository = Field::getRepository(); if ($states == null) { $filteredPeople = $people; } else { for ($i = 0; $i < count($people); $i++) { $add = false; $person = $people[$i]; $record = Person::getMostRecentRecord($person); for ($k = 0; $k < count($states); $k++) { $state = $states[$k]; /** @var FieldEntity $field */ $fieldID = intval($state['field']); $field = $fieldRepository->find($fieldID); $relation = intval($state['relation']); switch ($field->getType()) { case 2: $value = !empty($state['value']) ? $state['value'] : ''; if ($field->hasDefault()) { if ($field->isAllowOther()) { $data = $record->findOrCreateData($fieldID); if ($relation != 2 && $data->isDefault()) { $value = intval($value); $recordValue = $record->findInt($fieldID); switch ($relation) { case 1: $add = $recordValue != $value; break; default: $add = $recordValue == $value; } } elseif ($relation == 2 && !$data->isDefault()) { $recordValue = $data->getVarchar(); $add = empty($value) || strpos(strtolower($recordValue), strtolower($value)) !== false; } else { $add = false; } } elseif ($field->isMultiple()) { $value = intval($value); $recordValues = $record->findMultiple($fieldID); switch ($relation) { case 1: $add = !in_array($value, $recordValues); break; default: $add = in_array($value, $recordValues); } } else { $value = intval($value); $recordValue = $record->findInt($fieldID); switch ($relation) { case 1: $add = $recordValue != $value; break; default: $add = $recordValue == $value; } } } elseif ($field->isMultiple()) { $recordValues = $record->findMultiple($fieldID); switch ($relation) { case 1: $contains = false; foreach ($recordValues as $recordValue) { if (empty($value) || strpos(strtolower($recordValue), strtolower($value)) !== false) { $contains = true; break; } } $add = !(empty($value) || $contains); break; case 2: $empty = true; foreach ($recordValues as $recordValue) { if (!empty($recordValue)) { $empty = false; break; } } $add = $empty; break; case 3: $empty = true; foreach ($recordValues as $recordValue) { if (!empty($recordValue)) { $empty = false; break; } } $add = !$empty; break; default: $contains = false; foreach ($recordValues as $recordValue) { if (empty($value) || strpos(strtolower($recordValue), strtolower($value)) !== false) { $contains = true; break; } } $add = empty($value) || $contains; } } else { $recordValue = $record->findVarchar($fieldID); switch ($relation) { case 1: $add = !(empty($value) || strpos(strtolower($recordValue), strtolower($value)) !== false); break; case 2: $add = $recordValue == $value; break; case 3: $add = $recordValue != $value; break; case 4: $add = empty($recordValue); break; case 5: $add = !empty($recordValue); break; default: $add = empty($value) || strpos(strtolower($recordValue), strtolower($value)) !== false; } } break; case 3: $value = new DateTime($state['value']); $recordValue = $record->findDateTime($fieldID); switch ($relation) { case 1: $add = $recordValue != $value; break; case 2: $add = $recordValue < $value; break; case 3: $add = $recordValue > $value; break; default: $add = $recordValue == $value; } break; case 4: $value = $state['value']; $recordValue = $record->findLongText($fieldID); switch ($relation) { case 1: $add = !(empty($value) || strpos(strtolower($recordValue), strtolower($value)) !== false); break; case 2: $add = empty($recordValue); break; case 3: $add = !empty($recordValue); break; default: $add = empty($value) || strpos(strtolower($recordValue), strtolower($value)) !== false; } break; default: $value = intval($state['value']); $recordValue = $record->findInt($fieldID); switch ($relation) { case 1: $add = $recordValue != $value; break; case 2: $add = $recordValue < $value; break; case 3: $add = $recordValue > $value; break; default: $add = $recordValue == $value; } } if (!$add) { break; } } if ($add) { $filteredPeople[] = $person; } } } return $filteredPeople; }
/** * Returns a list of all fields belonging to user's organisation * * @since 0.1.3 */ public function actionFields() { $em = DB::getEntityManager(); $fieldRepo = $em->getRepository(Field::getEntityNamespace()); /** @var FieldEntity[] $fields */ $fields = $fieldRepo->findBy(['organisation' => Apollo::getInstance()->getUser()->getOrganisationId(), 'is_hidden' => false]); $response['error'] = null; $data = []; for ($i = 0; $i < count($fields); $i++) { $field = $fields[$i]; $fieldData = []; $fieldData['id'] = $field->getId(); $fieldData['essential'] = $field->isEssential(); $fieldData['name'] = $field->getName(); $fieldData['type'] = $field->getType(); $subtype = 0; if ($field->getType() == 2) { if ($field->hasDefault()) { if ($field->isAllowOther()) { $subtype = 4; } elseif ($field->isMultiple()) { $subtype = 5; } else { $subtype = 3; } } else { if ($field->isMultiple()) { $subtype = 2; } else { $subtype = 1; } } } $fieldData['subtype'] = $subtype; $defaults = $field->getDefaults(); $defaultsData = []; for ($k = 0; $k < count($defaults); $k++) { $defaultsData[] = $defaults[$k]->getValue(); } $fieldData['defaults'] = $defaultsData; $data[] = $fieldData; } $response['data'] = array_reverse($data); echo json_encode($response); }