projectDir = $projectDir; $this->entityManager = $entityManager; $this->fileService = $fileService; $this->documentRepository = $documentRepository; $this->documentCategoryRepository = $documentCategoryRepository; } public function createDocumentFromData(array $data) : Document { $documentCategory = $this->documentCategoryRepository->find($data['document_category_id']); $document = new Document($documentCategory); foreach ($data as $key => $value) { $pieces = explode('_', $key); foreach ($pieces as $k => $v) { $pieces[$k] = ucfirst($v); } $method = 'set' . implode('_', $pieces); if (method_exists($document, $method)) { $document->$method($value); } } return $document; } public function createDocumentCategoryFromData(array $data) : DocumentCategory { $documentCategory = new DocumentCategory(); foreach ($data as $key => $value) { $pieces = explode('_', $key); foreach ($pieces as $k => $v) { $pieces[$k] = ucfirst($v); } $method = 'set' . implode('_', $pieces); if (method_exists($documentCategory, $method)) { $documentCategory->$method($value); } } return $documentCategory; } public function updateDocumentFromData(Document $document, array $data) { foreach ($data as $key => $value) { $pieces = explode('_', $key); foreach ($pieces as $k => $v) { $pieces[$k] = ucfirst($v); } $method = 'set' . implode('_', $pieces); if (method_exists($document, $method)) { $document->$method($value); } } } public function updateDocumentCategoryFromData(DocumentCategory $documentCategory, array $data) { foreach ($data as $key => $value) { $pieces = explode('_', $key); foreach ($pieces as $k => $v) { $pieces[$k] = ucfirst($v); } $method = 'set' . implode('_', $pieces); if (method_exists($documentCategory, $method)) { $documentCategory->$method($value); } } } public function sanitiseDocumentData(array $data) : array { $documentCategory = $this->documentCategoryRepository->find($data['document_category_id']); $document = new Document($documentCategory); $stringValues = []; $intValues = []; foreach ($data as $key => $value) { $pieces = explode('_', $key); foreach ($pieces as $k => $v) { $pieces[$k] = ucfirst($v); } $method = 'get' . implode('_', $pieces); if ($method != 'getId' && method_exists($document, $method)) { $objval = $document->$method($value); if (is_string($objval)) { $stringValues[$key] = implode(' ', $pieces); } else if (is_int($objval)) { $intValues[$key] = implode(' ', $pieces); } } } foreach ($stringValues as $key => $value) { $data[$key] = htmlentities($data[$key], ENT_QUOTES | ENT_IGNORE, "UTF-8"); if (!is_string($data[$key])) { $data[$key] = ''; //don't allow null or false values in strings... filter var can return null } } foreach ($intValues as $key => $value) { $data[$key] = (int)$data[$key]; if ($data[$key] < 0 || $data[$key] > 9999) { $data[$key] = 0; } } return $data; } public function sanitiseDocumentCategoryData(array $data) : array { $documentCategory = new DocumentCategory(); $stringValues = []; $intValues = []; foreach ($data as $key => $value) { $pieces = explode('_', $key); foreach ($pieces as $k => $v) { $pieces[$k] = ucfirst($v); } $method = 'get' . implode('_', $pieces); if ($method != 'getId' && method_exists($documentCategory, $method)) { $objval = $documentCategory->$method($value); if (is_string($objval)) { $stringValues[$key] = implode(' ', $pieces); } else if (is_int($objval)) { $intValues[$key] = implode(' ', $pieces); } } } foreach ($stringValues as $key => $value) { $data[$key] = htmlentities($data[$key], ENT_QUOTES | ENT_IGNORE, "UTF-8"); if (!is_string($data[$key])) { $data[$key] = ''; //don't allow null or false values in strings... filter var can return null } } foreach ($intValues as $key => $value) { $data[$key] = (int)$data[$key]; if ($data[$key] < 0 || $data[$key] > 9999) { $data[$key] = 0; } } return $data; } public function validateDocumentData(array $data) : array { $documentCategory = $this->documentCategoryRepository->find($data['document_category_id']); $document = new Document($documentCategory); $result = [ 'success' => true, 'errors' => [] ]; $stringValues = []; $intValues = []; $requiredValues = [ 'title' ]; foreach ($data as $key => $value) { $pieces = explode('_', $key); foreach ($pieces as $k => $v) { $pieces[$k] = ucfirst($v); } $method = 'get' . implode('_', $pieces); if ($method != 'getId' && method_exists($document, $method)) { $objval = $document->$method($value); if (is_string($objval)) { $stringValues[$key] = implode(' ', $pieces); } else if (is_int($objval)) { $intValues[$key] = implode(' ', $pieces); } } } foreach ($stringValues as $key => $value) { if (isset($data[$key]) && is_string($data[$key])) { if (in_array($key, $requiredValues) && strlen($data[$key]) == 0) { $result['errors'][] = $value . ' is required.'; } else if (strlen($data[$key]) > 64) { $result['errors'][] = $value . ' is too long.'; } } else { $result['errors'][] = $value . ' not provided.'; } } foreach ($intValues as $key => $value) { if (isset($data[$key]) && is_int($data[$key])) { if (in_array($key, $requiredValues) && $data[$key] == 0) { $result['errors'][] = $value . ' is required.'; } else if (strlen($data[$key]) < 0) { $result['errors'][] = $value . ' cannot be negative.'; } } else { $result['errors'][] = $value . ' not provided.'; } } if (count($result['errors']) > 0) { $result['success'] = false; } return $result; } public function validateDocumentCategoryData(array $data) : array { $documentCategory = new DocumentCategory(); $result = [ 'success' => true, 'errors' => [] ]; $stringValues = []; $intValues = []; $requiredValues = [ 'category_name' ]; foreach ($data as $key => $value) { $pieces = explode('_', $key); foreach ($pieces as $k => $v) { $pieces[$k] = ucfirst($v); } $method = 'get' . implode('_', $pieces); if ($method != 'getId' && method_exists($documentCategory, $method)) { $objval = $documentCategory->$method($value); if (is_string($objval)) { $stringValues[$key] = implode(' ', $pieces); } else if (is_int($objval)) { $intValues[$key] = implode(' ', $pieces); } } } foreach ($stringValues as $key => $value) { if (isset($data[$key]) && is_string($data[$key])) { if (in_array($key, $requiredValues) && strlen($data[$key]) == 0) { $result['errors'][] = $value . ' is required.'; } else if (strlen($data[$key]) > 64) { $result['errors'][] = $value . ' is too long.'; } } else { $result['errors'][] = $value . ' not provided.'; } } foreach ($intValues as $key => $value) { if (isset($data[$key]) && is_int($data[$key])) { if (in_array($key, $requiredValues) && $data[$key] == 0) { $result['errors'][] = $value . ' is required.'; } else if (strlen($data[$key]) < 0) { $result['errors'][] = $value . ' cannot be negative.'; } } else { $result['errors'][] = $value . ' not provided.'; } } if (count($result['errors']) > 0) { $result['success'] = false; } return $result; } public function deleteDocumentCategory(DocumentCategory $documentCategory) { foreach ($documentCategory->getDocuments() as $document) { $this->deleteDocument($document); } $this->entityManager->remove($documentCategory); $this->entityManager->flush(); } public function deleteDocument(Document $document) { $this->fileService->delete('documentInternal', $document->getFilename()); $this->entityManager->remove($document); $this->entityManager->flush(); } }