synergy/server/api/tribe.php (154 lines of code) (raw):
<?php
use Synergy\App\Synergy;
use Synergy\Controller\TribeCtrl;
use Synergy\Misc\HTTP;
use Synergy\Model\Tribe;
use Synergy\Model\Tribe\Rest\TribeResource;
use Synergy\Model\User\Rest\UserListItemResource;
require_once '../setup/conf.php';
switch ($_SERVER['REQUEST_METHOD']) {
case "GET":
if (!isset($_REQUEST['id'])) {
HTTP::BadRequest("Missing parameters");
die();
}
$tribeCtrl = new TribeCtrl();
$tribe = $tribeCtrl->getTribe(intval($_REQUEST['id']));
if (is_null($tribe)) {
HTTP::NotFound('Tribe not found');
die();
}
if (Synergy::getSessionProvider()->sessionExists() && intval(Synergy::getSessionProvider()->getUserId()) === intval($tribe->leader_id)) {
$tribe->addControls("leader");
} else if (Synergy::getSessionProvider()->sessionExists()) {
$tribe->addControls(Synergy::getSessionProvider()->getUserRole());
}
$tribe->members = UserListItemResource::createFromUsers($tribe->members);
HTTP::OK(json_encode(TribeResource::createFromTribe($tribe)), 'Content-type: application/json');
break;
case "PUT":
$tribeCtrl = new TribeCtrl();
$leader= $tribeCtrl->getLeader(intval($_REQUEST['id']));
$leaderUsername = $leader->username;
$isLeader = false;
if (strlen($leaderUsername) > 0 && $leaderUsername === Synergy::getSessionProvider()->getUsername()) {
$isLeader = true;
}
if (!$isLeader){
if (!Tribe::canEdit()) {
HTTP::Unauthorized("");
die();
}
}
if (!isset($_REQUEST['id'])) {
HTTP::BadRequest("Missing parameters");
die();
}
if (!isset($_REQUEST['action'])) {
HTTP::BadRequest("Missing parameters");
die();
}
switch ($_REQUEST['action']) {
case "addMember":
$put = file_get_contents('php://input');
$data = json_decode($put);
if (!isset($data->username)) {
HTTP::BadRequest("Missing parameters");
die();
}
$tribeCtrl = new TribeCtrl();
if ($isLeader || Tribe::canEdit()) {
if ($tribeCtrl->addMember($data->username, intval($_REQUEST['id']))){
HTTP::OK("User added");
} else {
HTTP::BadRequest('User not added, perhaps already a tribe member?');
}
} else {
HTTP::Unauthorized("");
die();
}
break;
case "removeMember":
if (!isset($_REQUEST['username'])) {
HTTP::BadRequest("Missing parameters");
die();
}
if ($isLeader || Tribe::canEdit()) {
$tribeCtrl = new TribeCtrl();
$tribeCtrl->removeMember($_REQUEST['username'], intval($_REQUEST['id']));
HTTP::OK("User's membership revoked");
} else {
HTTP::Unauthorized("");
die();
}
break;
case "editTribe":
$tribeCtrl = new TribeCtrl();
if ($isLeader || Tribe::canEdit()) {
$put = file_get_contents('php://input');
$data = json_decode($put);
if (!isset($data->id) || !isset($data->name) || !isset($data->description) || !isset($data->leaderUsername)) {
HTTP::BadRequest("Missing parameters");
die();
}
$t = new Tribe(intval($_REQUEST['id']), $data->name, $data->description, -1);
$t->leaderUsername = $data->leaderUsername;
if (isset($data->ext)) {
$t->ext = $data->ext;
}
if ($tribeCtrl->editTribe($t))
HTTP::OK('');
else
HTTP::BadRequest("Invalid leader");
} else {
HTTP::Unauthorized("");
die();
}
break;
default:
HTTP::BadRequest('Action not defined');
break;
}
break;
case "DELETE":
if (!Tribe::canDelete()) {
HTTP::Unauthorized("");
die();
}
if (!isset($_REQUEST['id'])) {
HTTP::BadRequest("Missing parameters");
die();
}
$tribeCtrl = new TribeCtrl();
if ($tribeCtrl->removeTribe(intval($_REQUEST['id'])))
HTTP::OK("");
else
HTTP::InternalServerError('');
break;
break;
case "POST":
if (!Tribe::canCreate()) {
HTTP::Unauthorized("");
die();
}
$put = file_get_contents('php://input');
$data = json_decode($put);
if (!isset($data->name) || !isset($data->description) || !isset($data->leaderUsername)) {
HTTP::BadRequest("Missing parameters");
die();
}
$tribeCtrl = new TribeCtrl();
$t = new Tribe(-1, $data->name, $data->description, -1);
$t->leaderUsername = $data->leaderUsername;
if (isset($data->ext)) {
$t->ext = $data->ext;
}
$id = $tribeCtrl->createTribe($t);
$url = BASER_URL. "tribe.php?id=" . $id;
HTTP::OK(json_encode($url), 'Content-type: application/json');
break;
default :
HTTP::MethodNotAllowed("");
break;
}
?>