Esempio n. 1
0
 public function index()
 {
     $f3 = \Base::instance();
     $this->_requireLogin();
     $user = $f3->get('user');
     $user_obj = $f3->get('user_obj');
     $user_org_links = $f3->get('user_org_links');
     $db = $f3->get('db.instance');
     $tickets = $db->exec('SELECT * FROM support_tickets WHERE memberId = ? ORDER BY id DESC', $user['id']);
     foreach ($tickets as $id => $ticket) {
         $result = $db->exec('SELECT COUNT(*) AS `count` FROM support_tickets_msg WHERE ticketId = ?', $ticket['id']);
         $tickets[$id]['messages_count'] = $result[0]['count'];
         // Assigned or not ?
         if ($ticket['assignedUserId'] != 0) {
             $assignedUser = new User();
             $assignedUser->load($ticket['assignedUserId']);
             $tickets[$id]['assignedUser'] = $assignedUser->cast();
         }
     }
     $f3->set('tickets', $tickets);
     $active_tickets = $db->exec("SELECT * FROM support_tickets WHERE memberId = ? AND status != 'closed'", $user['id']);
     $f3->set('active_tickets', $active_tickets);
     $closed_tickets = $db->exec("SELECT * FROM support_tickets WHERE memberId = ? AND status = 'closed'", $user['id']);
     $f3->set('closed_tickets', $closed_tickets);
     $f3->set('target', 'support/index.html');
     $this->_render('base.html');
 }
Esempio n. 2
0
 public function index()
 {
     $f3 = \Base::instance();
     $this->_requireLogin();
     $this->_requireRank('support');
     $user = $f3->get('user');
     $user_obj = $f3->get('user_obj');
     $user_org_links = $f3->get('user_org_links');
     $db = $f3->get('db.instance');
     $tickets = $db->exec('SELECT * FROM support_tickets ORDER BY id DESC');
     foreach ($tickets as $id => $ticket) {
         $result = $db->exec('SELECT COUNT(*) AS `count` FROM support_tickets_msg WHERE ticketId = ?', $ticket['id']);
         $tickets[$id]['messages_count'] = $result[0]['count'];
         // Assigned or not ?
         if ($ticket['assignedUserId'] != 0) {
             $assignedUser = new User();
             $assignedUser->load($ticket['assignedUserId']);
             $tickets[$id]['assignedUser'] = $assignedUser->cast();
         }
         // From who ?
         $ticketCreator = new User();
         $ticketCreator->load($ticket['memberId']);
         $tickets[$id]['member'] = $ticketCreator->cast();
     }
     $f3->set('tickets', $tickets);
     $active_tickets = $db->exec("SELECT * FROM support_tickets WHERE status != 'closed'");
     $f3->set('active_tickets', $active_tickets);
     $closed_tickets = $db->exec("SELECT * FROM support_tickets WHERE status = 'closed'");
     $f3->set('closed_tickets', $closed_tickets);
     // Very high priority tickets
     $prio_tickets = $db->exec("SELECT * FROM support_tickets WHERE status != 'closed' AND priority = 4 ORDER BY id DESC");
     foreach ($prio_tickets as $id => $ticket) {
         $result = $db->exec('SELECT COUNT(*) AS `count` FROM support_tickets_msg WHERE ticketId = ?', $ticket['id']);
         $prio_tickets[$id]['messages_count'] = $result[0]['count'];
         // Assigned or not ?
         if ($ticket['assignedUserId'] != 0) {
             $assignedUser = new User();
             $assignedUser->load($ticket['assignedUserId']);
             $prio_tickets[$id]['assignedUser'] = $assignedUser->cast();
         }
         // From who ?
         $ticketCreator = new User();
         $ticketCreator->load($ticket['memberId']);
         $prio_tickets[$id]['member'] = $ticketCreator->cast();
     }
     $f3->set('priority_tickets', $prio_tickets);
     // Some side-bar stats
     $result = $db->exec('SELECT count(*) AS `count` FROM users');
     $f3->set('users_count', $result[0]['count']);
     $f3->set('tickets_count', count($active_tickets));
     $f3->set('target', 'dashboard/admin/support/index.html');
     $this->_render('base.html');
 }
