needlogin=true; $me = new User(); $me->loadMe(); $this->me = $me; $this->layout()->set("me",$me); if(!$me->is(["Admin"])) { $this->redirect("Dashboard"); } } protected function indexAction() { if($this->request->resetFilter) { unset($_SESSION[MFAPPNAME.'-Mailtemplate-filter']); } $filter = []; if(is_array($this->request->filter)) { $filter = $this->request->filter; $_SESSION[MFAPPNAME.'-Mailtemplate-filter'] = $filter; } else { if(array_key_exists(MFAPPNAME.'-Mailtemplate-filter', $_SESSION) && count($_SESSION[MFAPPNAME.'-Mailtemplate-filter'])) { $filter = $_SESSION[MFAPPNAME.'-Mailtemplate-filter']; } } $this->layout->set("filter", $filter); $filter = $this->getPreparedFilter($filter); // pagination defaults $pagination = []; $pagination['start'] = 0; $pagination['count'] = 20; $pagination['maxItems'] = 0; if(is_numeric($this->request->s)) { $pagination['start'] = intval($this->request->s); } $pagination['maxItems'] = MailtemplateModel::count($filter); $this->layout()->set("pagination", $pagination); $templates = MailtemplateModel::search($filter, $pagination); $this->layout()->set("templates", $templates); } private function getPreparedFilter($filter) { $new_filter = []; if(array_key_exists("is_include", $filter) && !is_numeric($filter["is_include"])) { unset($filter["is_include"]); } foreach($filter as $name => $value) { $new_filter[$name] = $value; } return $new_filter; } protected function addAction() { $this->layout()->setTemplate("Mailtemplate/Form"); $embeds = MailtemplateModel::search(["is_include" => 1]); $this->layout()->set("embeds", $embeds); } protected function editAction() { $id = $this->request->id; $template = new Mailtemplate($id); if(!$template->id) { $this->layout()->setFlash("Emailtemplate nicht gefunden.", "error"); $this->redirect("Mailtemplate"); } $this->layout()->set("template", $template); return $this->addAction(); } protected function saveAction() { $r = $this->request; //var_dump($r->get());exit; $id = $r->id; if(is_numeric($id) && $id > 0) { $mode = "edit"; $template = new Mailtemplate($id); if(!$template->id) { $this->layout()->setFlash("Emailtemplate nicht gefunden", "error"); $this->redirect("Mailtemplate"); } } else { $mode = "add"; } $data = []; $data["name"] = $r->name; $data["code"] = null; $data["is_include"] = ($r->is_include) ? 1 : 0; $data["subject"] = ($r->subject) ? $r->subject : null; $data["description"] = $r->description; $data["note"] = ($r->note) ? $r->note : null; if($r->is_html) { $data["body_html"] = ($r->body_html) ? $r->body_html : null; $data["body_text"] = null; } else { $data["body_text"] = ($r->body_text) ? $r->body_text : null; $data["body_html"] = null; } if($mode == "edit") { $data["code"] = $template->code; } if(!$data["code"]) { $this->log->debug("if !code [".$data["code"]."]"); $new_code = strtolower($data["name"]); $new_code = iconv("utf-8", "ASCII//TRANSLIT", $new_code); $new_code = preg_replace('/[^a-z0-9-]/i', "-", $new_code); $this->log->debug("1st try new code [".$new_code."]"); if(!$new_code) { $this->layout()->setFlash("Fehler beim Code generieren. Bitte sinnvollen Name vergeben!", "error"); $this->redirect("Mailtemplate"); } // special chars at the end while(preg_match('/[^a-z0-9]$/', $new_code)) { $this->log->debug("while preg_match() end [$new_code]"); $new_code = substr($new_code, 0, -1); if(!$new_code) { $this->layout()->setFlash("Fehler beim Code generieren. Bitte sinnvollen Name vergeben!", "error"); $this->redirect("Mailtemplate"); } } // special chars at the beginning while(preg_match('/^[^a-z0-9]/', $new_code)) { $this->log->debug("while preg_match() beginning [$new_code]"); $new_code = substr($new_code, 1); if(!$new_code) { $this->layout()->setFlash("Fehler beim Code generieren. Bitte sinnvollen Name vergeben!", "error"); $this->redirect("Mailtemplate"); } } while($check_mt = MailtemplateModel::getFirst(["code" => $new_code])) { if($mode == "edit" && $check_mt->id == $id) break; $this->log->debug("while getFirst() [".$data["code"]."]"); $last_char = substr($new_code, -1, 1); if(is_numeric($last_char)) { $last_two_chars = substr($new_code, -2); if(is_numeric($last_two_chars)) { // avoid increment if the last number could be a status code like 141 $new_code .= "-1"; } else { $new_code = substr($new_code, 0, -1); $new_code .= ++$last_char; } } else { $new_code .= "-1"; } } $data["code"] = $new_code; } //var_dump($data);exit; if($mode == "edit") { $template->update($data); } else { $template = MailtemplateModel::create($data); } if(!$template->save()) { $this->layout()->setFlash("Fehler beim Speichern", "error"); $this->redirect("Mailtemplate"); } if(array_key_exists("attachment", $_FILES)) { $files = $_FILES['attachment']; if(is_array($files) && count($files)) { $file_errors = 0; foreach($files['name'] as $i => $name) { if(!$name) continue; $upload_error = false; try { $upload = new mfUpload(['attachment', $i]); $upload->setSavepath(MFUPLOAD_FILE_SAVE_PATH . "/" . TT_MAILTEMPLATE_FILE_UPLOAD_SUBFOLDER); } catch(Exception $e) { $this->layout()->setFlash("Dateiupload fehlgeschlagen: ".$e->getMessage(), "warn"); $file_errors++; continue; } if(!$upload->getSize()) { $this->layout()->setFlash("Dateiupload fehlgeschlagen: Datei ist leer!", "warn"); $upload_error = true; } $mime = ""; if(!$upload_error) { try { $mime = $upload->getMimetype(); $upload->save(); } catch(Exception $e) { $this->layout()->setFlash("Dateiupload fehlgeschlagen", "warn"); $upload_error = true; } } if($upload_error) { $file_errors++; continue; } $file_data = []; $file_data['name'] = $upload->getOriginalFilename(); $file_data['filename'] = $upload->getOriginalFilename(); $file_data['subfolder'] = TT_MAILTEMPLATE_FILE_UPLOAD_SUBFOLDER; $file_data['store_filename'] = $upload->getFilename(); $file_data['orig_filename'] = $upload->getOriginalFilename(); $file_data['mimetype'] = $mime; $file = FileModel::create($file_data); $file_id = $file->save(); if(!$file_id) { $this->layout()->setFlash("Dateiupload fehlgeschlagen", "warn"); unlink($upload->getSavepath()."/".$upload->getFilename()); } else { $mtf = []; $mtf['mailtemplate_id'] = $template->id; $mtf['file_id'] = $file_id; $mtf['filename'] = $file->filename; $template_file = MailtemplateFileModel::create($mtf); if(!$template_file->save()) { $file->delete(); unlink($upload->getSavepath()."/".$upload->getFilename()); $this->layout()->setFlash("Dateiupload fehlgeschlagen", "warn"); } } } } } /* * delete files */ //var_dump($r->deletefile);exit; if(is_array($r->deletefile)) { foreach($r->deletefile as $mtf_id => $check) { if(!$check) continue; $mtf = new MailtemplateFile($mtf_id); if($mtf->mailtemplate_id != $template->id) continue; $mtf->file->delete(); $mtf->delete(); } } $this->layout()->setFlash("Emailtemplate erfolgreich gespeichert", "success"); if($r->return == "index") { $this->redirect("Mailtemplate"); } else { $this->redirect("Mailtemplate", "edit", ["id" => $template->id]); } } protected function apiAction() { if(!$this->me->is(["Admin"])) { $this->redirect("Dashboard"); } $do = $this->request->do; $data = []; switch($do) { case "getMailtemplate": $return = $this->getMailtemplateApi(); break; default: $return = false; } if(!is_array($return) || !count($return)) { $data = ["status" => "error"]; $this->returnJson($data); } $data['status'] = "OK"; $data['result'] = $return; $this->returnJson($data); } private function getMailtemplateApi() { $mt_id = $this->request->id; if(!$mt_id) { $this->log->debug(__METHOD__.": mt_id invalid"); return false; } $template = new Mailtemplate($mt_id); if(!$template->id) { $this->log->debug(__METHOD__.": Mailtemplate not found"); return false; } $data = $template->data; $data->is_include = boolval($data->is_include); if($data->body_text) { $data->body_text = $template->renderBody(); } if($data->body_html) { $data->body_html = $template->renderBody(); } unset($data->create_by, $data->edit_by, $data->note); $template_files = []; if(is_array($template->files) && count($template->files)) { foreach($template->files as $file) { $template_files[] = [ "file_id" => $file->file_id, "filename" => $file->filename ]; } } $data->files = $template_files; return (array)$data; } }