1
0
mirror of https://github.com/owncloudarchive/contacts.git synced 2024-11-30 12:24:11 +01:00
OwncloudContactsOfficial/lib/controller/groupcontroller.php

307 lines
7.4 KiB
PHP
Raw Normal View History

<?php
/**
* @author Thomas Tanghus
2014-01-26 00:40:22 +01:00
* @copyright 2013-2014 Thomas Tanghus (thomas@tanghus.net)
*
* This file is licensed under the Affero General Public License version 3 or
* later.
* See the COPYING-README file.
*/
namespace OCA\Contacts\Controller;
2013-09-17 18:46:59 +02:00
use OCA\Contacts\App,
OCA\Contacts\JSONResponse,
OCA\Contacts\Controller;
/**
* Controller class for groups/categories
*/
2013-09-17 18:46:59 +02:00
class GroupController extends Controller {
/**
2013-09-24 13:39:45 +02:00
* @NoAdminRequired
*/
public function getGroups() {
$tagMgr = $this->server->getTagManager()->load('contact');
2013-09-24 13:39:45 +02:00
$tags = $tagMgr->getTags();
2014-03-08 16:22:51 +01:00
foreach ($tags as &$tag) {
2013-09-24 13:39:45 +02:00
try {
2014-01-25 03:42:03 +01:00
$ids = $tagMgr->getIdsForTag($tag['name']);
$tag['contacts'] = $ids;
2013-09-24 13:39:45 +02:00
} catch(\Exception $e) {
$this->api->log(__METHOD__ . ' ' . $e->getMessage());
}
}
2013-09-24 13:39:45 +02:00
$favorites = $tagMgr->getFavorites();
$groups = array(
2013-09-24 13:39:45 +02:00
'categories' => $tags,
'favorites' => $favorites,
2013-04-25 01:03:05 +02:00
'shared' => \OCP\Share::getItemsSharedWith('addressbook', \OCA\Contacts\Share\Addressbook::FORMAT_ADDRESSBOOKS),
'lastgroup' => \OCP\Config::getUserValue($this->api->getUserId(), 'contacts', 'lastgroup', 'all'),
'sortorder' => \OCP\Config::getUserValue($this->api->getUserId(), 'contacts', 'groupsort', ''),
);
return new JSONResponse($groups);
}
/**
2013-09-24 13:39:45 +02:00
* @NoAdminRequired
*/
public function addGroup() {
$name = $this->request->post['name'];
$response = new JSONResponse();
2014-03-08 16:22:51 +01:00
if (is_null($name) || $name === "") {
$response->bailOut(App::$l10n->t('No group name given.'));
}
$tagMgr = $this->server->getTagManager()->load('contact');
2013-09-24 13:39:45 +02:00
$id = $tagMgr->add($name);
2014-03-08 16:22:51 +01:00
if ($id === false) {
$response->bailOut(App::$l10n->t('Error adding group.'));
} else {
$response->setParams(array('id'=>$id, 'name' => $name));
}
2014-03-08 16:22:51 +01:00
return $response;
}
/**
2013-09-24 13:39:45 +02:00
* @NoAdminRequired
*/
public function deleteGroup() {
$name = $this->request->post['name'];
$response = new JSONResponse();
2014-03-08 16:22:51 +01:00
if (is_null($name) || $name === '') {
$response->bailOut(App::$l10n->t('No group name given.'));
2013-05-21 23:39:50 +02:00
return $response;
}
$tagMgr = $this->server->getTagManager()->load('contact');
2014-03-08 16:22:51 +01:00
2013-08-03 14:37:05 +02:00
try {
2013-09-24 13:39:45 +02:00
$ids = $tagMgr->getIdsForTag($name);
2013-08-03 14:37:05 +02:00
} catch(\Exception $e) {
$response->setErrorMessage($e->getMessage());
2014-02-05 22:48:29 +01:00
\OCP\Util::writeLog('contacts', __METHOD__.', ' . $e->getMessage(), \OCP\Util::ERROR);
2013-08-03 14:37:05 +02:00
return $response;
}
2014-03-08 16:22:51 +01:00
if ($ids !== false) {
2013-09-24 13:39:45 +02:00
$backend = $this->app->getBackend('local');
2014-03-08 16:22:51 +01:00
foreach ($ids as $id) {
$contact = $backend->getContact(null, $id, array('noCollection' => true));
2013-06-27 15:52:18 +02:00
$obj = \Sabre\VObject\Reader::read(
$contact['carddata'],
\Sabre\VObject\Reader::OPTION_IGNORE_INVALID_LINES
);
2014-03-08 16:22:51 +01:00
if ($obj) {
if (!$obj->inGroup($name)) {
2013-06-27 15:52:18 +02:00
continue;
}
2014-03-08 16:22:51 +01:00
if ($obj->removeFromGroup($name)) {
$backend->updateContact(null, $id, $obj, array('noCollection' => true, 'isBatch' => true));
2013-06-27 15:52:18 +02:00
}
2014-03-08 16:22:51 +01:00
2013-06-27 15:52:18 +02:00
} else {
\OCP\Util::writeLog('contacts', __METHOD__.', could not parse card ' . $id, \OCP\Util::DEBUG);
}
}
2014-03-08 16:22:51 +01:00
2013-06-27 15:52:18 +02:00
}
2014-03-08 16:22:51 +01:00
2013-08-03 14:37:05 +02:00
try {
2013-09-24 13:39:45 +02:00
$tagMgr->delete($name);
2013-08-03 14:37:05 +02:00
} catch(\Exception $e) {
$response->setErrorMessage($e->getMessage());
2014-02-05 22:48:29 +01:00
\OCP\Util::writeLog('contacts', __METHOD__.', ' . $e->getMessage(), \OCP\Util::ERROR);
2013-08-03 14:37:05 +02:00
}
2014-03-08 16:22:51 +01:00
return $response;
}
2013-05-21 23:39:50 +02:00
/**
2013-09-24 13:39:45 +02:00
* @NoAdminRequired
2013-05-21 23:39:50 +02:00
*/
public function renameGroup() {
$from = $this->request->post['from'];
$to = $this->request->post['to'];
$response = new JSONResponse();
2014-03-08 16:22:51 +01:00
if (is_null($from) || $from === '') {
2013-05-21 23:39:50 +02:00
$response->bailOut(App::$l10n->t('No group name to rename from given.'));
return $response;
}
2014-03-08 16:22:51 +01:00
if (is_null($to) || $to === '') {
2013-05-21 23:39:50 +02:00
$response->bailOut(App::$l10n->t('No group name to rename to given.'));
return $response;
}
$tagMgr = $this->server->getTagManager()->load('contact');
2014-03-08 16:22:51 +01:00
if (!$tagMgr->rename($from, $to)) {
2013-05-21 23:39:50 +02:00
$response->bailOut(App::$l10n->t('Error renaming group.'));
return $response;
}
2014-03-08 16:22:51 +01:00
2013-09-24 13:39:45 +02:00
$ids = $tagMgr->getIdsForTag($to);
2014-03-08 16:22:51 +01:00
if ($ids !== false) {
2013-09-24 13:39:45 +02:00
$backend = $this->app->getBackend('local');
2014-03-08 16:22:51 +01:00
foreach ($ids as $id) {
2013-09-03 14:01:07 +02:00
$contact = $backend->getContact(null, $id, array('noCollection' => true));
2013-06-27 15:52:18 +02:00
$obj = \Sabre\VObject\Reader::read(
$contact['carddata'],
\Sabre\VObject\Reader::OPTION_IGNORE_INVALID_LINES
);
2014-03-08 16:22:51 +01:00
if ($obj) {
if (!isset($obj->CATEGORIES)) {
2013-06-27 15:52:18 +02:00
continue;
}
2014-03-08 16:22:51 +01:00
2013-06-27 15:52:18 +02:00
$obj->CATEGORIES->renameGroup($from, $to);
2013-09-03 14:01:07 +02:00
$backend->updateContact(null, $id, $obj, array('noCollection' => true));
2014-03-08 16:22:51 +01:00
2013-06-27 15:52:18 +02:00
} else {
\OCP\Util::writeLog('contacts', __METHOD__.', could not parse card ' . $id, \OCP\Util::DEBUG);
2013-05-21 23:39:50 +02:00
}
2014-03-08 16:22:51 +01:00
2013-05-21 23:39:50 +02:00
}
2014-03-08 16:22:51 +01:00
2013-05-21 23:39:50 +02:00
}
2014-03-08 16:22:51 +01:00
2013-05-21 23:39:50 +02:00
return $response;
}
/**
2013-09-24 13:39:45 +02:00
* @NoAdminRequired
*/
public function addToGroup() {
$response = new JSONResponse();
$params = $this->request->urlParams;
$categoryId = $params['categoryId'];
$categoryname = $this->request->post['name'];
$ids = $this->request->post['contactIds'];
2013-04-30 22:36:24 +02:00
$response->debug('request: '.print_r($this->request->post, true));
2014-03-08 16:22:51 +01:00
if (is_null($categoryId) || $categoryId === '') {
$response->bailOut(App::$l10n->t('Group ID missing from request.'));
return $response;
}
2014-03-08 16:22:51 +01:00
if (is_null($categoryId) || $categoryId === '') {
$response->bailOut(App::$l10n->t('Group name missing from request.'));
return $response;
}
2014-03-08 16:22:51 +01:00
if (is_null($ids)) {
$response->bailOut(App::$l10n->t('Contact ID missing from request.'));
return $response;
}
2013-09-24 13:39:45 +02:00
$backend = $this->app->getBackend('local');
$tagMgr = $this->server->getTagManager()->load('contact');
2014-03-08 16:22:51 +01:00
foreach ($ids as $contactId) {
$contact = $backend->getContact(null, $contactId, array('noCollection' => true));
$obj = \Sabre\VObject\Reader::read(
$contact['carddata'],
\Sabre\VObject\Reader::OPTION_IGNORE_INVALID_LINES
);
2014-03-08 16:22:51 +01:00
if ($obj) {
if ($obj->addToGroup($categoryname)) {
$backend->updateContact(null, $contactId, $obj, array('noCollection' => true));
}
2014-03-08 16:22:51 +01:00
}
2014-03-08 16:22:51 +01:00
$response->debug('contactId: ' . $contactId . ', categoryId: ' . $categoryId);
$tagMgr->tagAs($contactId, $categoryId);
}
return $response;
}
/**
2013-09-24 13:39:45 +02:00
* @NoAdminRequired
*/
public function removeFromGroup() {
$response = new JSONResponse();
$params = $this->request->urlParams;
$categoryId = $params['categoryId'];
$categoryname = $this->request->post['name'];
$ids = $this->request->post['contactIds'];
//$response->debug('request: '.print_r($this->request->post, true));
2014-03-08 16:22:51 +01:00
if (is_null($categoryId) || $categoryId === '') {
$response->bailOut(App::$l10n->t('Group ID missing from request.'));
return $response;
}
2014-03-08 16:22:51 +01:00
if (is_null($ids)) {
$response->bailOut(App::$l10n->t('Contact ID missing from request.'));
return $response;
}
2013-09-24 13:39:45 +02:00
$backend = $this->app->getBackend('local');
$tagMgr = $this->server->getTagManager()->load('contact');
2014-03-08 16:22:51 +01:00
foreach ($ids as $contactId) {
$contact = $backend->getContact(null, $contactId, array('noCollection' => true));
2014-03-08 16:22:51 +01:00
if (!$contact) {
$response->debug('Couldn\'t get contact: ' . $contactId);
2013-05-25 01:03:45 +02:00
continue;
}
2014-03-08 16:22:51 +01:00
$obj = \Sabre\VObject\Reader::read(
$contact['carddata'],
\Sabre\VObject\Reader::OPTION_IGNORE_INVALID_LINES
);
2014-03-08 16:22:51 +01:00
if ($obj) {
if (!isset($obj->CATEGORIES)) {
return $response;
}
2014-03-08 16:22:51 +01:00
if ($obj->removeFromGroup($categoryname)) {
$backend->updateContact(null, $contactId, $obj, array('noCollection' => true));
}
2014-03-08 16:22:51 +01:00
} else {
$response->debug('Error parsing contact: ' . $contactId);
}
2014-03-08 16:22:51 +01:00
$response->debug('contactId: ' . $contactId . ', categoryId: ' . $categoryId);
$tagMgr->unTag($contactId, $categoryId);
}
return $response;
}
}