needlogin = true; $me = new User(); $me->loadMe(); $this->me = $me; $this->layout()->set("me", $me); if(!$me->is(["Admin", "netowner", "salespartner"])) { $this->redirect("Dashboard"); } } protected function indexAction() { $this->layout()->setTemplate("Preordernotification/Index"); $rfilter = $this->request->filter; if(!is_array($rfilter)) { $rfilter = []; } $this->layout->set("filter", $rfilter); $where = ""; $filter = $this->getPreparedFilter($rfilter); // pagination defaults $pagination = []; $pagination['start'] = 0; $pagination['count'] = 25; $pagination['maxItems'] = 0; if(is_numeric($this->request->s)) { $pagination['start'] = intval($this->request->s); } $preorder_filter = $filter; $my_campaigns = []; $my_campaign_ids = []; if($this->me->is("Admin")) { if($filter['preordercampaign_id']) { $this->layout()->set("campaign", new Preordercampaign($filter['preordercampaign_id'])); } else { $my_campaigns = PreordercampaignModel::getAll(); } $this->layout()->set("my_campaigns", PreordercampaignModel::getAll()); } else { $my_networks = $this->me->myNetworks(["netowner", "salespartner"]); //var_dump($my_networks);exit; $user_network_ids = $this->me->getFlag("preorder_networks")->value(); if($user_network_ids) { $user_network_ids = json_decode($user_network_ids); } if(is_array($user_network_ids) && count($user_network_ids)) { if(!$my_networks) { foreach($user_network_ids as $mnid) { $my_networks[] = new Network($mnid); } } else { //var_dump($user_network_ids, $my_networks);exit; $new_my_networks = []; foreach($my_networks as $network) { if(in_array($network->id, $user_network_ids)) { $new_my_networks[$network->id] = $network; } } $my_networks = $new_my_networks; } } foreach($my_networks as $network) { foreach(PreordercampaignModel::search(['network_id' => $network->id]) as $campaign) { $my_campaigns[] = $campaign; if(!in_array($campaign->id, $my_campaign_ids)) $my_campaign_ids[] = $campaign->id; } } //var_dump($my_network_ids,$my_campaign_ids);exit; $this->layout()->set("my_campaigns", $my_campaigns); if($filter['preordercampaign_id'] && in_array($filter['preordercampaign_id'], $my_campaign_ids)) { $campaign_id = $filter['preordercampaign_id']; if(is_numeric($campaign_id) && $campaign_id > 0) { $campaign = new Preordercampaign($campaign_id); $this->layout()->set("campaign", $campaign); } } else { $filter['preordercampaign_id'] = $my_campaign_ids; } } //var_dump($filter);exit; $pagination['maxItems'] = PreordernotificationModel::count($filter); $notifications = PreordernotificationModel::search($filter, $pagination); $this->layout()->set("pagination", $pagination); $this->layout()->set("notifications", $notifications); } private function getPreparedFilter($filter) { $new_filter = []; if(is_array($filter) && count($filter)) { foreach($filter as $name => $value) { $new_filter[$name] = $value; } } return $new_filter; } protected function addAction() { $this->layout()->setTemplate("Preordernotification/Form"); if(!$this->request->preordercampaign_id) { $this->layout()->setFlash("Keine Kampagne ausgewählt!", "warn"); } $campaign_id = $this->request->preordercampaign_id; $campaign = new Preordercampaign($campaign_id); $this->layout()->set("campaign", $campaign); $partners = AddressModel::search(['addresstype' => ['netowner', 'salespartner']]); $this->layout()->set("partners", $partners); } protected function editAction() { $id = $this->request->id; if(!is_numeric($id) || $id < 1) { $this->layout()->setFlash("Aussendung nicht gefunden", "error"); $this->redirect("Preordernotification"); } $notification = new Preordernotification($id); if(!$notification->id) { $this->layout()->setFlash("Aussendung nicht gefunden", "error"); $this->redirect("Preordernotification"); } //var_dump($notification->filter);exit; $this->request->set("preordercampaign_id", $notification->preordercampaign_id); // needed in addAction() $this->layout()->set("notification", $notification); return $this->addAction(); } protected function saveAction() { $r = $this->request; //var_dump($r->get(), $_FILES);exit; /* * add or edit */ $id = $r->id; if(is_numeric($id) && $id > 0) { $mode = "edit"; $notification = new Preordernotification($id); if(!$notification->id) { $this->layout()->setFlash("Aussendung nicht gefunden", "error"); $this->redirect("Preordernotification"); } } else { $id = false; $mode = "add"; } /* * check campaign and permissions */ $campaign_id = $r->preordercampaign_id; if(!$campaign_id) { $this->layout()->setFlash("Vorbestellkampagne nicht gefunden", "error"); $this->redirect("Preordernotification"); } $campaign = new Preordercampaign($campaign_id); if(!$campaign->id) { $this->layout()->setFlash("Vorbestellkampagne nicht gefunden", "error"); $this->redirect("Preordernotification"); } // check permission if(!$this->me->is("Admin")) { /*$my_campaign_ids = []; $my_networks = $this->me->myNetworks(["netowner", "salespartner"]); //var_dump($my_networks);exit; foreach($my_networks as $network) { foreach(PreordercampaignModel::search(['network_id' => $network->id]) as $campaign) { if(!in_array($campaign->id, $my_campaign_ids)) $my_campaign_ids[] = $campaign->id; } } if(!in_array($campaign_id, $my_campaign_ids)) { $this->layout()->setFlash("Vorbestellkampagne nicht gefunden", "error"); $this->redirect("Preordernotification"); }*/ $my_campaigns = []; $my_campaign_ids = []; $my_networks = $this->me->myNetworks(["netowner", "salespartner"]); //var_dump($my_networks);exit; $user_network_ids = $this->me->getFlag("preorder_networks")->value(); if($user_network_ids) { $user_network_ids = json_decode($user_network_ids); } if(is_array($user_network_ids) && count($user_network_ids)) { if(!$my_networks) { foreach($user_network_ids as $mnid) { $my_networks[] = new Network($mnid); } } else { //var_dump($user_network_ids, $my_networks);exit; $new_my_networks = []; foreach($my_networks as $network) { if(in_array($network->id, $user_network_ids)) { $new_my_networks[$network->id] = $network; } } $my_networks = $new_my_networks; } } foreach($my_networks as $network) { foreach(PreordercampaignModel::search(['network_id' => $network->id]) as $campaign) { if(!in_array($campaign->id, $my_campaign_ids)) $my_campaign_ids[] = $campaign->id; } } if(!in_array($campaign_id, $my_campaign_ids)) { $this->layout()->setFlash("Vorbestellkampagne nicht gefunden", "error"); $this->redirect("Preordernotification"); } } /* * data colletion */ $filter = []; if(is_array($r->type) && count($r->type)) { $filter['type'] = []; foreach($r->type as $type) { switch($type) { case "interest": $filter["type"][] = "interest"; break; case "provision": $filter["type"][] = "provision"; break; case "order": $filter["type"][] = "order"; break; case "reorder": $filter["type"][] = "reorder"; break; } } } if(is_array($r->connection_type) && count($r->connection_type)) { $filter['connection_type'] = []; foreach($r->connection_type as $type) { switch($type) { case "single-dwelling": $filter["connection_type"][] = "single-dwelling"; break; case "multi-dwelling": $filter["connection_type"][] = "multi-dwelling"; break; case "apartment-building": $filter["connection_type"][] = "apartment-building"; break; case "apartment": $filter["connection_type"][] = "apartment"; break; case "business": $filter["connection_type"][] = "business"; break; } } } if(is_array($r->status_id) && count($r->status_id)) { $filter["status_id"] = []; foreach($r->status_id as $status_id) { $test_status = new Preorderstatus($status_id); if(!$test_status || !$test_status->id) continue; $filter["status_id"][] = $status_id; } } //var_dump($filter); $data = []; $data['preordercampaign_id'] = $campaign_id; $data['sender_email'] = $r->sender_email; $data['sender_name'] = $r->sender_name; $data['sender_replyto'] = $r->sender_replyto; $data['subject'] = $r->subject; $data['body_html'] = $r->body_html; $data["attach_borderpoint"] = $r->attach_borderpoint; $data['note'] = $r->note; if($r->tosend_day) { $tosend_day = $r->tosend_day; $tosend_hour = $r->tosend_hour; if($tosend_hour < 0 || $tosend_hour > 23) { $tosend_hour = 0; } $data['tosend_date'] = self::dateToTimestamp($tosend_day . " " . str_pad($tosend_hour, 2, "0", STR_PAD_LEFT) . ":00:00"); } $data['preorder_filter'] = json_encode($filter); //var_dump($data);exit; if($mode == "edit") { $notification->update($data); } else { $notification = PreordernotificationModel::create($data); } $new_id = $notification->save(); if(!$new_id) { $this->layout()->setFlash("Fehler beim Speichern", "error"); if($id) { $this->redirect("Preordernotification", "edit", ['id' => $id]); } else { $this->redirect("Preordernotification"); } } /* * Attachment upload */ 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_PREORDERNOTIFICATION_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_PREORDERNOTIFICATION_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 { $pnf = []; $pnf['preordernotification_id'] = $notification->id; $pnf['file_id'] = $file_id; $pnf['filename'] = $file->filename; $notification_file = PreordernotificationFileModel::create($pnf); if(!$notification_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 $pnf_id => $check) { if(!$check) continue; $pnf = new PreordernotificationFile($pnf_id); if($pnf->preordernotification_id != $notification->id) continue; $pnf->file->delete(); $pnf->delete(); } } // get and save preorder count $preorder_filter = json_decode($notification->preorder_filter, true); $preorder_filter['preordercampaign_id'] = $notification->preordercampaign_id; $preorder_count = PreorderModel::countActive($preorder_filter); $notification->recipient_count = $preorder_count; $notification->save(); if($r->send_testmail && $r->testmail_to) { $preorder = PreorderModel::getFirstActive($preorder_filter); if($this->attach_borderpoint) { $i = 1; while(!$preorder->adb_hausnummer->gps_lat && !$preorder->adb_hausnummer->gps_long) { $this->log->debug(__METHOD__.": round $i"); $preorder = PreorderModel::searchActive($preorder_filter, ["start" => $i, "count" => 1]); if(!$preorder) break; $i++; } } if(!$preorder) { $this->layout()->setFlash("Testmail konnte nicht versendet werden. Keine Empfänger gefunden", "warn"); $this->redirect("Preordernotification", "edit", ['id' => $new_id]); } $notification->sendToPreorder($preorder, $r->testmail_to); $this->layout()->setFlash("Test Email erfolgreich versendet", "success"); $this->redirect("Preordernotification", "edit", ['id' => $new_id]); } $this->layout()->setFlash("Erfolgreich gepeichert.", "success"); if($r->return == "index") { $this->redirect("Preordernotification"); } else { $this->redirect("Preordernotification", "edit", ['id' => $new_id]); } } protected function EmailLog() { $this->layout()->setTemplate("Preordernotification/EmailLog"); $id = $this->request->id; if(!is_numeric($id) || $id < 1) { $this->layout()->setFlash("Aussendung nicht gefunden", "error"); $this->redirect("Preordernotification"); } $notification = new Preordernotification($id); if(!$notification->id) { $this->layout()->setFlash("Aussendung nicht gefunden", "error"); $this->redirect("Preordernotification"); } $this->layout()->set("notification", $notification); $filter = $this->request->filter; if(!is_array($filter)) { $filter = []; } $this->layout->set("filter", $filter); $filter["object_type"] = "Preordernotification"; $filter["object_id"] = $id; // pagination defaults $pagination = []; $pagination['start'] = 0; $pagination['count'] = 25; $pagination['maxItems'] = 0; if(is_numeric($this->request->s)) { $pagination['start'] = intval($this->request->s); } $pagination["maxItems"] = EmailLog::count($filter); $emails = EmailLog::search($filter, $pagination); $this->layout()->set("pagination", $pagination); $this->layout()->set("emails", $emails); } protected function apiAction() { $do = $this->request->do; $data = []; switch($do) { case "getLoggedEmail": $return = $this->getLoggedEmail(); 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); } protected function getLoggedEmail() { $preordernotification_id = $this->request->nid; $emaillog_id = $this->request->eid; if(!is_numeric($preordernotification_id) || $preordernotification_id < 1) { return false; } if(!is_numeric($emaillog_id) || $emaillog_id < 1) { return false; } $notification = new Preordernotification($preordernotification_id); if(!$notification->id) { return false; } $emaillog = new EmailLog($emaillog_id); if(!$emaillog->id) { return false; } $return = [ "preordernotification_id" => $preordernotification_id, "emaillog_id" => $emaillog_id, "from" => $emaillog->from, "to" => $emaillog->to, "subject" => $emaillog->subject, "body" => ($emaillog->body_html) ? $emaillog->body_html : $emaillog->body_text, "bodyIsHtml" => (bool) $emaillog->body_html, "sent" => date("d.m.Y H:i", $emaillog->create), "headers" => json_decode($emaillog->headers), "attachments" => [], ]; if(is_array($emaillog->attachments) && count($emaillog->attachments)) { foreach($emaillog->attachments as $attachment) { $return["attachments"][] = [ "id" => $attachment->id, "hash" => $attachment->content->sha256, "filename" => $attachment->filename, "filesize" => ($attachment->content) ? $attachment->content->filesize : 0, "mimetype" => ($attachment->content) ? $attachment->content->mimetype : "", ]; } } return $return; } }