From 21d613cbc651d537c6fe145a8ddbec99a56035d1 Mon Sep 17 00:00:00 2001 From: Thomas Olsen Date: Thu, 1 Dec 2011 02:02:45 +0100 Subject: [PATCH 01/10] Added export.php for contacts app. Works the same way as the one in the calendar app, except there is no UI for it. Fixed indentation in /index.php --- apps/contacts/export.php | 44 ++++++++++++++++++++++++++++++++++++++++ index.php | 17 ++++++++-------- 2 files changed, 53 insertions(+), 8 deletions(-) create mode 100644 apps/contacts/export.php diff --git a/apps/contacts/export.php b/apps/contacts/export.php new file mode 100644 index 0000000000..3c74d7f553 --- /dev/null +++ b/apps/contacts/export.php @@ -0,0 +1,44 @@ + + * This file is licensed under the Affero General Public License version 3 or + * later. + * See the COPYING-README file. + */ + +require_once ("../../lib/base.php"); +OC_Util::checkLoggedIn(); +OC_Util::checkAppEnabled('contacts'); +$book = isset($_GET["bookid"]) ? $_GET["bookid"] : NULL; +$contact = isset($_GET["contactid"]) ? $_GET["contactid"] : NULL; +if(isset($book)){ + OC_Log::write('contacts',"book isset($book)",OC_Log::DEBUG); + $addressbook = OC_Contacts_Addressbook::find($book); + OC_Log::write('contacts',"Got addressbook",OC_Log::DEBUG); + OC_Log::write('contacts',"userid: {$addressbook["userid"]}",OC_Log::DEBUG); + if($addressbook["userid"] != OC_User::getUser()){ + OC_JSON::error(); + exit; + } + OC_Log::write('contacts',"User match",OC_Log::DEBUG); + $cardobjects = OC_Contacts_VCard::all($book); + header("Content-Type: text/directory"); + header("Content-Disposition: inline; filename=addressbook.vcf"); + for($i = 0;$i <= count($cardobjects); $i++){ + echo $cardobjects[$i]["carddata"] . "\n"; + } +}elseif(isset($contact)){ + OC_Log::write('contacts',"contact isset($contact)",OC_Log::DEBUG); + $data = OC_Contacts_VCard::find($contact); + $addressbookid = $data["addressbookid"]; + OC_Log::write('contacts',"addressbookid: $addressbookid",OC_Log::DEBUG); + $addressbook = OC_Contacts_Addressbook::find($addressbookid); + if($addressbook["userid"] != OC_User::getUser()){ + OC_JSON::error(); + exit; + } + header("Content-Type: text/directory"); + header("Content-Disposition: inline; filename=" . $data["fullname"] . ".vcf"); + echo $data["carddata"]; +} +?> diff --git a/index.php b/index.php index 558733e1cd..7ead0fb48a 100644 --- a/index.php +++ b/index.php @@ -100,14 +100,15 @@ else { $error = true; } } - // The user is already authenticated using Apaches AuthType Basic... very usable in combination with LDAP - elseif(isset($_SERVER["PHP_AUTH_USER"]) && isset($_SERVER["PHP_AUTH_PW"])){ - if (OC_User::login($_SERVER["PHP_AUTH_USER"],$_SERVER["PHP_AUTH_PW"])) { - OC_User::unsetMagicInCookie(); - OC_Util::redirectToDefaultPage(); - }else{ - $error = true; - } + // The user is already authenticated using Apaches AuthType Basic... very usable in combination with LDAP + elseif(isset($_SERVER["PHP_AUTH_USER"]) && isset($_SERVER["PHP_AUTH_PW"])){ + if (OC_User::login($_SERVER["PHP_AUTH_USER"],$_SERVER["PHP_AUTH_PW"])) { + //OC_Log::write('core',"Logged in with HTTP Authentication",OC_Log::DEBUG); + OC_User::unsetMagicInCookie(); + OC_Util::redirectToDefaultPage(); + }else{ + $error = true; } + } OC_Template::printGuestPage('', 'login', array('error' => $error, 'redirect' => isset($_REQUEST['redirect_url'])?$_REQUEST['redirect_url']:'' )); } From 58d1a3516af1450c6d82f75384bfb2a3f8ea3282 Mon Sep 17 00:00:00 2001 From: Thomas Tanghus Date: Thu, 1 Dec 2011 16:06:27 +0100 Subject: [PATCH 02/10] Removed some debug statements. Changed double quotes to single quotes. --- apps/calendar/export.php | 26 +++++++++++++------------- apps/contacts/export.php | 28 +++++++++++----------------- 2 files changed, 24 insertions(+), 30 deletions(-) diff --git a/apps/calendar/export.php b/apps/calendar/export.php index 3e93a1ad61..1647bf14a9 100644 --- a/apps/calendar/export.php +++ b/apps/calendar/export.php @@ -6,33 +6,33 @@ * See the COPYING-README file. */ -require_once ("../../lib/base.php"); +require_once ('../../lib/base.php'); OC_Util::checkLoggedIn(); OC_Util::checkAppEnabled('calendar'); -$cal = isset($_GET["calid"]) ? $_GET["calid"] : NULL; -$event = isset($_GET["eventid"]) ? $_GET["eventid"] : NULL; +$cal = isset($_GET['calid']) ? $_GET['calid'] : NULL; +$event = isset($_GET['eventid']) ? $_GET['eventid'] : NULL; if(isset($cal)){ $calendar = OC_Calendar_Calendar::findCalendar($cal); - if($calendar["userid"] != OC_User::getUser()){ + if($calendar['userid'] != OC_User::getUser()){ OC_JSON::error(); exit; } $calobjects = OC_Calendar_Object::all($cal); - header("Content-Type: text/Calendar"); - header("Content-Disposition: inline; filename=calendar.ics"); + header('Content-Type: text/Calendar'); + header('Content-Disposition: inline; filename=' . $calendar['displayname'] . '.ics'); for($i = 0;$i <= count($calobjects); $i++){ - echo $calobjects[$i]["calendardata"] . "\n"; + echo $calobjects[$i]['calendardata'] . '\n'; } }elseif(isset($event)){ - $data = OC_Calendar_Object::find($_GET["eventid"]); - $calendarid = $data["calendarid"]; + $data = OC_Calendar_Object::find($_GET['eventid']); + $calendarid = $data['calendarid']; $calendar = OC_Calendar_Calendar::findCalendar($calendarid); - if($calendar["userid"] != OC_User::getUser()){ + if($calendar['userid'] != OC_User::getUser()){ OC_JSON::error(); exit; } - header("Content-Type: text/Calendar"); - header("Content-Disposition: inline; filename=" . $data["summary"] . ".ics"); - echo $data["calendardata"]; + header('Content-Type: text/Calendar'); + header('Content-Disposition: inline; filename=' . $data['summary'] . '.ics'); + echo $data['calendardata']; } ?> diff --git a/apps/contacts/export.php b/apps/contacts/export.php index 3c74d7f553..4a1e7a172d 100644 --- a/apps/contacts/export.php +++ b/apps/contacts/export.php @@ -9,36 +9,30 @@ require_once ("../../lib/base.php"); OC_Util::checkLoggedIn(); OC_Util::checkAppEnabled('contacts'); -$book = isset($_GET["bookid"]) ? $_GET["bookid"] : NULL; -$contact = isset($_GET["contactid"]) ? $_GET["contactid"] : NULL; +$book = isset($_GET['bookid']) ? $_GET['bookid'] : NULL; +$contact = isset($_GET['contactid']) ? $_GET['contactid'] : NULL; if(isset($book)){ - OC_Log::write('contacts',"book isset($book)",OC_Log::DEBUG); $addressbook = OC_Contacts_Addressbook::find($book); - OC_Log::write('contacts',"Got addressbook",OC_Log::DEBUG); - OC_Log::write('contacts',"userid: {$addressbook["userid"]}",OC_Log::DEBUG); - if($addressbook["userid"] != OC_User::getUser()){ + if($addressbook['userid'] != OC_User::getUser()){ OC_JSON::error(); exit; } - OC_Log::write('contacts',"User match",OC_Log::DEBUG); $cardobjects = OC_Contacts_VCard::all($book); - header("Content-Type: text/directory"); - header("Content-Disposition: inline; filename=addressbook.vcf"); + header('Content-Type: text/directory'); + header('Content-Disposition: inline; filename=' . $addressbook['displayname'] . '.vcf'); for($i = 0;$i <= count($cardobjects); $i++){ - echo $cardobjects[$i]["carddata"] . "\n"; + echo trim($cardobjects[$i]['carddata']) . '\n'; } }elseif(isset($contact)){ - OC_Log::write('contacts',"contact isset($contact)",OC_Log::DEBUG); $data = OC_Contacts_VCard::find($contact); - $addressbookid = $data["addressbookid"]; - OC_Log::write('contacts',"addressbookid: $addressbookid",OC_Log::DEBUG); + $addressbookid = $data['addressbookid']; $addressbook = OC_Contacts_Addressbook::find($addressbookid); - if($addressbook["userid"] != OC_User::getUser()){ + if($addressbook['userid'] != OC_User::getUser()){ OC_JSON::error(); exit; } - header("Content-Type: text/directory"); - header("Content-Disposition: inline; filename=" . $data["fullname"] . ".vcf"); - echo $data["carddata"]; + header('Content-Type: text/directory'); + header('Content-Disposition: inline; filename=' . $data['fullname'] . '.vcf'); + echo $data['carddata']; } ?> From 95ae0f23f14c9e6854999233481e107cc330d70f Mon Sep 17 00:00:00 2001 From: Thomas Tanghus Date: Sun, 4 Dec 2011 20:25:46 +0100 Subject: [PATCH 03/10] Added UI for selecting/editing address books. Export, CardDAV link and activation/deactivation of address books done. --- apps/contacts/ajax/activation.php | 23 ++++ apps/contacts/ajax/addbook.php | 19 +++ apps/contacts/ajax/chooseaddressbook.php | 19 +++ apps/contacts/css/styles.css | 1 + apps/contacts/index.php | 7 + apps/contacts/js/interface.js | 120 ++++++++++++++++++ apps/contacts/lib/addressbook.php | 20 +++ apps/contacts/templates/index.php | 16 ++- .../templates/part.chooseaddressbook.php | 23 ++++ .../part.chooseaddressbook.rowfields.php | 4 + .../templates/part.editaddressbook.php | 31 +++++ 11 files changed, 277 insertions(+), 6 deletions(-) create mode 100644 apps/contacts/ajax/activation.php create mode 100644 apps/contacts/ajax/addbook.php create mode 100644 apps/contacts/ajax/chooseaddressbook.php create mode 100644 apps/contacts/templates/part.chooseaddressbook.php create mode 100644 apps/contacts/templates/part.chooseaddressbook.rowfields.php create mode 100644 apps/contacts/templates/part.editaddressbook.php diff --git a/apps/contacts/ajax/activation.php b/apps/contacts/ajax/activation.php new file mode 100644 index 0000000000..6e137692da --- /dev/null +++ b/apps/contacts/ajax/activation.php @@ -0,0 +1,23 @@ + + * Copyright (c) 2011 Bart Visscher + * This file is licensed under the Affero General Public License version 3 or + * later. + * See the COPYING-README file. + */ + +require_once ("../../../lib/base.php"); +if(!OC_USER::isLoggedIn()) { + die(""); +} +OC_JSON::checkAppEnabled('contacts'); +$bookid = $_POST['bookid']; +OC_Contacts_Addressbook::setActive($bookid, $_POST['active']); +$book = OC_Contacts_Addressbook::find($bookid); + +/* is there an OC_JSON::error() ? */ +OC_JSON::success(array( + 'active' => $book['active'], + 'bookid' => $bookid, +)); diff --git a/apps/contacts/ajax/addbook.php b/apps/contacts/ajax/addbook.php new file mode 100644 index 0000000000..ce74ccf9d2 --- /dev/null +++ b/apps/contacts/ajax/addbook.php @@ -0,0 +1,19 @@ + + * This file is licensed under the Affero General Public License version 3 or + * later. + * See the COPYING-README file. + */ + +require_once('../../../lib/base.php'); +$l10n = new OC_L10N('contacts'); +if(!OC_USER::isLoggedIn()) { + die(""); +} +OC_JSON::checkAppEnabled('contacts'); +$tmpl = new OC_Template('contacts', 'part.editaddressbook'); +$tmpl->assign('new', true); +$tmpl->assign('book', $book); +$tmpl->printPage(); +?> diff --git a/apps/contacts/ajax/chooseaddressbook.php b/apps/contacts/ajax/chooseaddressbook.php new file mode 100644 index 0000000000..e150f97f54 --- /dev/null +++ b/apps/contacts/ajax/chooseaddressbook.php @@ -0,0 +1,19 @@ + + * This file is licensed under the Affero General Public License version 3 or + * later. + * See the COPYING-README file. + */ + +require_once('../../../lib/base.php'); +$l10n = new OC_L10N('contacts'); +if(!OC_USER::isLoggedIn()) { + die(""); +} +OC_JSON::checkAppEnabled('contacts'); +OC_Log::write('contacts','chooseaddressbook.php',OC_Log::DEBUG); + +$output = new OC_TEMPLATE("contacts", "part.chooseaddressbook"); +$output -> printpage(); +?> diff --git a/apps/contacts/css/styles.css b/apps/contacts/css/styles.css index f351589fe1..048f4cf9d2 100644 --- a/apps/contacts/css/styles.css +++ b/apps/contacts/css/styles.css @@ -1,3 +1,4 @@ +#chooseaddressbook {margin-right: 170px; float: right; font-size: 12px;} #contacts_details_name { font-weight:bold;font-size:1.1em;margin-left:25%;} #contacts_details_photo { margin:.5em 0em .5em 25%; } diff --git a/apps/contacts/index.php b/apps/contacts/index.php index 29d41d3c4c..57c28a5761 100644 --- a/apps/contacts/index.php +++ b/apps/contacts/index.php @@ -79,6 +79,13 @@ $l10n = new OC_L10N('contacts'); $adr_types = OC_Contacts_VCard::getTypesOfProperty($l10n, 'ADR'); $phone_types = OC_Contacts_VCard::getTypesOfProperty($l10n, 'TEL'); +// Include Style and Script +OC_Util::addScript('contacts','interface'); +OC_Util::addStyle('contacts','styles'); +OC_Util::addStyle('contacts','formtastic'); +OC_Util::addScript('', 'jquery.multiselect'); +OC_Util::addStyle('', 'jquery.multiselect'); + // Process the template $tmpl = new OC_Template( 'contacts', 'index', 'user' ); $tmpl->assign('adr_types',$adr_types); diff --git a/apps/contacts/js/interface.js b/apps/contacts/js/interface.js index ba1c0e536c..077bbd2071 100644 --- a/apps/contacts/js/interface.js +++ b/apps/contacts/js/interface.js @@ -1,3 +1,106 @@ +Contacts={ + space:' ', + UI:{ + showCardDAVUrl:function(username, bookname){ + $('#carddav_url').val(totalurl + '/' + username + '/' + bookname); + $('#carddav_url').show(); + $('#carddav_url_close').show(); + }, + Addressbooks:{ + overview:function(){ + if($('#chooseaddressbook_dialog').dialog('isOpen') == true){ + /*alert('Address books.moveToTop');*/ + $('#chooseaddressbook_dialog').dialog('moveToTop'); + }else{ + $('#dialog_holder').load(OC.filePath('contacts', 'ajax', 'chooseaddressbook.php'), function(){ + /*alert('Address books.load');*/ + $('#chooseaddressbook_dialog').dialog({ + width : 600, + close : function(event, ui) { + $(this).dialog('destroy').remove(); + } + }); + }); + } + }, + activation:function(checkbox, bookid) + { + /* TODO: + * Add integer field 'active' to table 'contacts_addressbooks'. See apps/contacts/README.tanghus */ + $.post(OC.filePath('contacts', 'ajax', 'activation.php'), { bookid: bookid, active: checkbox.checked?1:0 }, + function(data) { + /* + * Arguments: + * data.status + * data.bookid + */ + if (data.status == 'success'){ + checkbox.checked = data.active == 1; + alert('Update Contacts list.'); + /* TODO: Update Contacts list. + if (data.active == 1){ + $('#calendar_holder').fullCalendar('addEventSource', data.eventSource); + }else{ + $('#calendar_holder').fullCalendar('removeEventSource', data.eventSource.url); + } + */ + } + }); + }, + newAddressbook:function(object){ + var tr = $(document.createElement('tr')) + .load(OC.filePath('contacts', 'ajax', 'addbook.php')); + $(object).closest('tr').after(tr).hide(); + /* TODO: Shouldn't there be some kinda error checking here? */ + }, + deleteAddressbook:function(bookid){ + var check = confirm("Do you really want to delete this address book?"); + if(check == false){ + return false; + }else{ + $.post(OC.filePath('contacts', 'ajax', 'deletebook.php'), { id: bookid}, + function(data) { + if (data.status == 'success'){ + alert('TODO: Update Contacts list.'); + /* TODO: Update Contacts list. + var url = 'ajax/deletebook.php?id='+bookid; + $('#calendar_holder').fullCalendar('removeEventSource', url); + $('#choosecalendar_dialog').dialog('destroy').remove();*/ + Contacts.UI.Addressbooks.overview(); + } + }); + } + }, + submit:function(button, bookid){ + alert('TODO: Add or update address book.'); + /* TODO: Add or update address book. + var displayname = $("#displayname_"+calendarid).val(); + var active = $("#edit_active_"+calendarid+":checked").length; + var description = $("#description_"+calendarid).val(); + var calendarcolor = $("#calendarcolor_"+calendarid).val(); + + var url; + if (calendarid == 'new'){ + url = "ajax/createcalendar.php"; + }else{ + url = "ajax/updatecalendar.php"; + } + $.post(url, { id: calendarid, name: displayname, active: active, description: description, color: calendarcolor }, + function(data){ + if(data.status == 'success'){ + $(button).closest('tr').prev().html(data.page).show().next().remove(); + $('#calendar_holder').fullCalendar('removeEventSource', data.eventSource.url); + $('#calendar_holder').fullCalendar('addEventSource', data.eventSource); + } + }, 'json');*/ + }, + cancel:function(button, bookid){ + $(button).closest('tr').prev().show().next().remove(); + } + } + } +} + $(document).ready(function(){ /*------------------------------------------------------------------------- * Event handlers @@ -79,6 +182,23 @@ $(document).ready(function(){ return false; }); + $('#chooseaddressbook').click(function(){ + Contacts.UI.Addressbooks.overview(); + /* + $.getJSON('ajax/showaddcard.php',{},function(jsondata){ + if(jsondata.status == 'success'){ + $('#rightcontent').data('id',''); + $('#rightcontent').html(jsondata.data.page) + .find('select').chosen(); + } + else{ + alert(jsondata.data.message); + } + }); + */ + return false; + }); + $('#contacts_newcontact').click(function(){ $.getJSON('ajax/showaddcard.php',{},function(jsondata){ if(jsondata.status == 'success'){ diff --git a/apps/contacts/lib/addressbook.php b/apps/contacts/lib/addressbook.php index 87477ed7ed..93f069cff2 100644 --- a/apps/contacts/lib/addressbook.php +++ b/apps/contacts/lib/addressbook.php @@ -140,6 +140,26 @@ class OC_Contacts_Addressbook{ return true; } + /** + * @brief Activates an addressbook + * @param integer $id + * @param integer $name + * @return boolean + */ + public static function setActive($id,$active){ + // Need these ones for checking uri + //$addressbook = self::find($id); + + if(is_null($id)){ + $id = 0; + } + + $stmt = OC_DB::prepare( 'UPDATE *PREFIX*contacts_addressbooks SET active=?, ctag=ctag+1 WHERE id=?' ); + $result = $stmt->execute(array($active,$id)); + + return true; + } + /** * @brief removes an address book * @param integer $id diff --git a/apps/contacts/templates/index.php b/apps/contacts/templates/index.php index 630dca41b2..20a1e34eb7 100644 --- a/apps/contacts/templates/index.php +++ b/apps/contacts/templates/index.php @@ -1,12 +1,10 @@ - - +
+
@@ -17,3 +15,9 @@ OC_Util::addStyle('contacts','formtastic');
inc("part.addcardform"); ?>
+ +
+
+ t("There was a fail, while parsing the file."); ?> +
+ diff --git a/apps/contacts/templates/part.chooseaddressbook.php b/apps/contacts/templates/part.chooseaddressbook.php new file mode 100644 index 0000000000..a698a33417 --- /dev/null +++ b/apps/contacts/templates/part.chooseaddressbook.php @@ -0,0 +1,23 @@ +
"> + +"; + $tmpl = new OC_Template('contacts', 'part.chooseaddressbook.rowfields'); + $tmpl->assign('addressbook', $option_addressbooks[$i]); + $tmpl->printpage(); + echo ""; +} +?> + + + + + + +
+ t('New Address Book') ?> +
+

