needlogin = true; $me = new User(); $me->loadMe(); $this->me = $me; $this->layout()->set("me", $me); if (!$me->isAdmin()) { // all users can call non-action methods if ($this->action != "" || $request != null) { $this->redirect("Dashboard"); } } } protected function indexAction($request) { if (!$this->isAdmin()) { throw new Exception("Forbidden", 403); } $this->layout()->setTemplate('User/Index'); if ($this->request->filter) { $users = UserModel::search($this->request->filter); } else { $users = UserModel::getAll(); } $this->layout()->set('users', $users); $addresses = AddressModel::getAll(); $this->layout()->set("addresses", $addresses); $this->layout()->set("filter", $this->request->filter); } protected function addAction($request) { if (!$this->isAdmin()) { throw new Exception("Forbidden", 403); } $this->layout()->setTemplate('User/Form'); $roles = TT_NETWORK_ROLES_WITH_OWNER; $roles[] = "systemowner"; $addresses = AddressModel::search(["addresstype" => $roles]); $this->layout()->set("addresses", $addresses); if ($this->request->address_id) { $this->layout()->set("address_id", $this->request->address_id); } } protected function editAction($request) { if (!$this->isAdmin()) { throw new Exception("Forbidden", 403); } $this->layout()->setTemplate('User/Form'); $id = $request['id']; if (!is_numeric($id) || $id <= 0) { throw new Exception("User $id not found", 604); } $user = new User($id); $this->layout()->set('user', $user); $addresses = AddressModel::getAll(); $this->layout()->set("addresses", $addresses); } protected function generateApikey($request) { if (!$this->isAdmin()) { $this->redirect("Dashboard"); } $id = $request['id']; if (!is_numeric($id) || $id < 1) { $this->layout()->setFlash("User nicht gefunden.", "error"); $this->redirect("User"); } $user = new User($id); if (!$user->id) { $this->layout()->setFlash("User nicht gefunden.", "error"); $this->redirect("User"); } $user->apikey = $user->createApiKey(); $user->save(); $this->layout()->setFlash("API Key erfolgreich generiert.", "success"); $this->redirect("User", "edit", ['id' => $id]); } protected function profileAction($request) { } protected function saveAction() { $r = $this->request; $id = $r->id; if (!$this->isAdmin()) { $id = $this->me->id; $request['username'] = $this->me->username; unset($r->address_id); } if (!$id && !$r->username) { self::redirect('User'); } $user = new User($id); // check if new user already exits if ($this->isAdmin() && !$r->id) { $tu = new User(); $tu->loadByUsername($r->username); if ($tu->id) { $this->layout()->setFlash("Benutzer mit diesem Benutzername bereits vorhanden!", "error"); $this->redirect("User"); } } if (!$user->permissions) { $user->permissions = new WorkerPermission(); } if ($r->username) { $user->username = $r->username; } if ($r->name) { $user->name = $r->name; } if ($r->email) { $user->email = $r->email; } if ($r->mobile) { $user->mobile = $r->mobile; } else { $user->mobile = NULL; } if ($this->isAdmin()) { if ($r->address_id) { $user->address_id = intval($r->address_id); //var_dump($user);exit; $address = new Address($user->address_id); if (!$address->id) { throw new Exception("Unbekannte Firma/Person"); } } else { $user->address_id = null; } } if ($r->password) { if ($r->password === $r->password2) { $user->password = mfLoginController::generatePasswordHash($r->password); } else { $this->layout()->setFlash("Passwörter stimmen nicht überein!", "error"); } } $user->edit_by = $this->me->id; if (!$id) { $user->create_by = $this->me->id; } $id = $user->save(); if ($this->isAdmin()) { if ($r->admin == "true" || $user->id == 1) { $user->permissions->admin = "true"; } else { $user->permissions->admin = "false"; } if ($r->employee == "true") { $user->permissions->employee = "true"; } else { $user->permissions->employee = "false"; } if ($r->technician == "true") { $user->permissions->technician = "true"; } else { $user->permissions->technician = "false"; } if ($r->preorderfront == "true") { $user->permissions->preorderfront = "true"; } else { $user->permissions->preorderfront = "false"; } if ($r->preorderlogistics == "true") { $user->permissions->preorderlogistics = "true"; } else { $user->permissions->preorderlogistics = "false"; } // set can permissions $user->permissions->canBuilding = "false"; $user->permissions->canPipework = "false"; $user->permissions->canLinework = "false"; $user->permissions->canPatching = "false"; $user->permissions->canFilestore = "false"; $user->permissions->canCpeprovisioning = "false"; $user->permissions->canCpeshipping = "false"; $user->permissions->canVoipnumbering = "false"; $user->permissions->canPreorder = "false"; $user->permissions->canOrder = "false"; $user->permissions->canFibu = "false"; $user->permissions->canStatistics = "false"; if($r->get("can") && is_array($r->can)) { foreach($r->can as $key => $can) { //var_dump($key . "=> ".$can); if($can) { $user->permissions->{"can$key"} = "true"; } } } $user->permissions->save(); // save networks $pn = $user->getFlag("preorder_networks"); if (is_array($r->preorder_networks) && count($r->preorder_networks)) { $pn->value(json_encode($r->preorder_networks)); $pn->save(); $user->permissions->canPreorder = "true"; $user->permissions->save(); } else { $pn->delete(); } // employee number $enum = new WorkerFlag($user->id, "employee_number"); if($r->employee_number && $user->permissions->employee == "true") { $enum->value($r->employee_number); $enum->save(); } else { $enum->delete(); } } $this->layout()->setFlash("Benutzer gespeichert.", "success"); self::redirect('User'); } protected function deleteAction($request) { if (!$this->isAdmin()) { $this->redirect("Bridge"); } $id = $request['id']; if (!is_numeric($id) || $id <= 0) { throw new Exception("User $id not found", 604); } $user = new User($id); if ($user->id == $id) { $user->delete(); } self::redirect("User"); } protected function pwchangeAction($request) { $me = new User(); $me->loadMe(); $pw1 = $request['password']; $pw2 = $request['password2']; if (!$pw1 == $pw2) { throw new Exception("Passwords don't match! Password change aborted."); } if (strlen($pw1) < 8) { throw new Exception("Passwords must be 8 characters minimum!"); } if ($pw1 == "12345678" || $pw1 == "123456789" || $pw1 == "password" || $pw1 == "passwort") { throw new Exception("Be a little more creative with your password please..."); } $me->password = mfLoginController::generatePasswordHash($pw1); $me->save(); $this->redirect("Dashboard"); } public function getUsers() { $users = array(); $res = $this->db()->select(MFUSERTABLE, '*', '1=1 ORDER BY username'); if ($this->db()->num_rows($res)) { while ($data = $this->db()->fetch_object($res)) { $users[$data->id] = new User($data); } } return $users; } private function isAdmin() { $me = new User(); $this->layout->set("me", $me); $me->loadMe(); return $me->isAdmin(); } }