diff --git a/appinfo/routes.php b/appinfo/routes.php index 9f328fb5..e6e7687d 100644 --- a/appinfo/routes.php +++ b/appinfo/routes.php @@ -150,7 +150,7 @@ $this->create('contacts_contact_delete_property', 'addressbook/{user}/{backend}/ ->action( function($params) { session_write_close(); - $request = new Request($params); + $request = new Request(array('urlParams' => $params)); $name = $request->post['name']; $checksum = $request->post['checksum']; @@ -202,7 +202,7 @@ $this->create('contacts_contact_save_property', 'addressbook/{user}/{backend}/{a ->action( function($params) { session_write_close(); - $request = new Request($params); + $request = new Request(array('urlParams' => $params)); // TODO: When value is empty unset the property and return a checksum of 'new' if multi_property $name = $request->post['name']; $value = $request->post['value']; @@ -288,7 +288,7 @@ $this->create('contacts_categories_add', 'groups/{user}/add') ->action( function($params) { session_write_close(); - $request = new Request($params); + $request = new Request(array('urlParams' => $params)); $name = $request->post['name']; if(is_null($name) || $name === "") { @@ -312,7 +312,7 @@ $this->create('contacts_categories_delete', 'groups/{user}/delete') ->action( function($params) { session_write_close(); - $request = new Request($params); + $request = new Request(array('urlParams' => $params)); $name = $request->post['name']; if(is_null($name) || $name === "") { @@ -327,6 +327,64 @@ $this->create('contacts_categories_delete', 'groups/{user}/delete') ) ->defaults(array('user' => \OCP\User::getUser())); +$this->create('contacts_categories_addto', 'groups/{user}/addto/{categoryid}') + ->post() + ->action( + function($params) { + session_write_close(); + $request = new Request(array('urlParams' => $params)); + $categoryid = $request['categoryid']; + $ids = $request['contactids']; + debug('request: '.print_r($request->post, true)); + + if(is_null($categoryid) || $categoryid === '') { + bailOut(App::$l10n->t('Group ID missing from request.')); + } + + if(is_null($ids)) { + bailOut(App::$l10n->t('Contact ID missing from request.')); + } + + $catman = new \OC_VCategories('contact', $params['user']); + foreach($ids as $contactid) { + debug('contactid: ' . $contactid . ', categoryid: ' . $categoryid); + $catman->addToCategory($contactid, $categoryid); + } + + \OCP\JSON::success(); + } + ) + ->defaults(array('user' => \OCP\User::getUser())); + +$this->create('contacts_categories_removefrom', 'groups/{user}/removefrom/{categoryid}') + ->post() + ->action( + function($params) { + session_write_close(); + $request = new Request(array('urlParams' => $params)); + $categoryid = $request['categoryid']; + $ids = $request['contactids']; + debug('request: '.print_r($request->post, true)); + + if(is_null($categoryid) || $categoryid === '') { + bailOut(App::$l10n->t('Group ID missing from request.')); + } + + if(is_null($ids)) { + bailOut(App::$l10n->t('Contact ID missing from request.')); + } + + $catman = new \OC_VCategories('contact', $params['user']); + foreach($ids as $contactid) { + debug('contactid: ' . $contactid . ', categoryid: ' . $categoryid); + $catman->removeFromCategory($contactid, $categoryid); + } + + \OCP\JSON::success(); + } + ) + ->defaults(array('user' => \OCP\User::getUser())); + $this->create('contacts_setpreference', 'preference/{user}/set') ->post() ->action( diff --git a/js/groups.js b/js/groups.js index 1b1ee46c..91b95c73 100644 --- a/js/groups.js +++ b/js/groups.js @@ -30,7 +30,7 @@ OC.Contacts = OC.Contacts || {}; if($(event.target).is('.action.delete')) { var id = $(event.target).parents('h3').first().data('id'); self.deleteGroup(id, function(response) { - if(response.status !== 'success') { + if(response.error) { OC.notify({message:response.data.message}); } }); @@ -211,14 +211,8 @@ OC.Contacts = OC.Contacts || {}; console.warn('Invalid data type: ' + typeof contactid); } if(doPost) { - $.post(OC.filePath('contacts', 'ajax', 'categories/addto.php'), {contactids: ids, categoryid: groupid},function(jsondata) { - if(!jsondata) { - if(typeof cb === 'function') { - cb({status:'error', message:'Network or server error. Please inform administrator.'}); - } - return; - } - if(jsondata.status === 'success') { + $.when(this.storage.addToGroup(ids, groupid)).then(function(response) { + if(!response.error) { contacts = contacts.concat(ids).sort(); $groupelem.data('contacts', contacts); var $numelem = $groupelem.find('.numcontacts'); @@ -237,7 +231,7 @@ OC.Contacts = OC.Contacts || {}; } } else { if(typeof cb == 'function') { - cb({status:'error', message:jsondata.data.message}); + cb({status:'error', message:response.message}); } } }); @@ -300,15 +294,8 @@ OC.Contacts = OC.Contacts || {}; } } if(doPost) { - // TODO: Use Storage - $.post(OC.filePath('contacts', 'ajax', 'categories/removefrom.php'), {contactids: ids, categoryid: groupid},function(jsondata) { - if(!jsondata) { - if(typeof cb === 'function') { - cb({status:'error', message:'Network or server error. Please inform administrator.'}); - } - return; - } - if(jsondata.status === 'success') { + $.when(this.storage.removeFromGroup(ids, groupid)).then(function(response) { + if(!response.error) { $.each(ids, function(idx, id) { contacts.splice(contacts.indexOf(id), 1); }); @@ -324,7 +311,7 @@ OC.Contacts = OC.Contacts || {}; } } else { if(typeof cb == 'function') { - cb({status:'error', message:jsondata.data.message}); + cb({status:'error', message:response.message}); } } }); @@ -399,7 +386,7 @@ OC.Contacts = OC.Contacts || {}; var self = this; console.log('delete group', groupid, contacts); $.when(this.storage.deleteGroup(name)).then(function(response) { - if (response && response.status == 'success') { + if (!response.error) { $(document).trigger('status.group.groupremoved', { groupid: groupid, newgroupid: parseInt($newelem.data('id')), @@ -409,7 +396,7 @@ OC.Contacts = OC.Contacts || {}; $elem.remove(); self.selectGroup({element:$newelem}); } else { - // + console.log('Error', response); } if(typeof cb === 'function') { cb(response); @@ -449,7 +436,7 @@ OC.Contacts = OC.Contacts || {}; $input.prop('disabled', true); $elem.data('rawname', ''); self.addGroup({name:name, element: $elem}, function(response) { - if(response.status === 'success') { + if(!response.error) { $elem.prepend(escapeHTML(response.name)).removeClass('editing').attr('data-id', response.id); $input.next('.checked').remove(); $input.remove(); @@ -554,7 +541,7 @@ OC.Contacts = OC.Contacts || {}; return; } $.when(this.storage.addGroup(name)).then(function(response) { - if (response && response.status == 'success') { + if (!response.error) { name = response.data.name; var id = response.data.id; var tmpl = self.$groupListItemTemplate; @@ -586,11 +573,11 @@ OC.Contacts = OC.Contacts || {}; $elem.tipsy({trigger:'manual', gravity:'w', fallback: t('contacts', 'You can drag groups to\narrange them as you like.')}); $elem.tipsy('show'); if(typeof cb === 'function') { - cb({status:'success', id:parseInt(id), name:name}); + cb({id:parseInt(id), name:name}); } } else { if(typeof cb === 'function') { - cb({status:'error', message:response.data.message}); + cb({error:true, message:response.data.message}); } } }) diff --git a/js/storage.js b/js/storage.js index f1aef823..5962ab8f 100644 --- a/js/storage.js +++ b/js/storage.js @@ -263,6 +263,36 @@ OC.Contacts = OC.Contacts || {}; ); } + /** + * Add contacts to a group + * + * @param array contactids + */ + Storage.prototype.addToGroup = function(contactids, categoryid) { + console.log('Storage.addToGroup', contactids, categoryid); + return this.requestRoute( + 'contacts_categories_addto', + 'POST', + {user: this.user, categoryid: categoryid}, + {contactids: contactids} + ); + } + + /** + * Remove contacts from a group + * + * @param array contactids + */ + Storage.prototype.removeFromGroup = function(contactids, categoryid) { + console.log('Storage.addToGroup', contactids, categoryid); + return this.requestRoute( + 'contacts_categories_removefrom', + 'POST', + {user: this.user, categoryid: categoryid}, + {contactids: contactids} + ); + } + /** * Set a user preference *