public static function projects($params)
 {
     $format = Utils::getFormat($params['args'], 0, 2);
     $pageType = Utils::getProjectType($params['args']);
     $user = User::getAuthenticatedUser();
     switch ($params['method']) {
         // GET: Get list of projects
         case 'GET':
             $userProjects = Project::getActiveProjectsForUser($user->username);
             $userProjectSlugList = array();
             foreach ($userProjects as $project) {
                 array_push($userProjectSlugList, $project['slug']);
             }
             // Get available projects
             $owner = '';
             if ($pageType == 'system') {
                 $projectsList = Project::getAvailableProjects($user->username);
                 $completedProjects = Project::getPublicCompletedProjects('', true);
             } else {
                 // Get specified user's available projects
                 $owner = $params['args'][1];
                 $projectsList = Project::getAvailableProjects($user->username, $owner);
                 $completedProjects = Project::getPublicCompletedProjects($owner, true);
             }
             // If it's in the userProjects list, don't include it in the available list
             $availableProjects = array();
             foreach ($projectsList as $project) {
                 if ($pageType == 'system') {
                     if (!in_array($project['slug'], $userProjectSlugList)) {
                         array_push($availableProjects, $project);
                     }
                 } else {
                     array_push($availableProjects, $project);
                 }
             }
             $pageTitle = 'Projects';
             if ($owner) {
                 $pageTitle .= " owned by {$owner}";
             }
             $response = array('page_title' => $pageTitle, 'user' => $user->getResponse(), 'user_projects' => $userProjects, 'available_projects' => $availableProjects, 'completed_projects' => $completedProjects, 'type' => $pageType, 'owner' => $owner);
             switch ($format) {
                 case 'json':
                     echo json_encode($response);
                     break;
                 case 'html':
                     Template::render('projects', $response);
                     break;
             }
             break;
             // POST: Create new project
             // Required parameters:
             // - name (string)
             // - type (public/private)
             // - owner (string)
         // POST: Create new project
         // Required parameters:
         // - name (string)
         // - type (public/private)
         // - owner (string)
         case 'POST':
             // Create the project
             $project = new Project();
             $project->title = Utils::POST('project_name');
             $project->type = Utils::POST('project_type');
             $project->public = Utils::POST('project_public') == 'public' ? 1 : 0;
             $project->description = Utils::POST('project_desc');
             $project->language = Utils::POST('project_lang');
             $project->workflow = Utils::POST('project_workflow');
             $project->fields = Utils::POST('project_fields');
             $project->guidelines = Utils::POST('project_guidelines');
             $project->owner = Utils::POST('project_owner');
             $project->characters = Utils::POST('project_characters');
             $project->status = 'pending';
             // Import the system download template
             $project->downloadTemplate = Settings::getProtected('download_template');
             // Convert to lowercase and strip out punctuation
             $project->slug = str_replace(' ', '-', strtolower($project->title));
             $project->slug = preg_replace('/[^a-z0-9-]+/i', '', $project->slug);
             // And add it to the database
             $status = $project->save();
             if ($status == true) {
                 switch ($project->type) {
                     case 'system':
                         $project->url = "projects/" . $project->slug;
                         $project->admin_url = "projects/" . $project->slug . "/admin";
                         break;
                     case 'user':
                         $project->url = "users/" . $project->owner . "/projects/" . $project->slug;
                         $project->admin_url = "users/" . $project->owner . "/projects/" . $project->slug . "/admin";
                         break;
                 }
                 $notify = Settings::getProtected('notify');
                 $notify->trigger("admin_new_project", array('user' => $user, 'title' => $project->title, 'slug' => $project->slug, 'owner' => $project->owner, 'type' => $project->type));
             }
             $response = array("code" => $status, "project" => array("url" => $project->url, "admin_url" => $project->admin_url));
             switch ($format) {
                 case 'json':
                     // Return JSON
                     $response["project"]["url"] .= ".json";
                     $response["project"]["admin_url"] .= ".json";
                     echo json_encode($response);
                     break;
                 case 'html':
                     // Return HTML
                     if ($status) {
                         $app_url = Settings::getProtected('app_url');
                         header("Location: {$app_url}/{$project->admin_url}");
                     } else {
                         echo "Error";
                     }
                     break;
             }
             break;
     }
 }