Drag'n'Drop contacts between addressbook. Still needs some css magic.

This commit is contained in:
Thomas Tanghus 2012-06-25 03:41:28 +02:00
parent 51d33768b8
commit 052bd8efbb
2 changed files with 77 additions and 0 deletions

View File

@ -0,0 +1,41 @@
<?php
/**
* @author Victor Dubiniuk
* Copyright (c) 2012 Victor Dubiniuk <victor.dubiniuk@gmail.com>
* Copyright (c) 2012 Thomas Tanghus <thomas@tanghus.net>
* This file is licensed under the Affero General Public License version 3 or
* later.
* See the COPYING-README file.
*/
OCP\JSON::checkLoggedIn();
OCP\JSON::checkAppEnabled('contacts');
OCP\JSON::callCheck();
$ids = $_POST['ids'];
$aid = intval($_POST['aid']);
OC_Contacts_App::getAddressbook($aid);
if(!is_array($ids)) {
$ids = array($ids,);
}
$goodids = array();
foreach ($ids as $id){
try {
$card = OC_Contacts_App::getContactObject( intval($id) );
if($card) {
$goodids[] = $id;
}
} catch (Exception $e) {
OCP\Util::writeLog('contacts', 'Error moving contact "'.$id.'" to addressbook "'.$aid.'"'.$e->getMessage(), OCP\Util::ERROR);
}
}
try {
OC_Contacts_VCard::moveToAddressBook($aid, $ids);
} catch (Exception $e) {
$msg = $e->getMessage();
OCP\Util::writeLog('contacts', 'Error moving contacts "'.implode(',', $ids).'" to addressbook "'.$aid.'"'.$msg, OCP\Util::ERROR);
OC_JSON::error(array('data' => array('message' => $msg,)));
}
OC_JSON::success(array('data' => array('ids' => $goodids,)));

View File

@ -1505,6 +1505,36 @@ Contacts={
}
},
Contacts:{
drop:function(event, ui) {
var dragitem = ui.draggable, droptarget = $(this);
//console.log('Drop ' + dragitem.data('id') +' on: ' + droptarget.data('id'));
if(dragitem.data('bookid') == droptarget.data('id')) {
return false;
}
var droplist = (droptarget.is('ul'))?droptarget:droptarget.next();
$.post(OC.filePath('contacts', 'ajax', 'movetoaddressbook.php'), { ids: dragitem.data('id'), aid: $(this).data('id') },
function(jsondata){
if(jsondata.status == 'success'){
// Do some inserting/removing/sorting magic
var name = $(dragitem).find('a').html();
var added = false;
$(droplist).children().each(function(){
if ($(this).text().toLowerCase() > name.toLowerCase()) {
$(this).before(dragitem.detach()); //.fadeIn('slow');
added = true;
return false;
}
});
if(!added) {
$(droplist).append(dragitem.detach());
}
dragitem.data('bookid', droptarget.data('id'));
Contacts.UI.Contacts.scrollTo(dragitem.data('id'));
} else {
OC.dialogs.alert(jsondata.data.message, t('contacts', 'Error'));
}
});
},
// Reload the contacts list.
update:function(id){
$.getJSON(OC.filePath('contacts', 'ajax', 'contacts.php'),{},function(jsondata){
@ -1522,6 +1552,12 @@ Contacts={
setTimeout(Contacts.UI.Contacts.lazyupdate, 500);*/
});
Contacts.UI.Card.update(id);
$('#contacts h3,#contacts ul').droppable({ drop: Contacts.UI.Contacts.drop});
$('#contacts li').draggable({
axis: 'y', containment: '#contacts',
scroll: true, scrollSensitivity: 100,
opacity: 0.7, helper: 'clone'
});
}
else{
OC.dialogs.alert(jsondata.data.message, t('contacts', 'Error'));