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; } }