Esempio n. 3
0
 public function actionLogin()
 {
     if (!App::instance()->isGuest()) {
         $this->redirect('/site/index/');
     }
     $user = new User();
     if (isset($_POST['User']) && $user->load($_POST['User']) && $user->login()) {
         $_SESSION['loggedUserId'] = App::instance()->user->id;
         $this->redirect('/site/index/');
     }
     $this->render('login', ['user' => $user]);
 }
Esempio n. 4
0
 public function detailspost()
 {
     $f3 = \Base::instance();
     $this->_requireLogin();
     $this->_requireRank('support');
     $user = $f3->get('user');
     $user_obj = $f3->get('user_obj');
     $user_org_links = $f3->get('user_org_links');
     $db = $f3->get('db.instance');
     // Target user
     $tuser_id = $f3->get('PARAMS.id');
     $tuser = new User();
     $tuser->load($tuser_id);
     if ($tuser->rank > $user['rank']) {
         $f3->reroute($f3->get('PATH'));
     }
     // Update one by one
     $name = $f3->get('POST.tname');
     $username = $f3->get('POST.tusername');
     $email = $f3->get('POST.temail');
     $age = (int) $f3->get('POST.tage');
     $rank = $f3->get('POST.trank');
     $errors = [];
     if (empty($name)) {
         $errors[] = "Name is required";
     }
     if (!preg_match("/^[0-9a-z]{4,}\$/i", $username)) {
         $errors[] = "Usernames must be at least 4 characters and can only contain letters and numbers.";
     }
     if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
         $errors[] = "A valid email address is required.";
     }
     // Prevent setting the users rank to a rank higher then the user's one
     if ($rank > $user['rank']) {
         $errors[] = 'You can not set the users rank to a rank higher then yours';
     }
     if (empty($errors)) {
         $tuser->name = $name;
         $tuser->username = $username;
         $tuser->email = $email;
         $tuser->age = $age;
         $tuser->rank = $rank;
         $tuser->save();
         new Notification('Updated users profile successfully !', 'success', true);
         $f3->reroute($f3->get('PATH'));
     } else {
         $f3->set('errors', $errors);
         $f3->set('tuser', $tuser->cast());
         $f3->set('target', 'dashboard/admin/users/details.html');
         $this->_render('base.html');
     }
 }
Esempio n. 5
0
 public function invitepost()
 {
     $f3 = \Base::instance();
     $this->_requireLogin();
     $db = $f3->get('db.instance');
     $user = $f3->get('user');
     $user_obj = $f3->get('user_obj');
     $user_org = $f3->get('user_org');
     $user_org_links = $f3->get('user_org_links');
     $orgId = (int) $f3->get('PARAMS.id');
     // Check if user is part of the organisation
     $result = $db->exec('SELECT * FROM organisation_members WHERE orgId = :orgId AND memberId = :memberId', array('orgId' => $orgId, 'memberId' => $user['id']));
     if (empty($result)) {
         // Not member
         new Notification('You are not member of this organisation', 'danger', true);
         $f3->reroute('/organisations');
         return;
     } else {
         $orgMap = new Organisation();
         $orgMap->load($orgId);
         $f3->set('user_org_selected', $orgMap->cast());
         if ($f3->exists('POST.name') and !empty($f3->get('POST.name'))) {
             $invitedUser = new User();
             $invitedUser->load(array('(email = :email OR username = :email) AND deleted_date IS NULL', 'email' => $f3->get('POST.name')));
             if (!$invitedUser->loaded()) {
                 // No user with this email or username
                 $f3->set('error', 'No user with this email or password');
             } else {
                 // Generate new invitation entry
                 $security = new Security();
                 $accept_key = sha1($security->rand_bytes(32));
                 $db->exec('INSERT INTO organisations_invites(targetId, fromId, orgId, create_time, accept_key) VALUES(:targetId, :fromId, :orgId, :createTime, :acceptKey)', array('targetId' => $invitedUser->id, 'fromId' => $user['id'], 'orgId' => $orgId, 'createTime' => date("Y-m-d H:i:s"), 'acceptKey' => $accept_key));
                 new Notification("Invited <b>{$invitedUser->name}</b> to join this organisation", 'success', true);
                 $f3->reroute($f3->get('PATH'));
             }
         }
         $f3->set('target', 'dashboard/organisations/invite.html');
     }
     $this->_render('base.html');
 }
