Skip to content

Commit b9ea554

Browse files
committed
Menu entries for managing MyMaps
Signed-off-by: Arne Hamann <kontakt+github@arne.email>
1 parent 82b0e82 commit b9ea554

7 files changed

Lines changed: 340 additions & 16 deletions

File tree

appinfo/routes.php

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -107,6 +107,8 @@
107107

108108
//MyMaps
109109
['name' => 'my_maps#getMyMaps', 'url' => '/maps', 'verb' => 'GET'],
110-
110+
['name' => 'my_maps#addMyMap' , 'url' => '/maps', 'verb' => 'POST'],
111+
['name' => 'my_maps#updateMyMap' , 'url' => '/maps/{id}', 'verb' => 'PUT'],
112+
['name' => 'my_maps#deleteMyMap' , 'url' => '/maps/{id}', 'verb' => 'DELETE'],
111113
]
112114
];

css/style.scss

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -562,7 +562,8 @@ tr.selected td {
562562
padding-right: 0;
563563
}
564564
#devicecolorinput,
565-
#trackcolorinput {
565+
#trackcolorinput,
566+
#mymapscolorinput {
566567
opacity: 0;
567568
width: 0px;
568569
height: 0px;

lib/Controller/MyMapsController.php

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,34 @@ public function __construct($AppName, IRequest $request, MyMapsService $myMapsSe
3434
$this->myMapsService = $myMapsService;
3535
}
3636

37+
/**
38+
* @NoAdminRequired
39+
*/
40+
public function addMyMap($values) {
41+
$newName = $values["newName"] ?? "New Map";
42+
$myMap = $this->myMapsService->addMyMap($newName);
43+
if (is_string($myMap)) {
44+
new DataResponse($myMap, 400);
45+
}
46+
return new DataResponse($myMap);
47+
}
48+
49+
/**
50+
* @NoAdminRequired
51+
*/
52+
public function updateMyMap($id, $values) {
53+
$myMap = $this->myMapsService->updateMyMap($id, $values);
54+
return new DataResponse($myMap);
55+
}
56+
57+
/**
58+
* @NoAdminRequired
59+
*/
60+
public function deleteMyMap($id) {
61+
$result = $this->myMapsService->deleteMyMap($id);
62+
return new DataResponse($result);
63+
}
64+
3765
/**
3866
* @NoAdminRequired
3967
*/

lib/Service/MyMapsService.php

Lines changed: 82 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,9 @@
1212

1313
namespace OCA\Maps\Service;
1414

15+
use OC\OCS\Exception;
16+
use OCP\AppFramework\Http\DataResponse;
17+
use OCP\Files\NotFoundException;
1518
use OCP\Files\Search\ISearchComparison;
1619
use OCP\IL10N;
1720
use OCP\ILogger;
@@ -33,20 +36,48 @@ public function __construct (ILogger $logger, $userfolder, $userId) {
3336
$this->userId = $userId;
3437
}
3538

39+
public function addMyMap($newName) {
40+
$MapData = [
41+
'name' => $newName,
42+
];
43+
if (!$this->userfolder->nodeExists('/Maps')) {
44+
$this->userfolder->newFolder('Maps');
45+
}
46+
if ($this->userfolder->nodeExists('/Maps')) {
47+
$mapsFolder = $this->userfolder->get('/Maps');
48+
if ($mapsFolder->getType() !== \OCP\Files\FileInfo::TYPE_FOLDER) {
49+
$response = '/Maps is not a directory';
50+
return $response;
51+
}
52+
else if (!$mapsFolder->isCreatable()) {
53+
$response = '/Maps is not writeable';
54+
return $response;
55+
}
56+
}
57+
else {
58+
$response = 'Impossible to create /Maps';
59+
return $response;
60+
}
61+
$mapFolder = $mapsFolder->newFolder($newName);
62+
$MapData['id'] = $mapFolder->getId();
63+
$mapFolder->newFile(".maps","{}");
64+
return $MapData;
65+
}
66+
3667
public function getAllMyMaps(){
3768
$MyMaps = [];
3869
$MyMapsNodes = $this->userfolder->search('.maps');
3970
foreach($MyMapsNodes as $node) {
4071
if ($node->getType() === FileInfo::TYPE_FILE and $node->getName() === ".maps") {
41-
$MapData = json_decode($node->getContent(), true);
42-
if (isset($MapData["name"])){
43-
$name = $MapData["name"];
72+
$mapData = json_decode($node->getContent(), true);
73+
if (isset($mapData["name"])){
74+
$name = $mapData["name"];
4475
} else {
4576
$name = $node->getParent()->getName();
4677
}
4778
$color = null;
48-
if (isset($MapData["color"])){
49-
$color = $MapData["color"];
79+
if (isset($mapData["color"])){
80+
$color = $mapData["color"];
5081
}
5182
$MyMap = [
5283
"id"=>$node->getParent()->getId(),
@@ -59,4 +90,50 @@ public function getAllMyMaps(){
5990
}
6091
return $MyMaps;
6192
}
93+
94+
public function updateMyMap($id, $values) {
95+
$folders = $this->userfolder->getById($id);
96+
$folder = array_shift($folders);
97+
try {
98+
$file=$folder->get(".maps");
99+
} catch (NotFoundException $e) {
100+
$file=$folder->newFile(".maps", $content = '{}');
101+
}
102+
$mapData = json_decode($file->getContent(),true);
103+
foreach ($values as $key=>$value) {
104+
if ($key === 'newName') {
105+
$key = 'name';
106+
}
107+
if (is_null($value)) {
108+
unset($mapData[$key]);
109+
} else {
110+
$mapData[$key] = $value;
111+
}
112+
}
113+
$file->putContent(json_encode($mapData,JSON_PRETTY_PRINT));
114+
return $mapData;
115+
}
116+
117+
public function deleteMyMap($id) {
118+
$folders = $this->userfolder->getById($id);
119+
$folder = array_shift($folders);
120+
if ($this->userfolder->nodeExists('/Maps')) {
121+
$mapsFolder = $this->userfolder->get('/Maps');
122+
if ($folder->getParent()->getId() === $mapsFolder->getId() ) {
123+
try {
124+
$folder->delete();
125+
} catch (Exception $e) {
126+
return 1;
127+
}
128+
}
129+
}
130+
131+
try {
132+
$file=$folder->get(".maps");
133+
$file->delete();
134+
} catch (NotFoundException $e) {
135+
return 1;
136+
}
137+
return 0;
138+
}
62139
}

0 commit comments

Comments
 (0)