/** * Validate the form */ private function validateForm() { // is the form submitted? if ($this->frm->isSubmitted()) { // cleanup the submitted fields, ignore fields that were added by hackers $this->frm->cleanupFields(); // shorten fields $fileCSV = $this->frm->getField('csv'); $chkGroups = $this->frm->getField('groups'); // validate fields $fileCSV->isFilled(BL::err('CSVIsRequired')); // convert the CSV file to an array $csv = $fileCSV->isFilled() ? BackendCSV::fileToArray($fileCSV->getTempFileName()) : null; // check if the csv is valid if ($csv === false || empty($csv) || !isset($csv[0])) { $fileCSV->addError(BL::err('InvalidCSV')); } // there was a csv file found if (!empty($csv)) { // fetch the columns of the first row $columns = array_keys($csv[0]); // loop the columns foreach ($csv as $row) { // fetch the row columns $rowColumns = array_keys($row); // check if the arrays match if ($rowColumns != $columns) { // add an error to the CSV files $fileCSV->addError(BL::err('InvalidCSV')); // exit loop break; } } } // get values $values = $this->frm->getValues(); // check if at least one recipient group is chosen if (empty($values['groups'])) { $chkGroups->addError(BL::err('ChooseAtLeastOneGroup')); } // no errors? if ($this->frm->isCorrect()) { // convert the CSV file to an array, and fetch the group's CM ID $csv = BackendCSV::fileToArray($fileCSV->getTempFileName(), null, null, ';', '"'); // process our import, and get the failed subscribers $failedSubscribers = $this->processImport($csv, $values['groups']); // show a detailed report $this->tpl->assign('import', false); // no failed subscribers found if (empty($failedSubscribers)) { // trigger event BackendModel::triggerEvent($this->getModule(), 'after_import_address'); // redirect to success message $this->redirect(BackendModel::createURLForAction('addresses') . '&report=imported-addresses&var[]=' . count($csv) . '&var[]=' . count($values['groups'])); } else { // write a CSV file to the cache $csvFile = 'import-report-' . SpoonFilter::urlise(BackendModel::getUTCDate()) . '.csv'; BackendCSV::arrayToFile(BACKEND_CACHE_PATH . '/mailmotor/' . $csvFile, $failedSubscribers, null, null, ';', '"'); // trigger event BackendModel::triggerEvent($this->getModule(), 'after_import_address_with_failed_items', array('failed' => $failedSubscribers)); // redirect to failed message with an additional parameter to display a download link to the report-csv form cache. $this->redirect(BackendModel::createURLForAction('addresses') . '&error=imported-addresses&var[]=' . count($csv) . '&var[]=' . count($values['groups']) . '&var[]=' . count($failedSubscribers) . '&csv=' . $csvFile); } } } }