">

+
diff --git a/apps/contacts/templates/part.chooseaddressbook.rowfields.php b/apps/contacts/templates/part.chooseaddressbook.rowfields.php new file mode 100644 index 0000000000..f6c1131096 --- /dev/null +++ b/apps/contacts/templates/part.chooseaddressbook.rowfields.php @@ -0,0 +1,4 @@ +"; + echo ""; + echo "t("CardDav Link") . "\" class=\"action\">t("Download") . "\" class=\"action\">t("Delete") . "\" class=\"action\">"; diff --git a/apps/contacts/templates/part.editaddressbook.php b/apps/contacts/templates/part.editaddressbook.php new file mode 100644 index 0000000000..4e63ce5ec1 --- /dev/null +++ b/apps/contacts/templates/part.editaddressbook.php @@ -0,0 +1,31 @@ + + * This file is licensed under the Affero General Public License version 3 or + * later. + * See the COPYING-README file. + */ +?> +t("Edit Address Book"); ?>" colspan="6"> + + + + + + + + + + + +
t('Displayname') ?> + +
+ > + +
+);" value="t("Save") : $l->t("Submit"); ?>"> +);" value="t("Cancel"); ?>"> + From 830efdccac71ebbd4ee5f9414abd0878f2ff9349 Mon Sep 17 00:00:00 2001 From: Thomas Tanghus Date: Mon, 5 Dec 2011 03:38:06 +0100 Subject: [PATCH 04/10] Fixed adding, editing and deleting address books. One minor UI flaw remains. --- apps/contacts/ajax/addbook.php | 6 +++- apps/contacts/ajax/chooseaddressbook.php | 2 +- apps/contacts/ajax/createaddressbook.php | 26 ++++++++++++++ apps/contacts/ajax/deletebook.php | 4 ++- apps/contacts/ajax/editaddressbook.php | 20 +++++++++++ apps/contacts/ajax/updateaddressbook.php | 26 ++++++++++++++ apps/contacts/js/interface.js | 36 ++++++++++--------- .../part.chooseaddressbook.rowfields.php | 2 +- 8 files changed, 101 insertions(+), 21 deletions(-) create mode 100644 apps/contacts/ajax/createaddressbook.php create mode 100644 apps/contacts/ajax/editaddressbook.php create mode 100644 apps/contacts/ajax/updateaddressbook.php diff --git a/apps/contacts/ajax/addbook.php b/apps/contacts/ajax/addbook.php index ce74ccf9d2..d8e5a0ecd5 100644 --- a/apps/contacts/ajax/addbook.php +++ b/apps/contacts/ajax/addbook.php @@ -12,8 +12,12 @@ if(!OC_USER::isLoggedIn()) { die(""); } OC_JSON::checkAppEnabled('contacts'); +$book = array( + 'id' => 'new', + 'displayname' => '', +); $tmpl = new OC_Template('contacts', 'part.editaddressbook'); $tmpl->assign('new', true); -$tmpl->assign('book', $book); +$tmpl->assign('addressbook', $book); $tmpl->printPage(); ?> diff --git a/apps/contacts/ajax/chooseaddressbook.php b/apps/contacts/ajax/chooseaddressbook.php index e150f97f54..d55fdf3e93 100644 --- a/apps/contacts/ajax/chooseaddressbook.php +++ b/apps/contacts/ajax/chooseaddressbook.php @@ -12,7 +12,7 @@ if(!OC_USER::isLoggedIn()) { die(""); } OC_JSON::checkAppEnabled('contacts'); -OC_Log::write('contacts','chooseaddressbook.php',OC_Log::DEBUG); +/* OC_Log::write('contacts','chooseaddressbook.php',OC_Log::DEBUG); */ $output = new OC_TEMPLATE("contacts", "part.chooseaddressbook"); $output -> printpage(); diff --git a/apps/contacts/ajax/createaddressbook.php b/apps/contacts/ajax/createaddressbook.php new file mode 100644 index 0000000000..3dd38703c1 --- /dev/null +++ b/apps/contacts/ajax/createaddressbook.php @@ -0,0 +1,26 @@ + + * Copyright (c) 2011 Bart Visscher + * This file is licensed under the Affero General Public License version 3 or + * later. + * See the COPYING-README file. + */ +require_once('../../../lib/base.php'); + +$l10n = new OC_L10N('contacts'); + +// Check if we are a user +OC_JSON::checkLoggedIn(); +OC_JSON::checkAppEnabled('contacts'); + +$userid = OC_User::getUser(); +$bookid = OC_Contacts_Addressbook::add($userid, $_POST['name'], null); +OC_Contacts_Addressbook::setActive($bookid, 1); +$book = OC_Contacts_Addressbook::find($bookid); +$tmpl = new OC_Template('contacts', 'part.chooseaddressbook.rowfields'); +$tmpl->assign('addressbook', $book); +OC_JSON::success(array( + 'page' => $tmpl->fetchPage(), + 'bookid' => $bookid, +)); diff --git a/apps/contacts/ajax/deletebook.php b/apps/contacts/ajax/deletebook.php index c13217ef2e..238975436e 100644 --- a/apps/contacts/ajax/deletebook.php +++ b/apps/contacts/ajax/deletebook.php @@ -23,7 +23,9 @@ // Init owncloud require_once('../../../lib/base.php'); -$id = $_GET['id']; +$id = $_POST['id']; + +OC_Log::write('contacts','deletebook.php: '.$id,OC_Log::DEBUG); $l10n = new OC_L10N('contacts'); diff --git a/apps/contacts/ajax/editaddressbook.php b/apps/contacts/ajax/editaddressbook.php new file mode 100644 index 0000000000..abdad09dea --- /dev/null +++ b/apps/contacts/ajax/editaddressbook.php @@ -0,0 +1,20 @@ + + * This file is licensed under the Affero General Public License version 3 or + * later. + * See the COPYING-README file. + */ + +require_once('../../../lib/base.php'); +$l10n = new OC_L10N('contacts'); +if(!OC_USER::isLoggedIn()) { + die(""); +} +OC_JSON::checkAppEnabled('contacts'); +$addressbook = OC_Contacts_Addressbook::find($_GET['bookid']); +$tmpl = new OC_Template("contacts", "part.editaddressbook"); +$tmpl->assign('new', false); +$tmpl->assign('addressbook', $addressbook); +$tmpl->printPage(); +?> diff --git a/apps/contacts/ajax/updateaddressbook.php b/apps/contacts/ajax/updateaddressbook.php new file mode 100644 index 0000000000..ccf1cef03f --- /dev/null +++ b/apps/contacts/ajax/updateaddressbook.php @@ -0,0 +1,26 @@ + + * This file is licensed under the Affero General Public License version 3 or + * later. + * See the COPYING-README file. + */ + +require_once('../../../lib/base.php'); + +$l10n = new OC_L10N('contacts'); + +// Check if we are a user +OC_JSON::checkLoggedIn(); +OC_JSON::checkAppEnabled('contacts'); + +$bookid = $_POST['id']; +OC_Contacts_Addressbook::edit($bookid, $_POST['name'], null); +OC_Contacts_Addressbook::setActive($bookid, $_POST['active']); +$addressbook = OC_Contacts_Addressbook::find($bookid); +$tmpl = new OC_Template('contacts', 'part.chooseaddressbook.rowfields'); +$tmpl->assign('book', $book); +OC_JSON::success(array( + 'page' => $tmpl->fetchPage(), + 'addressbook' => $addressbook, +)); diff --git a/apps/contacts/js/interface.js b/apps/contacts/js/interface.js index 077bbd2071..f34cde8957 100644 --- a/apps/contacts/js/interface.js +++ b/apps/contacts/js/interface.js @@ -36,7 +36,7 @@ Contacts={ */ if (data.status == 'success'){ checkbox.checked = data.active == 1; - alert('Update Contacts list.'); + alert('TODO: Update Contacts list.'); /* TODO: Update Contacts list. if (data.active == 1){ $('#calendar_holder').fullCalendar('addEventSource', data.eventSource); @@ -53,6 +53,11 @@ Contacts={ $(object).closest('tr').after(tr).hide(); /* TODO: Shouldn't there be some kinda error checking here? */ }, + editAddressbook:function(object, bookid){ + var tr = $(document.createElement('tr')) + .load(OC.filePath('contacts', 'ajax', 'editaddressbook.php') + "?bookid="+bookid); + $(object).closest('tr').after(tr).hide(); + }, deleteAddressbook:function(bookid){ var check = confirm("Do you really want to delete this address book?"); if(check == false){ @@ -61,38 +66,35 @@ Contacts={ $.post(OC.filePath('contacts', 'ajax', 'deletebook.php'), { id: bookid}, function(data) { if (data.status == 'success'){ - alert('TODO: Update Contacts list.'); + /* alert('TODO: Update Contacts list.'); */ /* TODO: Update Contacts list. var url = 'ajax/deletebook.php?id='+bookid; - $('#calendar_holder').fullCalendar('removeEventSource', url); - $('#choosecalendar_dialog').dialog('destroy').remove();*/ + $('#calendar_holder').fullCalendar('removeEventSource', url);*/ + $('#chooseaddressbook_dialog').dialog('destroy').remove(); Contacts.UI.Addressbooks.overview(); + } else { + alert('Error: ' + data.message); } }); } }, submit:function(button, bookid){ - alert('TODO: Add or update address book.'); - /* TODO: Add or update address book. - var displayname = $("#displayname_"+calendarid).val(); - var active = $("#edit_active_"+calendarid+":checked").length; - var description = $("#description_"+calendarid).val(); - var calendarcolor = $("#calendarcolor_"+calendarid).val(); + var displayname = $("#displayname_"+bookid).val(); + var active = $("#edit_active_"+bookid+":checked").length; + var description = $("#description_"+bookid).val(); var url; - if (calendarid == 'new'){ - url = "ajax/createcalendar.php"; + if (bookid == 'new'){ + url = OC.filePath('contacts', 'ajax', 'createaddressbook.php'); }else{ - url = "ajax/updatecalendar.php"; + url = OC.filePath('contacts', 'ajax', 'updateaddressbook.php'); } - $.post(url, { id: calendarid, name: displayname, active: active, description: description, color: calendarcolor }, + $.post(url, { id: bookid, name: displayname, active: active, description: description }, function(data){ if(data.status == 'success'){ $(button).closest('tr').prev().html(data.page).show().next().remove(); - $('#calendar_holder').fullCalendar('removeEventSource', data.eventSource.url); - $('#calendar_holder').fullCalendar('addEventSource', data.eventSource); } - }, 'json');*/ + }); }, cancel:function(button, bookid){ $(button).closest('tr').prev().show().next().remove(); diff --git a/apps/contacts/templates/part.chooseaddressbook.rowfields.php b/apps/contacts/templates/part.chooseaddressbook.rowfields.php index f6c1131096..7f7b5a9154 100644 --- a/apps/contacts/templates/part.chooseaddressbook.rowfields.php +++ b/apps/contacts/templates/part.chooseaddressbook.rowfields.php @@ -1,4 +1,4 @@ "; echo ""; - echo "t("CardDav Link") . "\" class=\"action\">t("Download") . "\" class=\"action\">t("Delete") . "\" class=\"action\">"; + echo "t("CardDav Link") . "\" class=\"action\">t("Download") . "\" class=\"action\">t("Edit") . "\" class=\"action\" onclick=\"Contacts.UI.Addressbooks.editAddressbook(this, " . $_['addressbook']["id"] . ");\">t("Delete") . "\" class=\"action\">"; From b3661adf028570f6158dfd5092ecb1398d5be0df Mon Sep 17 00:00:00 2001 From: Thomas Tanghus Date: Fri, 9 Dec 2011 15:10:51 +0100 Subject: [PATCH 05/10] Various fixes to multiple address books handling --- apps/contacts/ajax/chooseaddressbook.php | 2 +- apps/contacts/ajax/createaddressbook.php | 6 +- apps/contacts/ajax/showaddcard.php | 2 +- apps/contacts/ajax/updateaddressbook.php | 2 +- apps/contacts/index.php | 37 +++++---- apps/contacts/js/interface.js | 8 +- apps/contacts/lib/addressbook.php | 82 ++++++++++++++++++- apps/contacts/lib/hooks.php | 2 +- apps/contacts/lib/vcard.php | 26 +++++- apps/contacts/templates/index.php | 2 +- .../templates/part.chooseaddressbook.php | 6 +- .../part.chooseaddressbook.rowfields.php | 6 +- apps/contacts/templates/part.contacts.php | 2 +- 13 files changed, 146 insertions(+), 37 deletions(-) diff --git a/apps/contacts/ajax/chooseaddressbook.php b/apps/contacts/ajax/chooseaddressbook.php index d55fdf3e93..e150f97f54 100644 --- a/apps/contacts/ajax/chooseaddressbook.php +++ b/apps/contacts/ajax/chooseaddressbook.php @@ -12,7 +12,7 @@ if(!OC_USER::isLoggedIn()) { die(""); } OC_JSON::checkAppEnabled('contacts'); -/* OC_Log::write('contacts','chooseaddressbook.php',OC_Log::DEBUG); */ +OC_Log::write('contacts','chooseaddressbook.php',OC_Log::DEBUG); $output = new OC_TEMPLATE("contacts", "part.chooseaddressbook"); $output -> printpage(); diff --git a/apps/contacts/ajax/createaddressbook.php b/apps/contacts/ajax/createaddressbook.php index 3dd38703c1..8fec07ebca 100644 --- a/apps/contacts/ajax/createaddressbook.php +++ b/apps/contacts/ajax/createaddressbook.php @@ -17,10 +17,10 @@ OC_JSON::checkAppEnabled('contacts'); $userid = OC_User::getUser(); $bookid = OC_Contacts_Addressbook::add($userid, $_POST['name'], null); OC_Contacts_Addressbook::setActive($bookid, 1); -$book = OC_Contacts_Addressbook::find($bookid); +$addressbook = OC_Contacts_Addressbook::find($bookid); $tmpl = new OC_Template('contacts', 'part.chooseaddressbook.rowfields'); -$tmpl->assign('addressbook', $book); +$tmpl->assign('addressbook', $addressbook); OC_JSON::success(array( 'page' => $tmpl->fetchPage(), - 'bookid' => $bookid, + 'addressbook' => $addressbook, )); diff --git a/apps/contacts/ajax/showaddcard.php b/apps/contacts/ajax/showaddcard.php index 98367758fd..5842046f00 100644 --- a/apps/contacts/ajax/showaddcard.php +++ b/apps/contacts/ajax/showaddcard.php @@ -32,7 +32,7 @@ OC_JSON::checkAppEnabled('contacts'); $adr_types = OC_Contacts_VCard::getTypesOfProperty($l10n, 'ADR'); $phone_types = OC_Contacts_VCard::getTypesOfProperty($l10n, 'TEL'); -$addressbooks = OC_Contacts_Addressbook::all(OC_USER::getUser()); +$addressbooks = OC_Contacts_Addressbook::allAddressbooks(OC_USER::getUser()); $tmpl = new OC_Template('contacts','part.addcardform'); $tmpl->assign('addressbooks',$addressbooks); $tmpl->assign('adr_types',$adr_types); diff --git a/apps/contacts/ajax/updateaddressbook.php b/apps/contacts/ajax/updateaddressbook.php index ccf1cef03f..011dfc35d1 100644 --- a/apps/contacts/ajax/updateaddressbook.php +++ b/apps/contacts/ajax/updateaddressbook.php @@ -19,7 +19,7 @@ OC_Contacts_Addressbook::edit($bookid, $_POST['name'], null); OC_Contacts_Addressbook::setActive($bookid, $_POST['active']); $addressbook = OC_Contacts_Addressbook::find($bookid); $tmpl = new OC_Template('contacts', 'part.chooseaddressbook.rowfields'); -$tmpl->assign('book', $book); +$tmpl->assign('addressbook', $addressbook); OC_JSON::success(array( 'page' => $tmpl->fetchPage(), 'addressbook' => $addressbook, diff --git a/apps/contacts/index.php b/apps/contacts/index.php index 57c28a5761..917335fb68 100644 --- a/apps/contacts/index.php +++ b/apps/contacts/index.php @@ -21,7 +21,7 @@ */ function contacts_namesort($a,$b){ - return strcmp($a['name'],$b['name']); + return strcmp($a['fullname'],$b['fullname']); } // Init owncloud @@ -32,16 +32,17 @@ OC_Util::checkLoggedIn(); OC_Util::checkAppEnabled('contacts'); // Check if the user has an addressbook -$addressbooks = OC_Contacts_Addressbook::all(OC_User::getUser()); -if( count($addressbooks) == 0){ - OC_Contacts_Addressbook::add(OC_User::getUser(),'default','Default Address Book'); - $addressbooks = OC_Contacts_Addressbook::all(OC_User::getUser()); -} -$prefbooks = OC_Preferences::getValue(OC_User::getUser(),'contacts','openaddressbooks',null); -if(is_null($prefbooks)){ - $prefbooks = $addressbooks[0]['id']; - OC_Preferences::setValue(OC_User::getUser(),'contacts','openaddressbooks',$prefbooks); -} +$openaddressbooks = OC_Contacts_Addressbook::activeAddressbookIds(OC_User::getUser()); +OC_Log::write('contacts','Got IDs'.implode(',', $openaddressbooks),OC_Log::DEBUG); +// if( count($addressbooks) == 0){ +// OC_Contacts_Addressbook::add(OC_User::getUser(),'default','Default Address Book'); +// $addressbooks = OC_Contacts_Addressbook::all(OC_User::getUser()); +// } +// $prefbooks = OC_Preferences::getValue(OC_User::getUser(),'contacts','openaddressbooks',null); +// if(is_null($prefbooks)){ +// $prefbooks = $addressbooks[0]['id']; +// OC_Preferences::setValue(OC_User::getUser(),'contacts','openaddressbooks',$prefbooks); +// } // Load the files we need OC_App::setActiveNavigationEntry( 'contacts_index' ); @@ -52,16 +53,18 @@ $id = isset( $_GET['id'] ) ? $_GET['id'] : null; // sort addressbooks (use contactsort) usort($addressbooks,'contacts_namesort'); // Addressbooks to load -$openaddressbooks = explode(';',$prefbooks); +//$openaddressbooks = explode(';',$prefbooks); $contacts = array(); foreach( $openaddressbooks as $addressbook ){ $addressbookcontacts = OC_Contacts_VCard::all($addressbook); + OC_Log::write('contacts','index.php. Getting contacts for: '.$addressbook,OC_Log::DEBUG); foreach( $addressbookcontacts as $contact ){ if(is_null($contact['fullname'])){ continue; } - $contacts[] = array( 'name' => $contact['fullname'], 'id' => $contact['id'] ); + $contacts[] = $contact; + //$contacts[] = array( 'name' => $contact['fullname'], 'id' => $contact['id'] ); } } @@ -75,10 +78,6 @@ if( !is_null($id) || count($contacts)){ $details = OC_Contacts_VCard::structureContact($vcard); } -$l10n = new OC_L10N('contacts'); -$adr_types = OC_Contacts_VCard::getTypesOfProperty($l10n, 'ADR'); -$phone_types = OC_Contacts_VCard::getTypesOfProperty($l10n, 'TEL'); - // Include Style and Script OC_Util::addScript('contacts','interface'); OC_Util::addStyle('contacts','styles'); @@ -86,6 +85,10 @@ OC_Util::addStyle('contacts','formtastic'); OC_Util::addScript('', 'jquery.multiselect'); OC_Util::addStyle('', 'jquery.multiselect'); +$l10n = new OC_L10N('contacts'); +$adr_types = OC_Contacts_VCard::getTypesOfProperty($l10n, 'ADR'); +$phone_types = OC_Contacts_VCard::getTypesOfProperty($l10n, 'TEL'); + // Process the template $tmpl = new OC_Template( 'contacts', 'index', 'user' ); $tmpl->assign('adr_types',$adr_types); diff --git a/apps/contacts/js/interface.js b/apps/contacts/js/interface.js index f34cde8957..8e699f52c9 100644 --- a/apps/contacts/js/interface.js +++ b/apps/contacts/js/interface.js @@ -6,10 +6,15 @@ Contacts={ $('#carddav_url').show(); $('#carddav_url_close').show(); }, + Contacts:{ + update:function(){ + alert('Contacts.update()'); + } + }, Addressbooks:{ overview:function(){ + /* alert('overview');*/ if($('#chooseaddressbook_dialog').dialog('isOpen') == true){ - /*alert('Address books.moveToTop');*/ $('#chooseaddressbook_dialog').dialog('moveToTop'); }else{ $('#dialog_holder').load(OC.filePath('contacts', 'ajax', 'chooseaddressbook.php'), function(){ @@ -71,6 +76,7 @@ Contacts={ var url = 'ajax/deletebook.php?id='+bookid; $('#calendar_holder').fullCalendar('removeEventSource', url);*/ $('#chooseaddressbook_dialog').dialog('destroy').remove(); + Contacts.UI.Contacts.update(); Contacts.UI.Addressbooks.overview(); } else { alert('Error: ' + data.message); diff --git a/apps/contacts/lib/addressbook.php b/apps/contacts/lib/addressbook.php index 93f069cff2..882a64bab8 100644 --- a/apps/contacts/lib/addressbook.php +++ b/apps/contacts/lib/addressbook.php @@ -43,8 +43,9 @@ class OC_Contacts_Addressbook{ * @param string $uid * @return array */ - public static function all($uid){ - $stmt = OC_DB::prepare( 'SELECT * FROM *PREFIX*contacts_addressbooks WHERE userid = ?' ); + public static function allAddressbooks($uid){ + OC_Log::write('contacts','allAddressbooks',OC_Log::DEBUG); + $stmt = OC_DB::prepare( 'SELECT * FROM *PREFIX*contacts_addressbooks WHERE userid = ? ORDER BY displayname' ); $result = $stmt->execute(array($uid)); $addressbooks = array(); @@ -55,6 +56,24 @@ class OC_Contacts_Addressbook{ return $addressbooks; } + /** + * @brief Returns the list of active addressbooks for a specific user. + * @param string $uid + * @return array + */ + public static function activeAddressbooks($uid){ + $active = implode(',', self::activeAddressbookIds()); + $stmt = OC_DB::prepare( 'SELECT * FROM *PREFIX*contacts_addressbooks WHERE id IN (?) AND userid = ? ORDER BY displayname' ); + $result = $stmt->execute(array($active, $uid)); + + $addressbooks = array(); + while( $row = $result->fetchRow()){ + $addressbooks[] = $row; + } + + return $addressbooks; + } + /** * @brief Returns the list of addressbooks for a principal (DAV term of user) * @param string $principaluri @@ -62,7 +81,7 @@ class OC_Contacts_Addressbook{ */ public static function allWherePrincipalURIIs($principaluri){ $uid = self::extractUserID($principaluri); - return self::all($uid); + return self::allAddressbooks($uid); } /** @@ -85,7 +104,7 @@ class OC_Contacts_Addressbook{ * @return insertid */ public static function add($userid,$name,$description){ - $all = self::all($userid); + $all = self::allAddressbooks($userid); $uris = array(); foreach($all as $i){ $uris[] = $i['uri']; @@ -140,6 +159,28 @@ class OC_Contacts_Addressbook{ return true; } + /** + * @brief Get active addressbooks for a user. + * @param integer $uid User id. If null current user will be used. + * @return array + */ + public static function activeAddressbookIds($uid){ + if(is_null($uid)){ + $uid = OC_User::getUser(); + } + $prefbooks = OC_Preferences::getValue($uid,'contacts','openaddressbooks',null); + if(is_null($prefbooks)){ + $addressbooks = OC_Contacts_Addressbook::allAddressbooks($uid); + if(count($addressbooks) == 0){ + OC_Contacts_Addressbook::add($uid,'default','Default Address Book'); + $addressbooks = OC_Contacts_Addressbook::allAddressbooks($uid); + } + $prefbooks = $addressbooks[0]['id']; + OC_Preferences::setValue($uid,'contacts','openaddressbooks',$prefbooks); + } + return explode(';',$prefbooks); + } + /** * @brief Activates an addressbook * @param integer $id @@ -149,17 +190,50 @@ class OC_Contacts_Addressbook{ public static function setActive($id,$active){ // Need these ones for checking uri //$addressbook = self::find($id); + OC_Log::write('contacts','setActive('.$id.'): '.$active,OC_Log::DEBUG); if(is_null($id)){ $id = 0; } + /** + * For now I have active state redundant both in preferences and in the address book + * table as I can't get the OC_Contacts_Addressbook::isActive() call to work when + * iterating over several results. + */ $stmt = OC_DB::prepare( 'UPDATE *PREFIX*contacts_addressbooks SET active=?, ctag=ctag+1 WHERE id=?' ); $result = $stmt->execute(array($active,$id)); + $openaddressbooks = self::activeAddressbookIds(); + if($active) { + if(!in_array($id, $openaddressbooks)) { + // TODO: Test this instead + //$openaddressbooks[] = $id; + array_push($openaddressbooks, $id); + } + } else { + if(in_array($id, $openaddressbooks)) { + array_pop($openaddressbooks, $id); + $openaddressbooks = array_diff( $openaddressbooks, array($id) ); + } + } + sort($openaddressbooks, SORT_NUMERIC); + OC_Log::write('contacts','setActive('.$id.'):all '.implode(';', $openaddressbooks),OC_Log::DEBUG); + OC_Preferences::setValue(OC_User::getUser(),'contacts','openaddressbooks',implode(';', $openaddressbooks)); return true; } + /** + * @brief Checks if an addressbook is active. + * @param integer $id ID of the address book. + * @return boolean + */ + public static function isActive($id){ + OC_Log::write('contacts','isActive('.$id.')',OC_Log::DEBUG); + OC_Log::write('contacts','isActive('.$id.'): '.in_array($id, self::activeAddressbookIds()),OC_Log::DEBUG); + return in_array($id, self::activeAddressbookIds()); + } + /** * @brief removes an address book * @param integer $id diff --git a/apps/contacts/lib/hooks.php b/apps/contacts/lib/hooks.php index 155cf40f91..356ae26df9 100644 --- a/apps/contacts/lib/hooks.php +++ b/apps/contacts/lib/hooks.php @@ -30,7 +30,7 @@ class OC_Contacts_Hooks{ * @return array */ public function deleteUser($parameters) { - $addressbooks = OC_Contacts_Addressbook::all($parameters['uid']); + $addressbooks = OC_Contacts_Addressbook::allAddressbooks($parameters['uid']); foreach($addressbooks as $addressbook) { OC_Contacts_Addressbook::delete($addressbook['id']); diff --git a/apps/contacts/lib/vcard.php b/apps/contacts/lib/vcard.php index 4865fae764..b03e6ede99 100644 --- a/apps/contacts/lib/vcard.php +++ b/apps/contacts/lib/vcard.php @@ -47,15 +47,35 @@ class OC_Contacts_VCard{ * ['carddata'] */ public static function all($id){ + OC_Log::write('contacts','OC_Contacts_VCard::all ids: '.$id,OC_Log::DEBUG); +// if(is_array($id)) { +// OC_Log::write('contacts','OC_Contacts_VCard::all Array?: '.$id,OC_Log::DEBUG); +// OC_Log::write('contacts','count: '.implode(',', $id),OC_Log::DEBUG); +// $ids = implode(',', $id); +// $prep = '?'.str_repeat ( ',?' , count($id)-1 ); +// //$repeat = str_repeat ( ',?' , count($id)-1 ); +// //OC_Log::write('contacts','OC_Contacts_VCard::all: repeat: '.$repeat,OC_Log::DEBUG); +// OC_Log::write('contacts','OC_Contacts_VCard::all: from: '.$ids,OC_Log::DEBUG); +// OC_Log::write('contacts','OC_Contacts_VCard::all: PREP: SELECT * FROM contacts_cards WHERE addressbookid IN ('.$prep.')',OC_Log::DEBUG); +// OC_Log::write('contacts','OC_Contacts_VCard::all: SQL: SELECT * FROM contacts_cards WHERE addressbookid IN ('.$prep.')',OC_Log::DEBUG); +// $stmt = OC_DB::prepare( 'SELECT * FROM *PREFIX*contacts_cards WHERE addressbookid IN ('.'?,?,?'.') ORDER BY fullname' ); +// } else { +// $ids = $id; +// $stmt = OC_DB::prepare( 'SELECT * FROM *PREFIX*contacts_cards WHERE addressbookid = ? ORDER BY fullname' ); +// } + $stmt = OC_DB::prepare( 'SELECT * FROM *PREFIX*contacts_cards WHERE addressbookid = ?' ); $result = $stmt->execute(array($id)); + OC_Log::write('contacts','OC_Contacts_VCard::all: result->numRows(): '.$result->numRows(),OC_Log::DEBUG); - $addressbooks = array(); + $cards = array(); while( $row = $result->fetchRow()){ - $addressbooks[] = $row; + $cards[] = $row; + //OC_Log::write('contacts','OC_Contacts_VCard::all: fullname: '.$row['fullname'],OC_Log::DEBUG); } + OC_Log::write('contacts','OC_Contacts_VCard::all: count($cards): '.count($cards),OC_Log::DEBUG); - return $addressbooks; + return $cards; } /** diff --git a/apps/contacts/templates/index.php b/apps/contacts/templates/index.php index 20a1e34eb7..2ecadb4d60 100644 --- a/apps/contacts/templates/index.php +++ b/apps/contacts/templates/index.php @@ -8,7 +8,7 @@
-
    +
      inc("part.contacts"); ?>
