Skip to content
Snippets Groups Projects
ajax.admin.php 5.53 KiB
Newer Older
  • Learn to ignore specific revisions
  • <?php
    
    require_once(INCLUDE_DIR . 'class.dept.php');
    
    require_once(INCLUDE_DIR . 'class.role.php');
    
    Jared Hancock's avatar
    Jared Hancock committed
    require_once(INCLUDE_DIR . 'class.team.php');
    
    
    class AdminAjaxAPI extends AjaxController {
    
        /**
         * Ajax: GET /admin/add/department
         *
         * Uses a dialog to add a new department
         *
         * Returns:
         * 200 - HTML form for addition
         * 201 - {id: <id>, name: <name>}
         *
         * Throws:
         * 403 - Not logged in
    
         * 403 - Not an administrator
    
         */
        function addDepartment() {
            global $ost, $thisstaff;
    
            if (!$thisstaff)
                Http::response(403, 'Agent login required');
    
            if (!$thisstaff->isAdmin())
                Http::response(403, 'Access denied');
    
    
            $form = new DepartmentQuickAddForm($_POST);
    
            if ($_POST && $form->isValid()) {
                $dept = Dept::create();
                $errors = array();
                $vars = $form->getClean();
                $vars += array(
    
                    'group_membership' => Dept::ALERTS_DEPT_AND_EXTENDED,
    
    Jared Hancock's avatar
    Jared Hancock committed
                if ($dept->update($vars, $errors)) {
    
                    Http::response(201, $this->encode(array(
                        'id' => $dept->id,
                        'name' => $dept->name,
                    ), 'application/json'));
    
                foreach ($errors as $name=>$desc)
                    if ($F = $form->getField($name))
                        $F->addError($desc);
            }
    
            $title = __("Add New Department");
    
    Jared Hancock's avatar
    Jared Hancock committed
            $path = ltrim($ost->get_path_info(), '/');
    
    Jared Hancock's avatar
    Jared Hancock committed
            include STAFFINC_DIR . 'templates/quick-add.tmpl.php';
        }
    
        /**
         * Ajax: GET /admin/add/team
         *
         * Uses a dialog to add a new team
         *
         * Returns:
         * 200 - HTML form for addition
         * 201 - {id: <id>, name: <name>}
         *
         * Throws:
         * 403 - Not logged in
    
         * 403 - Not an adminitrator
    
    Jared Hancock's avatar
    Jared Hancock committed
         */
        function addTeam() {
            global $ost, $thisstaff;
    
            if (!$thisstaff)
                Http::response(403, 'Agent login required');
    
            if (!$thisstaff->isAdmin())
                Http::response(403, 'Access denied');
    
    Jared Hancock's avatar
    Jared Hancock committed
    
            $form = new TeamQuickAddForm($_POST);
    
            if ($_POST && $form->isValid()) {
                $team = Team::create();
                $errors = array();
                $vars = $form->getClean();
                $vars += array(
                    'isenabled' => true,
                );
                if ($team->update($vars, $errors)) {
                    Http::response(201, $this->encode(array(
                        'id' => $team->getId(),
                        'name' => $team->name,
                    ), 'application/json'));
                }
                foreach ($errors as $name=>$desc)
                    if ($F = $form->getField($name))
                        $F->addError($desc);
            }
    
            $title = __("Add New Team");
    
    Jared Hancock's avatar
    Jared Hancock committed
            $path = ltrim($ost->get_path_info(), '/');
    
    Jared Hancock's avatar
    Jared Hancock committed
    
            include STAFFINC_DIR . 'templates/quick-add.tmpl.php';
    
    
        /**
         * Ajax: GET /admin/add/role
         *
         * Uses a dialog to add a new role
         *
         * Returns:
         * 200 - HTML form for addition
         * 201 - {id: <id>, name: <name>}
         *
         * Throws:
         * 403 - Not logged in
         * 403 - Not an adminitrator
         */
        function addRole() {
            global $ost, $thisstaff;
    
            if (!$thisstaff)
                Http::response(403, 'Agent login required');
            if (!$thisstaff->isAdmin())
                Http::response(403, 'Access denied');
    
            $form = new RoleQuickAddForm($_POST);
    
            if ($_POST && $form->isValid()) {
                $role = Role::create();
                $errors = array();
                $vars = $form->getClean();
                if ($role->update($vars, $errors)) {
                    Http::response(201, $this->encode(array(
                        'id' => $role->getId(),
                        'name' => $role->name,
                    ), 'application/json'));
                }
                foreach ($errors as $name=>$desc)
                    if ($F = $form->getField($name))
                        $F->addError($desc);
            }
    
            $title = __("Add New Role");
            $path = ltrim($ost->get_path_info(), '/');
    
            include STAFFINC_DIR . 'templates/quick-add-role.tmpl.php';
        }
    
        function getRolePerms($id) {
            global $ost, $thisstaff;
    
            if (!$thisstaff)
                Http::response(403, 'Agent login required');
            if (!$thisstaff->isAdmin())
                Http::response(403, 'Access denied');
            if (!($role = Role::lookup($id)))
                Http::response(404, 'No such role');
    
            return $this->encode($role->getPermissionInfo());
        }
    
    
        function addStaff() {
            global $ost, $thisstaff;
    
            if (!$thisstaff)
                Http::response(403, 'Agent login required');
            if (!$thisstaff->isAdmin())
                Http::response(403, 'Access denied');
    
            $form = new StaffQuickAddForm($_POST);
    
            if ($_POST && $form->isValid()) {
                $staff = Staff::create();
                $errors = array();
                if ($staff->update($form->getClean(), $errors)) {
                    Http::response(201, $this->encode(array(
                        'id' => $staff->getId(),
                        'name' => (string) $staff->getName(),
                    ), 'application/json'));
                }
    
                foreach ($errors as $name=>$desc) {
                    if ($F = $form->getField($name)) {
    
                        $F->addError($desc);
    
                        unset($errors[$name]);
                    }
                }
                $errors['err'] = implode(", ", $errors);
    
            }
    
            $title = __("Add New Agent");
            $path = ltrim($ost->get_path_info(), '/');
    
            include STAFFINC_DIR . 'templates/quick-add.tmpl.php';
        }