Esempio n. 6
0
 public function view()
 {
     $f3 = \Base::instance();
     $this->_requireLogin();
     $this->_requireRank('support');
     $user = $f3->get('user');
     $user_obj = $f3->get('user_obj');
     $user_org_links = $f3->get('user_org_links');
     $db = $f3->get('db.instance');
     $ticketId = $f3->get('PARAMS.id');
     $ticket = new Ticket();
     $ticket->load($ticketId);
     if ($ticket->loaded()) {
         if ($f3->exists('GET.action') and $f3->get('GET.action') == 'close') {
             $ticket->status = 'closed';
             $ticket->save();
             $f3->reroute($f3->get('PATH'));
         }
         $f3->set('ticket', $ticket->cast());
         // Load ticket messages
         $result = $db->exec('SELECT * FROM support_tickets_msg WHERE ticketId = ? ORDER BY id DESC', $ticket->id);
         foreach ($result as $id => $resp) {
             if ($resp['senderId'] == $user['id']) {
                 // The sender is the actual user, no need to load
                 $result[$id]['sender'] = $user;
             } else {
                 // Load the message senders information
                 $sender = new User();
                 $sender->load($resp['senderId']);
                 $result[$id]['sender'] = $sender->cast();
             }
         }
         $f3->set('ticket_msg', $result);
         $f3->set('target', 'dashboard/admin/support/view.html');
     } else {
         $f3->set('target', '404.html');
     }
     $this->_render('base.html');
 }
Esempio n. 7
0
 public function resumepost()
 {
     $f3 = \Base::instance();
     $this->_requireLogin();
     $user = $f3->get('user');
     $user_obj = $f3->get('user_obj');
     $user_org = $f3->get('user_org');
     $user_org_links = $f3->get('user_org_links');
     $errors = [];
     if ($f3->exists('POST.username')) {
         $username = $f3->get('POST.username');
         $username = $f3->scrub($username);
         if (preg_match('/^[a-z0-9]{5,}$/', $username)) {
             // Filter any already existing username
             if ($username != $user['username']) {
                 $user = new User();
                 $user->load(array('username = ?', $username));
                 if ($user->loaded()) {
                     $errors[] = 'This username is taken.';
                 } else {
                     $user_obj->username = $username;
                 }
             }
         } else {
             $errors[] = 'Username must be at least 5 characters long, with only numbers and lowercase letters in it.';
         }
     }
     if ($f3->exists('POST.fullName')) {
         $fullName = $f3->get('POST.fullName');
         $fullName = $f3->scrub($fullName);
         if (strlen($fullName) > 4) {
             $user_obj->name = htmlspecialchars($fullName);
         } else {
             $errors[] = 'Full name must be at least 5 characters long';
         }
     }
     if ($f3->exists('POST.email')) {
         $email = $f3->get('POST.email');
         if (filter_var($email, FILTER_VALIDATE_EMAIL)) {
             // Filter any already existing email
             if ($email != $user['email']) {
                 $user = new User();
                 $user->load(array('email = ?', $email));
                 if ($user->loaded()) {
                     $errors[] = 'This email is taken.';
                 } else {
                     $user_obj->email = $email;
                 }
             }
         } else {
             $errors[] = 'Incorrect email';
         }
     }
     if ($f3->exists('POST.age')) {
         $age = (int) $f3->get('POST.age');
         if ($age > 12) {
             $user_obj->age = $age;
         } else {
             $errors[] = 'You need to be at least 13 years old to use this service.';
         }
     }
     // Saving if no errors
     if (empty($errors)) {
         $user_obj->save();
         new Notification('Profile saved', 'success', true);
         $f3->reroute($f3->get('PATH'));
         return;
     } else {
         $f3->set('errors', $errors);
     }
     // Display a notification to masquerading administrators
     if ($f3->exists('SESSION.mask')) {
         new Notification('You are currently masquerading as a client, <a href="/dashboard/admin/masquerade/reveal">back to your admin account</a>', 'danger', true);
     }
     $f3->set('target', 'account/resume.html');
     $this->_render('base.html');
 }