mirror of
https://github.com/pierre42100/ComunicAPI
synced 2024-11-23 22:09:29 +00:00
270 lines
6.7 KiB
PHP
270 lines
6.7 KiB
PHP
<?php
|
|
/**
|
|
* API Groups controller
|
|
*
|
|
* @author Pierre HUBERT
|
|
*/
|
|
|
|
class GroupsController {
|
|
|
|
/**
|
|
* API groups membership levels
|
|
*/
|
|
const GROUPS_MEMBERSHIP_LEVELS = array(
|
|
0 => "administrator",
|
|
1 => "moderator",
|
|
2 => "member",
|
|
3 => "pending",
|
|
4 => "visitor"
|
|
);
|
|
|
|
/**
|
|
* API groups visibility levels
|
|
*/
|
|
const GROUPS_VISIBILITY_LEVELS = array(
|
|
GroupInfo::OPEN_GROUP => "open",
|
|
GroupInfo::PRIVATE_GROUP => "private",
|
|
GroupInfo::SECRET_GROUP => "secrete"
|
|
);
|
|
|
|
/**
|
|
* Create a group
|
|
*
|
|
* @url POST /groups/create
|
|
*/
|
|
public function create(){
|
|
|
|
//Login required
|
|
user_login_required();
|
|
|
|
//Get the name of the new group
|
|
$name = postString("name", 3);
|
|
|
|
//Prepare group creation
|
|
$newGroup = new NewGroup();
|
|
$newGroup->set_name($name);
|
|
$newGroup->set_userID(userID);
|
|
$newGroup->set_time_sent(time());
|
|
|
|
//Try to create the group
|
|
$groupID = components()->groups->create($newGroup);
|
|
|
|
//Check for errors
|
|
if($groupID < 1)
|
|
Rest_fatal_error(500, "An error occurred while trying to create the group!");
|
|
|
|
//Success
|
|
return array(
|
|
"success" => "The group has been successfully created!",
|
|
"id" => $groupID
|
|
);
|
|
}
|
|
|
|
/**
|
|
* Get information about a group
|
|
*
|
|
* @url POST /groups/get_info
|
|
*/
|
|
public function getInfo(){
|
|
|
|
//Get the ID of the requested group
|
|
$id = getPostGroupId("id");
|
|
|
|
//Get information about the group
|
|
$group = components()->groups->get_info($id);
|
|
|
|
//Check if the group was not found
|
|
if(!$group->isValid())
|
|
Rest_fatal_error(404, "The requested group was not found !");
|
|
|
|
//Parse and return information about the group
|
|
return self::GroupInfoToAPI($group);
|
|
}
|
|
|
|
/**
|
|
* Get advanced information about a group
|
|
*
|
|
* @url POST /groups/get_advanced_info
|
|
*/
|
|
public function getAdvancedInfo(){
|
|
|
|
//Get the ID of the requested group
|
|
$id = getPostGroupId("id");
|
|
|
|
//Get information about the group
|
|
$group = components()->groups->get_advanced_info($id);
|
|
|
|
//Check if the group was not found
|
|
if(!$group->isValid())
|
|
Rest_fatal_error(404, "The requested group was not found !");
|
|
|
|
//Parse and return information about the group
|
|
return self::AdvancedGroupInfoToAPI($group);
|
|
}
|
|
|
|
/**
|
|
* Get the settings of a group
|
|
*
|
|
* @url POST /groups/get_settings
|
|
*/
|
|
public function getSettings(){
|
|
|
|
//Get the ID of the group (with admin access)
|
|
$groupID = $this->getPostGroupIDWithAdmin("id");
|
|
|
|
//Retrieve the settings of the group
|
|
$settings = components()->groups->get_settings($groupID);
|
|
|
|
//Check for error
|
|
if(!$settings->isValid())
|
|
Rest_fatal_error(500, "Could not get the settings of the group!");
|
|
|
|
//Return parsed settings
|
|
return self::GroupSettingsToAPI($settings);
|
|
}
|
|
|
|
/**
|
|
* Set (update) the settings of a group
|
|
*
|
|
* @url POST /groups/set_settings
|
|
*/
|
|
public function setSettings(){
|
|
|
|
//Get the ID of the group (with admin access)
|
|
$groupID = $this->getPostGroupIDWithAdmin("id");
|
|
|
|
//Create and fill a GroupSettings object with new values
|
|
$settings = new GroupSettings();
|
|
$settings->set_id($groupID);
|
|
$settings->set_name(postString("name", 3));
|
|
|
|
//Try to save the new settings of the group
|
|
if(!components()->groups->set_settings($settings))
|
|
Rest_fatal_error(500, "An error occured while trying to update group settings!");
|
|
|
|
return array("success" => "Group settings have been successfully updated!");
|
|
}
|
|
|
|
/**
|
|
* Change (update) the logo of the group
|
|
*
|
|
* @url POST /groups/upload_logo
|
|
*/
|
|
public function uploadLogo(){
|
|
|
|
//Get the ID of the group (with admin access)
|
|
$groupID = $this->getPostGroupIDWithAdmin("id");
|
|
|
|
//Check if it is a valid file
|
|
if(!check_post_file("logo"))
|
|
Rest_fatal_error(400, "An error occurred while receiving logo !");
|
|
|
|
//Delete any previous logo
|
|
if(!components()->groups->deleteLogo($groupID))
|
|
Rest_fatal_error(500, "An error occurred while trying to delete previous group logo!");
|
|
|
|
//Save the new group logo
|
|
$file_path = save_post_image("logo", 0, GroupInfo::PATH_GROUPS_LOGO, 500, 500);
|
|
|
|
//Update the settings of the group
|
|
$settings = components()->groups->get_settings($groupID);
|
|
$settings->set_logo($file_path);
|
|
|
|
if(!components()->groups->set_settings($settings))
|
|
Rest_fatal_error(500, "Could not save information about new group logo!");
|
|
|
|
//Success
|
|
return array(
|
|
"success" => "The new group logo has been successfully saved !",
|
|
"url" => $settings->get_logo_url()
|
|
);
|
|
}
|
|
|
|
/**
|
|
* Delete a group logo
|
|
*
|
|
* @url POST /groups/delete_logo
|
|
*/
|
|
public function deleteLogo(){
|
|
|
|
//Get the ID of the group (with admin access)
|
|
$groupID = $this->getPostGroupIDWithAdmin("id");
|
|
|
|
//Try to delete group logo
|
|
if(!components()->groups->deleteLogo($groupID))
|
|
Rest_fatal_error(500, "An error occurred while trying to delete group logo!");
|
|
|
|
//Success
|
|
return array(
|
|
"success" => "The group logo has been successfully deleted!",
|
|
"url" => components()->groups->get_settings($groupID)->get_logo_url()
|
|
);
|
|
}
|
|
|
|
/**
|
|
* Get and return a group ID specified in the POST request
|
|
* in which the current user has admin rigths
|
|
*
|
|
* @param string $name The name of the POST field
|
|
* @return int The ID of the group
|
|
*/
|
|
private function getPostGroupIDWithAdmin(string $name) : int {
|
|
|
|
//User must be signed in
|
|
user_login_required();
|
|
|
|
//Get the ID of the group
|
|
$groupID = getPostGroupId($name);
|
|
|
|
//Check if the user is an admin of the group or not
|
|
if(!components()->groups->isAdmin(userID, $groupID))
|
|
Rest_fatal_error(401, "You are not an administrator of this group!");
|
|
|
|
return $groupID;
|
|
}
|
|
|
|
/**
|
|
* Parse a GroupInfo object into an array for the API
|
|
*
|
|
* @param GroupInfo $info Information about the group
|
|
* @return array Generated API data
|
|
*/
|
|
public static function GroupInfoToAPI(GroupInfo $info) : array {
|
|
$data = array();
|
|
|
|
$data["id"] = $info->get_id();
|
|
$data["name"] = $info->get_name();
|
|
$data["icon_url"] = $info->get_logo_url();
|
|
$data["number_members"] = $info->get_number_members();
|
|
$data["membership"] = self::GROUPS_MEMBERSHIP_LEVELS[$info->get_membership_level()];
|
|
$data["visibility"] = self::GROUPS_VISIBILITY_LEVELS[$info->get_visibility()];
|
|
|
|
return $data;
|
|
}
|
|
|
|
/**
|
|
* Parse an AdvancedGroupInfo object into an array for the API
|
|
*
|
|
* @param AdvancedGroupInfo $info Information about the group
|
|
* @return array Generated API data
|
|
*/
|
|
public static function AdvancedGroupInfoToAPI(AdvancedGroupInfo $info) : array {
|
|
$data = self::GroupInfoToAPI($info);
|
|
|
|
$data["time_create"] = $info->get_time_create();
|
|
|
|
return $data;
|
|
}
|
|
|
|
/**
|
|
* Parse a GroupSettings object into an array for the API
|
|
*
|
|
* @param GroupSettings $settings The settings to parse
|
|
* @return array Generated array
|
|
*/
|
|
public static function GroupSettingsToAPI(GroupSettings $info) : array {
|
|
$data = self::AdvancedGroupInfoToAPI($info);
|
|
|
|
return $data;
|
|
}
|
|
} |