diff --git a/apps/contacts/templates/part.chooseaddressbook.php b/apps/contacts/templates/part.chooseaddressbook.php index a698a33417..dc5978d2d0 100644 --- a/apps/contacts/templates/part.chooseaddressbook.php +++ b/apps/contacts/templates/part.chooseaddressbook.php @@ -1,11 +1,15 @@
"> "; $tmpl = new OC_Template('contacts', 'part.chooseaddressbook.rowfields'); $tmpl->assign('addressbook', $option_addressbooks[$i]); + $tmpl->assign('active', OC_Contacts_Addressbook::isActive($option_addressbooks[$i]['id'])); $tmpl->printpage(); echo ""; } diff --git a/apps/contacts/templates/part.chooseaddressbook.rowfields.php b/apps/contacts/templates/part.chooseaddressbook.rowfields.php index 7f7b5a9154..4639ec20b1 100644 --- a/apps/contacts/templates/part.chooseaddressbook.rowfields.php +++ b/apps/contacts/templates/part.chooseaddressbook.rowfields.php @@ -1,4 +1,6 @@ "; - echo ""; + OC_Log::write('contacts','part.chooseaddressbook.rowfields.php',OC_Log::DEBUG); + + echo ""; + echo ""; echo ""; diff --git a/apps/contacts/templates/part.contacts.php b/apps/contacts/templates/part.contacts.php index 6664a3671a..c6772489ea 100644 --- a/apps/contacts/templates/part.contacts.php +++ b/apps/contacts/templates/part.contacts.php @@ -1,3 +1,3 @@ -
  • +
  • -
  • From 5cb10548b30544c0407294fa7e520479673f956c Mon Sep 17 00:00:00 2001 From: Thomas Tanghus Date: Fri, 9 Dec 2011 15:28:51 +0100 Subject: [PATCH 06/10] Resolved conflict --- apps/contacts/index.php | 6 ------ 1 file changed, 6 deletions(-) diff --git a/apps/contacts/index.php b/apps/contacts/index.php index 29c9e4f121..f4624db31a 100644 --- a/apps/contacts/index.php +++ b/apps/contacts/index.php @@ -77,7 +77,6 @@ if( !is_null($id)/* || count($contacts)*/){ $details = OC_Contacts_VCard::structureContact($vcard); } -<<<<<<< HEAD // Include Style and Script OC_Util::addScript('contacts','interface'); OC_Util::addStyle('contacts','styles'); @@ -85,13 +84,8 @@ OC_Util::addStyle('contacts','formtastic'); OC_Util::addScript('', 'jquery.multiselect'); OC_Util::addStyle('', 'jquery.multiselect'); -$l10n = new OC_L10N('contacts'); -$adr_types = OC_Contacts_VCard::getTypesOfProperty($l10n, 'ADR'); -$phone_types = OC_Contacts_VCard::getTypesOfProperty($l10n, 'TEL'); -======= $adr_types = OC_Contacts_App::getTypesOfProperty('ADR'); $phone_types = OC_Contacts_App::getTypesOfProperty('TEL'); ->>>>>>> eeaf539a4414e3081b6f6652167363a3221a1973 // Process the template $tmpl = new OC_Template( 'contacts', 'index', 'user' ); From c7b7758816445c400867e82f2174cdd9ef8b025c Mon Sep 17 00:00:00 2001 From: Thomas Tanghus Date: Sun, 11 Dec 2011 16:26:00 +0100 Subject: [PATCH 07/10] Updating of contact list when activating/adding/deleting address books now works. --- apps/contacts/ajax/activation.php | 2 +- apps/contacts/ajax/chooseaddressbook.php | 1 - apps/contacts/ajax/contacts.php | 36 +++++++++++ apps/contacts/index.php | 22 ++----- apps/contacts/js/interface.js | 58 ++++++++--------- apps/contacts/lib/addressbook.php | 63 ++++++++----------- apps/contacts/lib/vcard.php | 22 +------ .../templates/part.chooseaddressbook.php | 3 - .../part.chooseaddressbook.rowfields.php | 3 +- apps/contacts/templates/part.contacts.php | 2 +- 10 files changed, 96 insertions(+), 116 deletions(-) create mode 100644 apps/contacts/ajax/contacts.php diff --git a/apps/contacts/ajax/activation.php b/apps/contacts/ajax/activation.php index 6e137692da..49aaac9728 100644 --- a/apps/contacts/ajax/activation.php +++ b/apps/contacts/ajax/activation.php @@ -18,6 +18,6 @@ $book = OC_Contacts_Addressbook::find($bookid); /* is there an OC_JSON::error() ? */ OC_JSON::success(array( - 'active' => $book['active'], + 'active' => OC_Contacts_Addressbook::isActive($bookid), 'bookid' => $bookid, )); diff --git a/apps/contacts/ajax/chooseaddressbook.php b/apps/contacts/ajax/chooseaddressbook.php index e150f97f54..f74b580eae 100644 --- a/apps/contacts/ajax/chooseaddressbook.php +++ b/apps/contacts/ajax/chooseaddressbook.php @@ -12,7 +12,6 @@ if(!OC_USER::isLoggedIn()) { die(""); } OC_JSON::checkAppEnabled('contacts'); -OC_Log::write('contacts','chooseaddressbook.php',OC_Log::DEBUG); $output = new OC_TEMPLATE("contacts", "part.chooseaddressbook"); $output -> printpage(); diff --git a/apps/contacts/ajax/contacts.php b/apps/contacts/ajax/contacts.php new file mode 100644 index 0000000000..3c3bb5fe95 --- /dev/null +++ b/apps/contacts/ajax/contacts.php @@ -0,0 +1,36 @@ + + * This file is licensed under the Affero General Public License version 3 or + * later. + * See the COPYING-README file. + */ + +function contacts_namesort($a,$b){ + return strcmp($a['fullname'],$b['fullname']); +} + +require_once('../../../lib/base.php'); +if(!OC_USER::isLoggedIn()) { + die(""); +} +OC_JSON::checkAppEnabled('contacts'); + +$addressbooks = OC_Contacts_Addressbook::activeAddressbooks(OC_User::getUser()); +$contacts = array(); +foreach( $addressbooks as $addressbook ){ + $addressbookcontacts = OC_Contacts_VCard::all($addressbook['id']); + foreach( $addressbookcontacts as $contact ){ + if(is_null($contact['fullname'])){ + continue; + } + $contacts[] = $contact; + } +} +usort($contacts,'contacts_namesort'); +$tmpl = new OC_TEMPLATE("contacts", "part.contacts"); +$tmpl->assign('contacts', $contacts); +$page = $tmpl->fetchPage(); + +OC_JSON::success(array('data' => array( 'page' => $page ))); +?> diff --git a/apps/contacts/index.php b/apps/contacts/index.php index f4624db31a..cbd1dee1d9 100644 --- a/apps/contacts/index.php +++ b/apps/contacts/index.php @@ -31,18 +31,8 @@ require_once('../../lib/base.php'); OC_Util::checkLoggedIn(); OC_Util::checkAppEnabled('contacts'); -// Check if the user has an addressbook -$openaddressbooks = OC_Contacts_Addressbook::activeAddressbookIds(OC_User::getUser()); -OC_Log::write('contacts','Got IDs'.implode(',', $openaddressbooks),OC_Log::DEBUG); -// if( count($addressbooks) == 0){ -// OC_Contacts_Addressbook::add(OC_User::getUser(),'default','Default Address Book'); -// $addressbooks = OC_Contacts_Addressbook::all(OC_User::getUser()); -// } -// $prefbooks = OC_Preferences::getValue(OC_User::getUser(),'contacts','openaddressbooks',null); -// if(is_null($prefbooks)){ -// $prefbooks = $addressbooks[0]['id']; -// OC_Preferences::setValue(OC_User::getUser(),'contacts','openaddressbooks',$prefbooks); -// } +// Get active address books. This creates a default one if none exists. +$addressbooks = OC_Contacts_Addressbook::activeAddressbooks(OC_User::getUser()); // Load the files we need OC_App::setActiveNavigationEntry( 'contacts_index' ); @@ -52,19 +42,15 @@ $id = isset( $_GET['id'] ) ? $_GET['id'] : null; // sort addressbooks (use contactsort) usort($addressbooks,'contacts_namesort'); -// Addressbooks to load -//$openaddressbooks = explode(';',$prefbooks); $contacts = array(); -foreach( $openaddressbooks as $addressbook ){ - $addressbookcontacts = OC_Contacts_VCard::all($addressbook); - OC_Log::write('contacts','index.php. Getting contacts for: '.$addressbook,OC_Log::DEBUG); +foreach( $addressbooks as $addressbook ){ + $addressbookcontacts = OC_Contacts_VCard::all($addressbook['id']); foreach( $addressbookcontacts as $contact ){ if(is_null($contact['fullname'])){ continue; } $contacts[] = $contact; - //$contacts[] = array( 'name' => $contact['fullname'], 'id' => $contact['id'] ); } } diff --git a/apps/contacts/js/interface.js b/apps/contacts/js/interface.js index 2937e8a092..f9539e8f36 100644 --- a/apps/contacts/js/interface.js +++ b/apps/contacts/js/interface.js @@ -6,19 +6,12 @@ Contacts={ $('#carddav_url').show(); $('#carddav_url_close').show(); }, - Contacts:{ - update:function(){ - alert('Contacts.update()'); - } - }, Addressbooks:{ overview:function(){ - /* alert('overview');*/ if($('#chooseaddressbook_dialog').dialog('isOpen') == true){ $('#chooseaddressbook_dialog').dialog('moveToTop'); }else{ $('#dialog_holder').load(OC.filePath('contacts', 'ajax', 'chooseaddressbook.php'), function(){ - /*alert('Address books.load');*/ $('#chooseaddressbook_dialog').dialog({ width : 600, close : function(event, ui) { @@ -30,25 +23,17 @@ Contacts={ }, activation:function(checkbox, bookid) { - /* TODO: - * Add integer field 'active' to table 'contacts_addressbooks'. See apps/contacts/README.tanghus */ $.post(OC.filePath('contacts', 'ajax', 'activation.php'), { bookid: bookid, active: checkbox.checked?1:0 }, function(data) { /* * Arguments: * data.status * data.bookid + * data.active */ if (data.status == 'success'){ checkbox.checked = data.active == 1; - alert('TODO: Update Contacts list.'); - /* TODO: Update Contacts list. - if (data.active == 1){ - $('#calendar_holder').fullCalendar('addEventSource', data.eventSource); - }else{ - $('#calendar_holder').fullCalendar('removeEventSource', data.eventSource.url); - } - */ + Contacts.UI.Contacts.update(); } }); }, @@ -71,10 +56,6 @@ Contacts={ $.post(OC.filePath('contacts', 'ajax', 'deletebook.php'), { id: bookid}, function(data) { if (data.status == 'success'){ - /* alert('TODO: Update Contacts list.'); */ - /* TODO: Update Contacts list. - var url = 'ajax/deletebook.php?id='+bookid; - $('#calendar_holder').fullCalendar('removeEventSource', url);*/ $('#chooseaddressbook_dialog').dialog('destroy').remove(); Contacts.UI.Contacts.update(); Contacts.UI.Addressbooks.overview(); @@ -105,6 +86,29 @@ Contacts={ cancel:function(button, bookid){ $(button).closest('tr').prev().show().next().remove(); } + }, + Contacts:{ + update:function(){ + $.getJSON('ajax/contacts.php',{},function(jsondata){ + if(jsondata.status == 'success'){ + $('#contacts').html(jsondata.data.page); + } + else{ + alert(jsondata.data.message); + } + }); + /* + var contactlist = $('#contacts'); + var contacts = contactlist.children('li').get(); + //alert(contacts); + contacts.sort(function(a, b) { + var compA = $(a).text().toUpperCase(); + var compB = $(b).text().toUpperCase(); + return (compA < compB) ? -1 : (compA > compB) ? 1 : 0; + }) + $.each(contacts, function(idx, itm) { contactlist.append(itm); }); + */ + } } } } @@ -192,18 +196,6 @@ $(document).ready(function(){ $('#chooseaddressbook').click(function(){ Contacts.UI.Addressbooks.overview(); - /* - $.getJSON('ajax/showaddcard.php',{},function(jsondata){ - if(jsondata.status == 'success'){ - $('#rightcontent').data('id',''); - $('#rightcontent').html(jsondata.data.page) - .find('select').chosen(); - } - else{ - alert(jsondata.data.message); - } - }); - */ return false; }); diff --git a/apps/contacts/lib/addressbook.php b/apps/contacts/lib/addressbook.php index 882a64bab8..23c0b10646 100644 --- a/apps/contacts/lib/addressbook.php +++ b/apps/contacts/lib/addressbook.php @@ -44,7 +44,6 @@ class OC_Contacts_Addressbook{ * @return array */ public static function allAddressbooks($uid){ - OC_Log::write('contacts','allAddressbooks',OC_Log::DEBUG); $stmt = OC_DB::prepare( 'SELECT * FROM *PREFIX*contacts_addressbooks WHERE userid = ? ORDER BY displayname' ); $result = $stmt->execute(array($uid)); @@ -56,24 +55,6 @@ class OC_Contacts_Addressbook{ return $addressbooks; } - /** - * @brief Returns the list of active addressbooks for a specific user. - * @param string $uid - * @return array - */ - public static function activeAddressbooks($uid){ - $active = implode(',', self::activeAddressbookIds()); - $stmt = OC_DB::prepare( 'SELECT * FROM *PREFIX*contacts_addressbooks WHERE id IN (?) AND userid = ? ORDER BY displayname' ); - $result = $stmt->execute(array($active, $uid)); - - $addressbooks = array(); - while( $row = $result->fetchRow()){ - $addressbooks[] = $row; - } - - return $addressbooks; - } - /** * @brief Returns the list of addressbooks for a principal (DAV term of user) * @param string $principaluri @@ -181,6 +162,28 @@ class OC_Contacts_Addressbook{ return explode(';',$prefbooks); } + /** + * @brief Returns the list of active addressbooks for a specific user. + * @param string $uid + * @return array + */ + public static function activeAddressbooks($uid){ + $active = self::activeAddressbookIds($uid); + $addressbooks = array(); + /** FIXME: Is there a way to prepare a statement 'WHERE id IN ([range])'? + */ + foreach( $active as $aid ){ + $stmt = OC_DB::prepare( 'SELECT * FROM *PREFIX*contacts_addressbooks WHERE id = ? ORDER BY displayname' ); + $result = $stmt->execute(array($aid,)); + + while( $row = $result->fetchRow()){ + $addressbooks[] = $row; + } + } + + return $addressbooks; + } + /** * @brief Activates an addressbook * @param integer $id @@ -190,34 +193,23 @@ class OC_Contacts_Addressbook{ public static function setActive($id,$active){ // Need these ones for checking uri //$addressbook = self::find($id); - OC_Log::write('contacts','setActive('.$id.'): '.$active,OC_Log::DEBUG); if(is_null($id)){ $id = 0; } - /** - * For now I have active state redundant both in preferences and in the address book - * table as I can't get the OC_Contacts_Addressbook::isActive() call to work when - * iterating over several results. - */ - $stmt = OC_DB::prepare( 'UPDATE *PREFIX*contacts_addressbooks SET active=?, ctag=ctag+1 WHERE id=?' ); - $result = $stmt->execute(array($active,$id)); $openaddressbooks = self::activeAddressbookIds(); if($active) { if(!in_array($id, $openaddressbooks)) { - // TODO: Test this instead - //$openaddressbooks[] = $id; - array_push($openaddressbooks, $id); + $openaddressbooks[] = $id; } - } else { + } else { if(in_array($id, $openaddressbooks)) { - array_pop($openaddressbooks, $id); - $openaddressbooks = array_diff( $openaddressbooks, array($id) ); + unset($openaddressbooks[array_search($id, $openaddressbooks)]); } } sort($openaddressbooks, SORT_NUMERIC); - OC_Log::write('contacts','setActive('.$id.'):all '.implode(';', $openaddressbooks),OC_Log::DEBUG); + // FIXME: I alway end up with a ';' prepending when imploding the array..? OC_Preferences::setValue(OC_User::getUser(),'contacts','openaddressbooks',implode(';', $openaddressbooks)); return true; @@ -229,8 +221,6 @@ class OC_Contacts_Addressbook{ * @return boolean */ public static function isActive($id){ - OC_Log::write('contacts','isActive('.$id.')',OC_Log::DEBUG); - OC_Log::write('contacts','isActive('.$id.'): '.in_array($id, self::activeAddressbookIds()),OC_Log::DEBUG); return in_array($id, self::activeAddressbookIds()); } @@ -240,6 +230,7 @@ class OC_Contacts_Addressbook{ * @return boolean */ public static function delete($id){ + self::setActive($id, false); $stmt = OC_DB::prepare( 'DELETE FROM *PREFIX*contacts_addressbooks WHERE id = ?' ); $stmt->execute(array($id)); diff --git a/apps/contacts/lib/vcard.php b/apps/contacts/lib/vcard.php index 87f2ff5e66..7285761fd5 100644 --- a/apps/contacts/lib/vcard.php +++ b/apps/contacts/lib/vcard.php @@ -47,33 +47,13 @@ class OC_Contacts_VCard{ * ['carddata'] */ public static function all($id){ - OC_Log::write('contacts','OC_Contacts_VCard::all ids: '.$id,OC_Log::DEBUG); -// if(is_array($id)) { -// OC_Log::write('contacts','OC_Contacts_VCard::all Array?: '.$id,OC_Log::DEBUG); -// OC_Log::write('contacts','count: '.implode(',', $id),OC_Log::DEBUG); -// $ids = implode(',', $id); -// $prep = '?'.str_repeat ( ',?' , count($id)-1 ); -// //$repeat = str_repeat ( ',?' , count($id)-1 ); -// //OC_Log::write('contacts','OC_Contacts_VCard::all: repeat: '.$repeat,OC_Log::DEBUG); -// OC_Log::write('contacts','OC_Contacts_VCard::all: from: '.$ids,OC_Log::DEBUG); -// OC_Log::write('contacts','OC_Contacts_VCard::all: PREP: SELECT * FROM contacts_cards WHERE addressbookid IN ('.$prep.')',OC_Log::DEBUG); -// OC_Log::write('contacts','OC_Contacts_VCard::all: SQL: SELECT * FROM contacts_cards WHERE addressbookid IN ('.$prep.')',OC_Log::DEBUG); -// $stmt = OC_DB::prepare( 'SELECT * FROM *PREFIX*contacts_cards WHERE addressbookid IN ('.'?,?,?'.') ORDER BY fullname' ); -// } else { -// $ids = $id; -// $stmt = OC_DB::prepare( 'SELECT * FROM *PREFIX*contacts_cards WHERE addressbookid = ? ORDER BY fullname' ); -// } - - $stmt = OC_DB::prepare( 'SELECT * FROM *PREFIX*contacts_cards WHERE addressbookid = ?' ); + $stmt = OC_DB::prepare( 'SELECT * FROM *PREFIX*contacts_cards WHERE addressbookid = ? ORDER BY fullname' ); $result = $stmt->execute(array($id)); - OC_Log::write('contacts','OC_Contacts_VCard::all: result->numRows(): '.$result->numRows(),OC_Log::DEBUG); $cards = array(); while( $row = $result->fetchRow()){ $cards[] = $row; - //OC_Log::write('contacts','OC_Contacts_VCard::all: fullname: '.$row['fullname'],OC_Log::DEBUG); } - OC_Log::write('contacts','OC_Contacts_VCard::all: count($cards): '.count($cards),OC_Log::DEBUG); return $cards; } diff --git a/apps/contacts/templates/part.chooseaddressbook.php b/apps/contacts/templates/part.chooseaddressbook.php index dc5978d2d0..9574903cf9 100644 --- a/apps/contacts/templates/part.chooseaddressbook.php +++ b/apps/contacts/templates/part.chooseaddressbook.php @@ -1,11 +1,8 @@
    ">
    Active: ".$_['active'].",ID: " . $_['addressbook']["id"] . " - t("CardDav Link") . "\" class=\"action\">t("Download") . "\" class=\"action\">t("Edit") . "\" class=\"action\" onclick=\"Contacts.UI.Addressbooks.editAddressbook(this, " . $_['addressbook']["id"] . ");\">t("Delete") . "\" class=\"action\">
    "; $tmpl = new OC_Template('contacts', 'part.chooseaddressbook.rowfields'); $tmpl->assign('addressbook', $option_addressbooks[$i]); diff --git a/apps/contacts/templates/part.chooseaddressbook.rowfields.php b/apps/contacts/templates/part.chooseaddressbook.rowfields.php index 4639ec20b1..f612e39eca 100644 --- a/apps/contacts/templates/part.chooseaddressbook.rowfields.php +++ b/apps/contacts/templates/part.chooseaddressbook.rowfields.php @@ -1,6 +1,5 @@ "; - echo ""; + echo ""; echo ""; diff --git a/apps/contacts/templates/part.contacts.php b/apps/contacts/templates/part.contacts.php index c6772489ea..8d89e9c7ad 100644 --- a/apps/contacts/templates/part.contacts.php +++ b/apps/contacts/templates/part.contacts.php @@ -1,3 +1,3 @@ -
  • -
  • +
  • From d55e689261314b3eae88f1477a3887adec361df1 Mon Sep 17 00:00:00 2001 From: Thomas Tanghus Date: Sun, 11 Dec 2011 21:17:10 +0100 Subject: [PATCH 08/10] Added readme.tanghus --- apps/contacts/README.tanghus | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 apps/contacts/README.tanghus diff --git a/apps/contacts/README.tanghus b/apps/contacts/README.tanghus new file mode 100644 index 0000000000..d5b3fa23e1 --- /dev/null +++ b/apps/contacts/README.tanghus @@ -0,0 +1,19 @@ +As I like to run regular, automated backups of my PIM data I looked into an +easy way of getting the direct link to an address book, and noticed the +elegant way it was possible in the calendar, where you can click on the +'Calendars' button and download it directly. +I modified the export.php script for the contacts app and can now run backups +with wget and http authentication. Hence the name 'tanghus_remote_backup' for +this branch. +Then I implemented the nice popup window function to get an UI for it and one +thing lead to another: + +As for the Calendar app there's a js popup for address book activation, CardDAV link, export, +edit, delete and add address books. + +When making changes to the address books the contact list is updated to show the +contacts in the active address book(s). + +When an address book is activated the setting is saved using OC_Preferences::setValue(). + +Most of the code is copy/paste from the Calendar and Contacts apps ;-) \ No newline at end of file From 59ad0a6c9c9862792ec92f9ab53dfc30d54867fa Mon Sep 17 00:00:00 2001 From: Thomas Tanghus Date: Tue, 13 Dec 2011 10:39:31 +0100 Subject: [PATCH 09/10] Update README --- apps/contacts/README.tanghus | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/apps/contacts/README.tanghus b/apps/contacts/README.tanghus index d5b3fa23e1..28043063fc 100644 --- a/apps/contacts/README.tanghus +++ b/apps/contacts/README.tanghus @@ -16,4 +16,7 @@ contacts in the active address book(s). When an address book is activated the setting is saved using OC_Preferences::setValue(). -Most of the code is copy/paste from the Calendar and Contacts apps ;-) \ No newline at end of file +Most of the code is copy/paste from the Calendar and Contacts apps ;-) + +Tested with fresh clone from git@gitorious.org:~tanghus/owncloud/tanghus-owncloud.git, removed +database and config.php. \ No newline at end of file From feeb0c742a57eb542f6e904dd4c8b5310bcc066a Mon Sep 17 00:00:00 2001 From: Thomas Tanghus Date: Fri, 16 Dec 2011 17:42:07 +0100 Subject: [PATCH 10/10] Misc. changes after review by bartv. --- apps/contacts/ajax/activation.php | 7 +++--- apps/contacts/ajax/addbook.php | 4 +--- apps/contacts/ajax/chooseaddressbook.php | 4 +--- apps/contacts/ajax/contacts.php | 8 +++---- apps/contacts/ajax/createaddressbook.php | 2 +- apps/contacts/ajax/editaddressbook.php | 6 ++--- apps/contacts/ajax/showaddcard.php | 2 +- apps/contacts/ajax/updateaddressbook.php | 2 +- apps/contacts/export.php | 11 +++++---- apps/contacts/index.php | 2 +- apps/contacts/js/interface.js | 2 +- apps/contacts/lib/addressbook.php | 23 +++++++++++-------- apps/contacts/lib/hooks.php | 2 +- apps/contacts/templates/index.php | 2 +- .../templates/part.chooseaddressbook.php | 2 +- .../templates/part.editaddressbook.php | 2 +- 16 files changed, 38 insertions(+), 43 deletions(-) diff --git a/apps/contacts/ajax/activation.php b/apps/contacts/ajax/activation.php index 49aaac9728..f4a2c94a14 100644 --- a/apps/contacts/ajax/activation.php +++ b/apps/contacts/ajax/activation.php @@ -8,16 +8,15 @@ */ require_once ("../../../lib/base.php"); -if(!OC_USER::isLoggedIn()) { - die(""); -} +OC_JSON::checkLoggedIn(); OC_JSON::checkAppEnabled('contacts'); $bookid = $_POST['bookid']; OC_Contacts_Addressbook::setActive($bookid, $_POST['active']); -$book = OC_Contacts_Addressbook::find($bookid); +$book = OC_Contacts_App::getAddressbook($bookid); /* is there an OC_JSON::error() ? */ OC_JSON::success(array( 'active' => OC_Contacts_Addressbook::isActive($bookid), 'bookid' => $bookid, + 'book' => $book, )); diff --git a/apps/contacts/ajax/addbook.php b/apps/contacts/ajax/addbook.php index d8e5a0ecd5..36acb9af39 100644 --- a/apps/contacts/ajax/addbook.php +++ b/apps/contacts/ajax/addbook.php @@ -8,9 +8,7 @@ require_once('../../../lib/base.php'); $l10n = new OC_L10N('contacts'); -if(!OC_USER::isLoggedIn()) { - die(""); -} +OC_JSON::checkLoggedIn(); OC_JSON::checkAppEnabled('contacts'); $book = array( 'id' => 'new', diff --git a/apps/contacts/ajax/chooseaddressbook.php b/apps/contacts/ajax/chooseaddressbook.php index f74b580eae..b0a10bb311 100644 --- a/apps/contacts/ajax/chooseaddressbook.php +++ b/apps/contacts/ajax/chooseaddressbook.php @@ -8,9 +8,7 @@ require_once('../../../lib/base.php'); $l10n = new OC_L10N('contacts'); -if(!OC_USER::isLoggedIn()) { - die(""); -} +OC_JSON::checkLoggedIn(); OC_JSON::checkAppEnabled('contacts'); $output = new OC_TEMPLATE("contacts", "part.chooseaddressbook"); diff --git a/apps/contacts/ajax/contacts.php b/apps/contacts/ajax/contacts.php index 3c3bb5fe95..b34cf41424 100644 --- a/apps/contacts/ajax/contacts.php +++ b/apps/contacts/ajax/contacts.php @@ -7,16 +7,14 @@ */ function contacts_namesort($a,$b){ - return strcmp($a['fullname'],$b['fullname']); + return strcasecmp($a['fullname'],$b['fullname']); } require_once('../../../lib/base.php'); -if(!OC_USER::isLoggedIn()) { - die(""); -} +OC_JSON::checkLoggedIn(); OC_JSON::checkAppEnabled('contacts'); -$addressbooks = OC_Contacts_Addressbook::activeAddressbooks(OC_User::getUser()); +$addressbooks = OC_Contacts_Addressbook::active(OC_User::getUser()); $contacts = array(); foreach( $addressbooks as $addressbook ){ $addressbookcontacts = OC_Contacts_VCard::all($addressbook['id']); diff --git a/apps/contacts/ajax/createaddressbook.php b/apps/contacts/ajax/createaddressbook.php index 8fec07ebca..f94ad34e8d 100644 --- a/apps/contacts/ajax/createaddressbook.php +++ b/apps/contacts/ajax/createaddressbook.php @@ -17,7 +17,7 @@ OC_JSON::checkAppEnabled('contacts'); $userid = OC_User::getUser(); $bookid = OC_Contacts_Addressbook::add($userid, $_POST['name'], null); OC_Contacts_Addressbook::setActive($bookid, 1); -$addressbook = OC_Contacts_Addressbook::find($bookid); +$addressbook = OC_Contacts_App::getAddressbook($bookid); $tmpl = new OC_Template('contacts', 'part.chooseaddressbook.rowfields'); $tmpl->assign('addressbook', $addressbook); OC_JSON::success(array( diff --git a/apps/contacts/ajax/editaddressbook.php b/apps/contacts/ajax/editaddressbook.php index abdad09dea..ced673ce80 100644 --- a/apps/contacts/ajax/editaddressbook.php +++ b/apps/contacts/ajax/editaddressbook.php @@ -8,11 +8,9 @@ require_once('../../../lib/base.php'); $l10n = new OC_L10N('contacts'); -if(!OC_USER::isLoggedIn()) { - die(""); -} +OC_JSON::checkLoggedIn(); OC_JSON::checkAppEnabled('contacts'); -$addressbook = OC_Contacts_Addressbook::find($_GET['bookid']); +$addressbook = OC_Contacts_App::getAddressbook($_GET['bookid']); $tmpl = new OC_Template("contacts", "part.editaddressbook"); $tmpl->assign('new', false); $tmpl->assign('addressbook', $addressbook); diff --git a/apps/contacts/ajax/showaddcard.php b/apps/contacts/ajax/showaddcard.php index 92e24216c5..54592c89c0 100644 --- a/apps/contacts/ajax/showaddcard.php +++ b/apps/contacts/ajax/showaddcard.php @@ -30,7 +30,7 @@ OC_JSON::checkAppEnabled('contacts'); $adr_types = OC_Contacts_App::getTypesOfProperty('ADR'); $phone_types = OC_Contacts_App::getTypesOfProperty('TEL'); -$addressbooks = OC_Contacts_Addressbook::allAddressbooks(OC_USER::getUser()); +$addressbooks = OC_Contacts_Addressbook::all(OC_USER::getUser()); $tmpl = new OC_Template('contacts','part.addcardform'); $tmpl->assign('addressbooks',$addressbooks); $tmpl->assign('adr_types',$adr_types); diff --git a/apps/contacts/ajax/updateaddressbook.php b/apps/contacts/ajax/updateaddressbook.php index 011dfc35d1..516736cc50 100644 --- a/apps/contacts/ajax/updateaddressbook.php +++ b/apps/contacts/ajax/updateaddressbook.php @@ -17,7 +17,7 @@ OC_JSON::checkAppEnabled('contacts'); $bookid = $_POST['id']; OC_Contacts_Addressbook::edit($bookid, $_POST['name'], null); OC_Contacts_Addressbook::setActive($bookid, $_POST['active']); -$addressbook = OC_Contacts_Addressbook::find($bookid); +$addressbook = OC_Contacts_App::getAddressbook($bookid); $tmpl = new OC_Template('contacts', 'part.chooseaddressbook.rowfields'); $tmpl->assign('addressbook', $addressbook); OC_JSON::success(array( diff --git a/apps/contacts/export.php b/apps/contacts/export.php index 4a1e7a172d..fd2d7da175 100644 --- a/apps/contacts/export.php +++ b/apps/contacts/export.php @@ -12,21 +12,22 @@ OC_Util::checkAppEnabled('contacts'); $book = isset($_GET['bookid']) ? $_GET['bookid'] : NULL; $contact = isset($_GET['contactid']) ? $_GET['contactid'] : NULL; if(isset($book)){ - $addressbook = OC_Contacts_Addressbook::find($book); + $addressbook = OC_Contacts_App::getAddressbook($book); if($addressbook['userid'] != OC_User::getUser()){ OC_JSON::error(); exit; } $cardobjects = OC_Contacts_VCard::all($book); header('Content-Type: text/directory'); - header('Content-Disposition: inline; filename=' . $addressbook['displayname'] . '.vcf'); + header('Content-Disposition: inline; filename=' . str_replace(' ', '_', $addressbook['displayname']) . '.vcf'); for($i = 0;$i <= count($cardobjects); $i++){ - echo trim($cardobjects[$i]['carddata']) . '\n'; + echo $cardobjects[$i]['carddata']; + //echo '\r\n'; } }elseif(isset($contact)){ - $data = OC_Contacts_VCard::find($contact); + $data = OC_Contacts_App::getContactObject($contact); $addressbookid = $data['addressbookid']; - $addressbook = OC_Contacts_Addressbook::find($addressbookid); + $addressbook = OC_Contacts_App::getAddressbook($addressbookid); if($addressbook['userid'] != OC_User::getUser()){ OC_JSON::error(); exit; diff --git a/apps/contacts/index.php b/apps/contacts/index.php index cbd1dee1d9..235e025cd8 100644 --- a/apps/contacts/index.php +++ b/apps/contacts/index.php @@ -32,7 +32,7 @@ OC_Util::checkLoggedIn(); OC_Util::checkAppEnabled('contacts'); // Get active address books. This creates a default one if none exists. -$addressbooks = OC_Contacts_Addressbook::activeAddressbooks(OC_User::getUser()); +$addressbooks = OC_Contacts_Addressbook::active(OC_User::getUser()); // Load the files we need OC_App::setActiveNavigationEntry( 'contacts_index' ); diff --git a/apps/contacts/js/interface.js b/apps/contacts/js/interface.js index f9539e8f36..02470d5a76 100644 --- a/apps/contacts/js/interface.js +++ b/apps/contacts/js/interface.js @@ -1,5 +1,4 @@ Contacts={ - space:' ', UI:{ showCardDAVUrl:function(username, bookname){ $('#carddav_url').val(totalurl + '/' + username + '/' + bookname); @@ -82,6 +81,7 @@ Contacts={ $(button).closest('tr').prev().html(data.page).show().next().remove(); } }); + Contacts.UI.Contacts.update(); }, cancel:function(button, bookid){ $(button).closest('tr').prev().show().next().remove(); diff --git a/apps/contacts/lib/addressbook.php b/apps/contacts/lib/addressbook.php index 23c0b10646..7d55a00d60 100644 --- a/apps/contacts/lib/addressbook.php +++ b/apps/contacts/lib/addressbook.php @@ -43,7 +43,7 @@ class OC_Contacts_Addressbook{ * @param string $uid * @return array */ - public static function allAddressbooks($uid){ + public static function all($uid){ $stmt = OC_DB::prepare( 'SELECT * FROM *PREFIX*contacts_addressbooks WHERE userid = ? ORDER BY displayname' ); $result = $stmt->execute(array($uid)); @@ -62,7 +62,7 @@ class OC_Contacts_Addressbook{ */ public static function allWherePrincipalURIIs($principaluri){ $uid = self::extractUserID($principaluri); - return self::allAddressbooks($uid); + return self::all($uid); } /** @@ -85,7 +85,7 @@ class OC_Contacts_Addressbook{ * @return insertid */ public static function add($userid,$name,$description){ - $all = self::allAddressbooks($userid); + $all = self::all($userid); $uris = array(); foreach($all as $i){ $uris[] = $i['uri']; @@ -145,16 +145,16 @@ class OC_Contacts_Addressbook{ * @param integer $uid User id. If null current user will be used. * @return array */ - public static function activeAddressbookIds($uid){ + public static function activeIds($uid){ if(is_null($uid)){ $uid = OC_User::getUser(); } $prefbooks = OC_Preferences::getValue($uid,'contacts','openaddressbooks',null); if(is_null($prefbooks)){ - $addressbooks = OC_Contacts_Addressbook::allAddressbooks($uid); + $addressbooks = OC_Contacts_Addressbook::all($uid); if(count($addressbooks) == 0){ OC_Contacts_Addressbook::add($uid,'default','Default Address Book'); - $addressbooks = OC_Contacts_Addressbook::allAddressbooks($uid); + $addressbooks = OC_Contacts_Addressbook::all($uid); } $prefbooks = $addressbooks[0]['id']; OC_Preferences::setValue($uid,'contacts','openaddressbooks',$prefbooks); @@ -167,8 +167,8 @@ class OC_Contacts_Addressbook{ * @param string $uid * @return array */ - public static function activeAddressbooks($uid){ - $active = self::activeAddressbookIds($uid); + public static function active($uid){ + $active = self::activeIds($uid); $addressbooks = array(); /** FIXME: Is there a way to prepare a statement 'WHERE id IN ([range])'? */ @@ -198,7 +198,7 @@ class OC_Contacts_Addressbook{ $id = 0; } - $openaddressbooks = self::activeAddressbookIds(); + $openaddressbooks = self::activeIds(); if($active) { if(!in_array($id, $openaddressbooks)) { $openaddressbooks[] = $id; @@ -221,7 +221,10 @@ class OC_Contacts_Addressbook{ * @return boolean */ public static function isActive($id){ - return in_array($id, self::activeAddressbookIds()); + //if(defined("DEBUG") && DEBUG) { + OC_Log::write('contacts','OC_Contacts_Addressbook::isActive('.$id.'):'.in_array($id, self::activeIds()),OC_Log::DEBUG); + //} + return in_array($id, self::activeIds()); } /** diff --git a/apps/contacts/lib/hooks.php b/apps/contacts/lib/hooks.php index 356ae26df9..155cf40f91 100644 --- a/apps/contacts/lib/hooks.php +++ b/apps/contacts/lib/hooks.php @@ -30,7 +30,7 @@ class OC_Contacts_Hooks{ * @return array */ public function deleteUser($parameters) { - $addressbooks = OC_Contacts_Addressbook::allAddressbooks($parameters['uid']); + $addressbooks = OC_Contacts_Addressbook::all($parameters['uid']); foreach($addressbooks as $addressbook) { OC_Contacts_Addressbook::delete($addressbook['id']); diff --git a/apps/contacts/templates/index.php b/apps/contacts/templates/index.php index 44505031c6..8592ffe1c4 100644 --- a/apps/contacts/templates/index.php +++ b/apps/contacts/templates/index.php @@ -1,5 +1,5 @@
    diff --git a/apps/contacts/templates/part.chooseaddressbook.php b/apps/contacts/templates/part.chooseaddressbook.php index 9574903cf9..ba008837f0 100644 --- a/apps/contacts/templates/part.chooseaddressbook.php +++ b/apps/contacts/templates/part.chooseaddressbook.php @@ -1,7 +1,7 @@
    ">
    Active: ".$_['active'].",ID: " . $_['addressbook']["id"] . " - t("CardDav Link") . "\" class=\"action\">t("Download") . "\" class=\"action\">t("Edit") . "\" class=\"action\" onclick=\"Contacts.UI.Addressbooks.editAddressbook(this, " . $_['addressbook']["id"] . ");\">t("Delete") . "\" class=\"action\">
    "; $tmpl = new OC_Template('contacts', 'part.chooseaddressbook.rowfields'); diff --git a/apps/contacts/templates/part.editaddressbook.php b/apps/contacts/templates/part.editaddressbook.php index 4e63ce5ec1..cb1371731b 100644 --- a/apps/contacts/templates/part.editaddressbook.php +++ b/apps/contacts/templates/part.editaddressbook.php @@ -18,7 +18,7 @@
    - > + >