diff options
author | Georg Ehrke <dev@georgswebsite.de> | 2012-06-27 14:06:31 +0200 |
---|---|---|
committer | Georg Ehrke <dev@georgswebsite.de> | 2012-06-27 14:06:31 +0200 |
commit | 726bec73f01e16564169b215ed4d219d6800f72d (patch) | |
tree | 5c4c1b28f32b9abe04b7115f8cb704287e31d7a7 | |
parent | 4e53db3d9c2dfca6baf2e9878d14c38656b37bca (diff) | |
parent | 12f7cb87679453fa96c796df857b7e7193d4ee09 (diff) | |
download | nextcloud-server-726bec73f01e16564169b215ed4d219d6800f72d.tar.gz nextcloud-server-726bec73f01e16564169b215ed4d219d6800f72d.zip |
Merge branch 'master' into oc_error
-rw-r--r-- | apps/calendar/lib/object.php | 8 | ||||
-rw-r--r-- | apps/contacts/ajax/contacts.php | 24 | ||||
-rw-r--r-- | apps/contacts/ajax/loadcard.php | 2 | ||||
-rw-r--r-- | apps/contacts/appinfo/app.php | 1 | ||||
-rw-r--r-- | apps/contacts/index.php | 3 | ||||
-rw-r--r-- | apps/contacts/js/contacts.js | 57 | ||||
-rw-r--r-- | apps/contacts/lib/addressbook.php | 99 | ||||
-rw-r--r-- | apps/contacts/lib/app.php | 35 | ||||
-rw-r--r-- | apps/contacts/lib/hooks.php | 10 | ||||
-rw-r--r-- | apps/contacts/lib/vcard.php | 103 | ||||
-rwxr-xr-x | apps/files_external/lib/dropbox.php | 12 | ||||
-rw-r--r-- | apps/files_texteditor/js/editor.js | 2 | ||||
-rw-r--r-- | apps/media/lib_scanner.php | 2 | ||||
-rwxr-xr-x | lib/app.php | 28 | ||||
-rw-r--r-- | lib/base.php | 12 | ||||
-rw-r--r-- | lib/connector/sabre/directory.php | 20 | ||||
-rw-r--r-- | lib/helper.php | 3 | ||||
-rw-r--r-- | lib/vcategories.php | 11 | ||||
-rw-r--r-- | public.php | 1 | ||||
-rw-r--r-- | remote.php | 15 |
20 files changed, 316 insertions, 132 deletions
diff --git a/apps/calendar/lib/object.php b/apps/calendar/lib/object.php index 7f3322b1ab5..0531a56fc50 100644 --- a/apps/calendar/lib/object.php +++ b/apps/calendar/lib/object.php @@ -216,6 +216,14 @@ class OC_Calendar_Object{ return true; } + + /** + * @brief Creates a UID + * @return string + */ + protected static function createUID(){ + return substr(md5(rand().time()),0,10); + } /** * @brief Extracts data from a vObject-Object diff --git a/apps/contacts/ajax/contacts.php b/apps/contacts/ajax/contacts.php index 4bb7801cb2d..07b442159c9 100644 --- a/apps/contacts/ajax/contacts.php +++ b/apps/contacts/ajax/contacts.php @@ -31,19 +31,21 @@ foreach($active_addressbooks as $addressbook) { $contacts_alphabet = OC_Contacts_VCard::all($ids); // Our new array for the contacts sorted by addressbook -foreach($contacts_alphabet as $contact) { - if(!isset($contacts_addressbook[$contact['addressbookid']])) { // It should never execute. - $contacts_addressbook[$contact['addressbookid']] = array('contacts' => array()); - } - $display = trim($contact['fullname']); - if(!$display) { - $vcard = OC_Contacts_App::getContactVCard($contact['id']); - if(!is_null($vcard)) { - $struct = OC_Contacts_VCard::structureContact($vcard); - $display = isset($struct['EMAIL'][0])?$struct['EMAIL'][0]['value']:'[UNKNOWN]'; +if($contacts_alphabet) { + foreach($contacts_alphabet as $contact) { + if(!isset($contacts_addressbook[$contact['addressbookid']])) { // It should never execute. + $contacts_addressbook[$contact['addressbookid']] = array('contacts' => array()); + } + $display = trim($contact['fullname']); + if(!$display) { + $vcard = OC_Contacts_App::getContactVCard($contact['id']); + if(!is_null($vcard)) { + $struct = OC_Contacts_VCard::structureContact($vcard); + $display = isset($struct['EMAIL'][0])?$struct['EMAIL'][0]['value']:'[UNKNOWN]'; + } } + $contacts_addressbook[$contact['addressbookid']]['contacts'][] = array('id' => $contact['id'], 'addressbookid' => $contact['addressbookid'], 'displayname' => htmlspecialchars($display)); } - $contacts_addressbook[$contact['addressbookid']]['contacts'][] = array('id' => $contact['id'], 'addressbookid' => $contact['addressbookid'], 'displayname' => htmlspecialchars($display)); } unset($contacts_alphabet); uasort($contacts_addressbook, 'cmp'); diff --git a/apps/contacts/ajax/loadcard.php b/apps/contacts/ajax/loadcard.php index fbb831f4a12..1309faaa7a2 100644 --- a/apps/contacts/ajax/loadcard.php +++ b/apps/contacts/ajax/loadcard.php @@ -27,6 +27,7 @@ OCP\JSON::checkAppEnabled('contacts'); $upload_max_filesize = OCP\Util::computerFileSize(ini_get('upload_max_filesize')); $post_max_size = OCP\Util::computerFileSize(ini_get('post_max_size')); $maxUploadFilesize = min($upload_max_filesize, $post_max_size); +$requesttoken = $_GET['requesttoken']; $freeSpace=OC_Filesystem::free_space('/'); $freeSpace=max($freeSpace,0); @@ -41,6 +42,7 @@ $tmpl->assign('uploadMaxHumanFilesize', OCP\Util::humanFileSize($maxUploadFilesi $tmpl->assign('adr_types',$adr_types); $tmpl->assign('phone_types',$phone_types); $tmpl->assign('email_types',$email_types); +$tmpl->assign('requesttoken', $requesttoken); $tmpl->assign('id',''); $page = $tmpl->fetchPage(); diff --git a/apps/contacts/appinfo/app.php b/apps/contacts/appinfo/app.php index 7a04ec7ff5e..64fe00eef10 100644 --- a/apps/contacts/appinfo/app.php +++ b/apps/contacts/appinfo/app.php @@ -5,6 +5,7 @@ OC::$CLASSPATH['OC_Contacts_VCard'] = 'apps/contacts/lib/vcard.php'; OC::$CLASSPATH['OC_Contacts_Hooks'] = 'apps/contacts/lib/hooks.php'; OC::$CLASSPATH['OC_Connector_Sabre_CardDAV'] = 'apps/contacts/lib/connector_sabre.php'; OC::$CLASSPATH['OC_Search_Provider_Contacts'] = 'apps/contacts/lib/search.php'; +OCP\Util::connectHook('OC_User', 'post_createUser', 'OC_Contacts_Hooks', 'createUser'); OCP\Util::connectHook('OC_User', 'post_deleteUser', 'OC_Contacts_Hooks', 'deleteUser'); OCP\Util::connectHook('OC_Calendar', 'getEvents', 'OC_Contacts_Hooks', 'getBirthdayEvents'); OCP\Util::connectHook('OC_Calendar', 'getSources', 'OC_Contacts_Hooks', 'getCalenderSources'); diff --git a/apps/contacts/index.php b/apps/contacts/index.php index f6b37409ea7..0b4f89b30c0 100644 --- a/apps/contacts/index.php +++ b/apps/contacts/index.php @@ -15,6 +15,9 @@ OCP\App::checkAppEnabled('contacts'); // Get active address books. This creates a default one if none exists. $ids = OC_Contacts_Addressbook::activeIds(OCP\USER::getUser()); $contacts = OC_Contacts_VCard::all($ids); +if($contacts === false) { + OCP\Util::writeLog('contacts','index.html: No contacts found.',OCP\Util::DEBUG); +} $addressbooks = OC_Contacts_Addressbook::active(OCP\USER::getUser()); diff --git a/apps/contacts/js/contacts.js b/apps/contacts/js/contacts.js index 036734049b6..e5326ad8805 100644 --- a/apps/contacts/js/contacts.js +++ b/apps/contacts/js/contacts.js @@ -48,7 +48,7 @@ Contacts={ adrstr = adrstr + adrarr[6].trim(); } adrstr = encodeURIComponent(adrstr); - var uri = 'http://open.mapquestapi.com/nominatim/v1/search.php?q=' + adrstr + '&limit=10&addressdetails=1&zoom='; + var uri = 'http://open.mapquestapi.com/nominatim/v1/search.php?q=' + adrstr + '&limit=10&addressdetails=1&polygon=1&zoom='; var newWindow = window.open(uri,'_blank'); newWindow.focus(); }, @@ -234,6 +234,30 @@ Contacts={ $('#contacts_downloadcard').tipsy({gravity: 'ne'}); $('#contacts_propertymenu_button').tipsy(); $('#contacts_newcontact, #chooseaddressbook').tipsy({gravity: 'sw'}); + + $('body').click(function(e){ + if(!$(e.target).is('#contacts_propertymenu_button')) { + $('#contacts_propertymenu_dropdown').hide(); + } + }); + function propertyMenu(){ + var menu = $('#contacts_propertymenu_dropdown'); + if(menu.is(':hidden')) { + menu.show(); + menu.find('li').first().focus(); + } else { + menu.hide(); + } + } + $('#contacts_propertymenu_button').click(propertyMenu); + $('#contacts_propertymenu_button').keydown(propertyMenu); + function propertyMenuItem(){ + var type = $(this).data('type'); + Contacts.UI.Card.addProperty(type); + $('#contacts_propertymenu_dropdown').hide(); + } + $('#contacts_propertymenu_dropdown a').click(propertyMenuItem); + $('#contacts_propertymenu_dropdown a').keydown(propertyMenuItem); }, Card:{ id:'', @@ -258,6 +282,9 @@ Contacts={ newid = id; bookid = bookid?bookid:$('#contacts li[data-id="'+newid+'"]').data('bookid'); } + if(!bookid) { + bookid = $('#contacts h3').first().data('id'); + } var localLoadContact = function(newid, bookid) { if($('.contacts li').length > 0) { $('#contacts li[data-id="'+newid+'"]').addClass('active'); @@ -359,7 +386,7 @@ Contacts={ var card = $('#card')[0]; if(!card) { - $.getJSON(OC.filePath('contacts', 'ajax', 'loadcard.php'),{},function(jsondata){ + $.getJSON(OC.filePath('contacts', 'ajax', 'loadcard.php'),{'requesttoken': requesttoken},function(jsondata){ if(jsondata.status == 'success'){ $('#rightcontent').html(jsondata.data.page).ready(function() { Contacts.UI.loadHandlers(); @@ -1566,6 +1593,8 @@ Contacts={ scroll: true, scrollSensitivity: 100, opacity: 0.7, helper: 'clone' }); + } else { + $('#contacts h3').first().addClass('active'); } }); Contacts.UI.Card.update(id); @@ -1734,30 +1763,6 @@ $(document).ready(function(){ xhr.send(file); } - $('body').click(function(e){ - if(!$(e.target).is('#contacts_propertymenu_button')) { - $('#contacts_propertymenu_dropdown').hide(); - } - }); - function propertyMenu(){ - var menu = $('#contacts_propertymenu_dropdown'); - if(menu.is(':hidden')) { - menu.show(); - menu.find('li').first().focus(); - } else { - menu.hide(); - } - } - $('#contacts_propertymenu_button').click(propertyMenu); - $('#contacts_propertymenu_button').keydown(propertyMenu); - function propertyMenuItem(){ - var type = $(this).data('type'); - Contacts.UI.Card.addProperty(type); - $('#contacts_propertymenu_dropdown').hide(); - } - $('#contacts_propertymenu_dropdown a').click(propertyMenuItem); - $('#contacts_propertymenu_dropdown a').keydown(propertyMenuItem); - Contacts.UI.loadHandlers(); Contacts.UI.Contacts.update(id); }); diff --git a/apps/contacts/lib/addressbook.php b/apps/contacts/lib/addressbook.php index 878d8835f94..86a41b18cf3 100644 --- a/apps/contacts/lib/addressbook.php +++ b/apps/contacts/lib/addressbook.php @@ -41,11 +41,18 @@ class OC_Contacts_Addressbook{ /** * @brief Returns the list of addressbooks for a specific user. * @param string $uid - * @return array + * @return array or false. */ public static function all($uid){ - $stmt = OCP\DB::prepare( 'SELECT * FROM *PREFIX*contacts_addressbooks WHERE userid = ? ORDER BY displayname' ); - $result = $stmt->execute(array($uid)); + try { + $stmt = OCP\DB::prepare( 'SELECT * FROM *PREFIX*contacts_addressbooks WHERE userid = ? ORDER BY displayname' ); + $result = $stmt->execute(array($uid)); + } catch(Exception $e) { + OCP\Util::writeLog('contacts',__CLASS__.'::'.__METHOD__.' exception: '.$e->getMessage(),OCP\Util::ERROR); + OCP\Util::writeLog('contacts',__CLASS__.'::'.__METHOD__.' uid: '.$uid,OCP\Util::DEBUG); + return false; + } + $addressbooks = array(); while( $row = $result->fetchRow()){ @@ -68,33 +75,59 @@ class OC_Contacts_Addressbook{ /** * @brief Gets the data of one address book * @param integer $id - * @return associative array + * @return associative array or false. */ public static function find($id){ - $stmt = OCP\DB::prepare( 'SELECT * FROM *PREFIX*contacts_addressbooks WHERE id = ?' ); - $result = $stmt->execute(array($id)); + try { + $stmt = OCP\DB::prepare( 'SELECT * FROM *PREFIX*contacts_addressbooks WHERE id = ?' ); + $result = $stmt->execute(array($id)); + } catch(Exception $e) { + OCP\Util::writeLog('contacts',__CLASS__.'::'.__METHOD__.', exception: '.$e->getMessage(),OCP\Util::ERROR); + OCP\Util::writeLog('contacts',__CLASS__.'::'.__METHOD__.', id: '.$id,OCP\Util::DEBUG); + return false; + } return $result->fetchRow(); } /** + * @brief Adds default address book + * @return $id ID of the newly created addressbook or false on error. + */ + public static function addDefault($uid = null){ + if(is_null($uid)) { + $uid = OCP\USER::getUser(); + } + $id = self::add($uid,'default','Default Address Book'); + if($id !== false) { + self::setActive($id, true); + } + return $id; + } + + /** * @brief Creates a new address book * @param string $userid * @param string $name * @param string $description * @return insertid */ - public static function add($userid,$name,$description=''){ - $all = self::all($userid); + public static function add($uid,$name,$description=''){ + $all = self::all($uid); $uris = array(); foreach($all as $i){ $uris[] = $i['uri']; } $uri = self::createURI($name, $uris ); - - $stmt = OCP\DB::prepare( 'INSERT INTO *PREFIX*contacts_addressbooks (userid,displayname,uri,description,ctag) VALUES(?,?,?,?,?)' ); - $result = $stmt->execute(array($userid,$name,$uri,$description,1)); + try { + $stmt = OCP\DB::prepare( 'INSERT INTO *PREFIX*contacts_addressbooks (userid,displayname,uri,description,ctag) VALUES(?,?,?,?,?)' ); + $result = $stmt->execute(array($uid,$name,$uri,$description,1)); + } catch(Exception $e) { + OCP\Util::writeLog('contacts',__CLASS__.'::'.__METHOD__.', exception: '.$e->getMessage(),OCP\Util::ERROR); + OCP\Util::writeLog('contacts',__CLASS__.'::'.__METHOD__.', uid: '.$uid,OCP\Util::DEBUG); + return false; + } return OCP\DB::insertid('*PREFIX*contacts_addressbooks'); } @@ -105,13 +138,20 @@ class OC_Contacts_Addressbook{ * @param string $uri * @param string $name * @param string $description - * @return insertid + * @return insertid or false */ public static function addFromDAVData($principaluri,$uri,$name,$description){ - $userid = self::extractUserID($principaluri); + $uid = self::extractUserID($principaluri); - $stmt = OCP\DB::prepare( 'INSERT INTO *PREFIX*contacts_addressbooks (userid,displayname,uri,description,ctag) VALUES(?,?,?,?,?)' ); - $result = $stmt->execute(array($userid,$name,$uri,$description,1)); + try { + $stmt = OCP\DB::prepare('INSERT INTO *PREFIX*contacts_addressbooks (userid,displayname,uri,description,ctag) VALUES(?,?,?,?,?)'); + $result = $stmt->execute(array($uid,$name,$uri,$description,1)); + } catch(Exception $e) { + OCP\Util::writeLog('contacts',__CLASS__.'::'.__METHOD__.', exception: '.$e->getMessage(),OCP\Util::ERROR); + OCP\Util::writeLog('contacts',__CLASS__.'::'.__METHOD__.', uid: '.$uid,OCP\Util::DEBUG); + OCP\Util::writeLog('contacts',__CLASS__.'::'.__METHOD__.', uri: '.$uri,OCP\Util::DEBUG); + return false; + } return OCP\DB::insertid('*PREFIX*contacts_addressbooks'); } @@ -134,8 +174,14 @@ class OC_Contacts_Addressbook{ $description = $addressbook['description']; } - $stmt = OCP\DB::prepare( 'UPDATE *PREFIX*contacts_addressbooks SET displayname=?,description=?, ctag=ctag+1 WHERE id=?' ); - $result = $stmt->execute(array($name,$description,$id)); + try { + $stmt = OCP\DB::prepare('UPDATE *PREFIX*contacts_addressbooks SET displayname=?,description=?, ctag=ctag+1 WHERE id=?'); + $result = $stmt->execute(array($name,$description,$id)); + } catch(Exception $e) { + OCP\Util::writeLog('contacts',__CLASS__.'::'.__METHOD__.', exception: '.$e->getMessage(),OCP\Util::ERROR); + OCP\Util::writeLog('contacts',__CLASS__.'::'.__METHOD__.', id: '.$id,OCP\Util::DEBUG); + return false; + } return true; } @@ -172,8 +218,7 @@ class OC_Contacts_Addressbook{ if(!$prefbooks){ $addressbooks = OC_Contacts_Addressbook::all($uid); if(count($addressbooks) == 0){ - $id = OC_Contacts_Addressbook::add($uid,'default','Default Address Book'); - self::setActive($id, true); + self::addDefault($uid); } } $prefbooks = OCP\Config::getUserValue($uid,'contacts','openaddressbooks',null); @@ -186,6 +231,9 @@ class OC_Contacts_Addressbook{ * @return array */ public static function active($uid){ + if(is_null($uid)){ + $uid = OCP\USER::getUser(); + } $active = self::activeIds($uid); $addressbooks = array(); $ids_sql = join(',', array_fill(0, count($active), '?')); @@ -194,15 +242,18 @@ class OC_Contacts_Addressbook{ $stmt = OCP\DB::prepare( $prep ); $result = $stmt->execute($active); } catch(Exception $e) { - OCP\Util::writeLog('contacts','OC_Contacts_Addressbook:active:, exception: '.$e->getMessage(),OCP\Util::ERROR); - OCP\Util::writeLog('contacts','OC_Contacts_Addressbook:active, ids: '.join(',', $active),OCP\Util::DEBUG); - OCP\Util::writeLog('contacts','OC_Contacts_Addressbook::active, SQL:'.$prep,OCP\Util::DEBUG); + OCP\Util::writeLog('contacts',__CLASS__.'::'.__METHOD__.', exception: '.$e->getMessage(),OCP\Util::ERROR); + OCP\Util::writeLog('contacts',__CLASS__.'::'.__METHOD__.', uid: '.$uid,OCP\Util::DEBUG); + OCP\Util::writeLog('contacts',__CLASS__.'::'.__METHOD__.', ids: '.join(',', $active),OCP\Util::DEBUG); + OCP\Util::writeLog('contacts',__CLASS__.'::'.__METHOD__.', SQL:'.$prep,OCP\Util::DEBUG); } while( $row = $result->fetchRow()){ $addressbooks[] = $row; } - + if(!count($addressbooks)) { + self::addDefault($uid); + } return $addressbooks; } @@ -260,7 +311,7 @@ class OC_Contacts_Addressbook{ $stmt = OCP\DB::prepare( 'DELETE FROM *PREFIX*contacts_addressbooks WHERE id = ?' ); $stmt->execute(array($id)); } catch(Exception $e) { - OCP\Util::writeLog('contacts','OC_Contacts_Addressbook:delete:, exception for '.$id.': '.$e->getMessage(),OCP\Util::ERROR); + OCP\Util::writeLog('contacts',__CLASS__.'::'.__METHOD__.', exception for '.$id.': '.$e->getMessage(),OCP\Util::ERROR); return false; } diff --git a/apps/contacts/lib/app.php b/apps/contacts/lib/app.php index 29428763d60..b3a7abd28bc 100644 --- a/apps/contacts/lib/app.php +++ b/apps/contacts/lib/app.php @@ -10,7 +10,6 @@ * This class manages our app actions */ OC_Contacts_App::$l10n = OC_L10N::get('contacts'); -OC_Contacts_App::$categories = new OC_VCategories('contacts'); class OC_Contacts_App { /* * @brief language object for calendar app @@ -137,31 +136,55 @@ class OC_Contacts_App { } } - /* + /** * @brief returns the vcategories object of the user * @return (object) $vcategories */ protected static function getVCategories() { if (is_null(self::$categories)) { - self::$categories = new OC_VCategories('contacts'); + self::$categories = new OC_VCategories('contacts', null, self::getDefaultCategories()); } return self::$categories; } - /* + /** * @brief returns the categories for the user * @return (Array) $categories */ public static function getCategories() { - $categories = self::$categories->categories(); + $categories = self::getVCategories()->categories(); if(count($categories) == 0) { self::scanCategories(); $categories = self::$categories->categories(); } - return $categories; + return ($categories ? $categories : self::getDefaultCategories()); } /** + * @brief returns the default categories of ownCloud + * @return (array) $categories + */ + protected static function getDefaultCategories(){ + return array( + (string)self::$l10n->t('Birthday'), + (string)self::$l10n->t('Business'), + (string)self::$l10n->t('Call'), + (string)self::$l10n->t('Clients'), + (string)self::$l10n->t('Deliverer'), + (string)self::$l10n->t('Holidays'), + (string)self::$l10n->t('Ideas'), + (string)self::$l10n->t('Journey'), + (string)self::$l10n->t('Jubilee'), + (string)self::$l10n->t('Meeting'), + (string)self::$l10n->t('Other'), + (string)self::$l10n->t('Personal'), + (string)self::$l10n->t('Projects'), + (string)self::$l10n->t('Questions'), + (string)self::$l10n->t('Work'), + ); + } + + /** * scan vcards for categories. * @param $vccontacts VCards to scan. null to check all vcards for the current user. */ diff --git a/apps/contacts/lib/hooks.php b/apps/contacts/lib/hooks.php index 0a920fc519d..9794a9c9b94 100644 --- a/apps/contacts/lib/hooks.php +++ b/apps/contacts/lib/hooks.php @@ -34,6 +34,16 @@ */ class OC_Contacts_Hooks{ /** + * @brief Add default Addressbooks of a certain user + * @param paramters parameters from postDeleteUser-Hook + * @return array + */ + static public function createUser($parameters) { + OC_Contacts_Addressbook::addDefault($parameters['uid'],'default','Default Address Book'); + return true; + } + + /** * @brief Deletes all Addressbooks of a certain user * @param paramters parameters from postDeleteUser-Hook * @return array diff --git a/apps/contacts/lib/vcard.php b/apps/contacts/lib/vcard.php index 0f3a08844b1..bf22be0de74 100644 --- a/apps/contacts/lib/vcard.php +++ b/apps/contacts/lib/vcard.php @@ -42,32 +42,37 @@ class OC_Contacts_VCard{ /** * @brief Returns all cards of an address book * @param integer $id - * @return array + * @return array|false * * The cards are associative arrays. You'll find the original vCard in * ['carddata'] */ public static function all($id){ $result = null; - if(is_array($id)) { + if(is_array($id) && count($id)) { $id_sql = join(',', array_fill(0, count($id), '?')); $prep = 'SELECT * FROM *PREFIX*contacts_cards WHERE addressbookid IN ('.$id_sql.') ORDER BY fullname'; try { $stmt = OCP\DB::prepare( $prep ); $result = $stmt->execute($id); } catch(Exception $e) { - OCP\Util::writeLog('contacts','OC_Contacts_VCard:all:, exception: '.$e->getMessage(),OCP\Util::ERROR); - OCP\Util::writeLog('contacts','OC_Contacts_VCard:all, ids: '.join(',', $id),OCP\Util::DEBUG); - OCP\Util::writeLog('contacts','SQL:'.$prep,OCP\Util::DEBUG); + OCP\Util::writeLog('contacts',__CLASS__.'::'.__METHOD__.', exception: '.$e->getMessage(),OCP\Util::ERROR); + OCP\Util::writeLog('contacts',__CLASS__.'::'.__METHOD__.', ids: '.join(',', $id),OCP\Util::DEBUG); + OCP\Util::writeLog('contacts',__CLASS__.'::'.__METHOD__.'SQL:'.$prep,OCP\Util::DEBUG); + return false; } - } elseif($id) { + } elseif(is_int($id) || is_string($id)) { try { $stmt = OCP\DB::prepare( 'SELECT * FROM *PREFIX*contacts_cards WHERE addressbookid = ? ORDER BY fullname' ); $result = $stmt->execute(array($id)); } catch(Exception $e) { - OCP\Util::writeLog('contacts','OC_Contacts_VCard:all:, exception: '.$e->getMessage(),OCP\Util::DEBUG); - OCP\Util::writeLog('contacts','OC_Contacts_VCard:all, ids: '. $id,OCP\Util::DEBUG); + OCP\Util::writeLog('contacts',__CLASS__.'::'.__METHOD__.', exception: '.$e->getMessage(),OCP\Util::ERROR); + OCP\Util::writeLog('contacts',__CLASS__.'::'.__METHOD__.', ids: '. $id,OCP\Util::DEBUG); + return false; } + } else { + OCP\Util::writeLog('contacts',__CLASS__.'::'.__METHOD__.'. Addressbook id(s) argument is empty: '. $id,OCP\Util::DEBUG); + return false; } $cards = array(); if(!is_null($result)) { @@ -82,11 +87,17 @@ class OC_Contacts_VCard{ /** * @brief Returns a card * @param integer $id - * @return associative array + * @return associative array or false. */ public static function find($id){ - $stmt = OCP\DB::prepare( 'SELECT * FROM *PREFIX*contacts_cards WHERE id = ?' ); - $result = $stmt->execute(array($id)); + try { + $stmt = OCP\DB::prepare( 'SELECT * FROM *PREFIX*contacts_cards WHERE id = ?' ); + $result = $stmt->execute(array($id)); + } catch(Exception $e) { + OCP\Util::writeLog('contacts',__CLASS__.'::'.__METHOD__.', exception: '.$e->getMessage(),OCP\Util::ERROR); + OCP\Util::writeLog('contacts',__CLASS__.'::'.__METHOD__.', id: '. $id,OCP\Util::DEBUG); + return false; + } return $result->fetchRow(); } @@ -95,11 +106,17 @@ class OC_Contacts_VCard{ * @brief finds a card by its DAV Data * @param integer $aid Addressbook id * @param string $uri the uri ('filename') - * @return associative array + * @return associative array or false. */ public static function findWhereDAVDataIs($aid,$uri){ - $stmt = OCP\DB::prepare( 'SELECT * FROM *PREFIX*contacts_cards WHERE addressbookid = ? AND uri = ?' ); - $result = $stmt->execute(array($aid,$uri)); + try { + $stmt = OCP\DB::prepare( 'SELECT * FROM *PREFIX*contacts_cards WHERE addressbookid = ? AND uri = ?' ); + $result = $stmt->execute(array($aid,$uri)); + } catch(Exception $e) { + OCP\Util::writeLog('contacts',__CLASS__.'::'.__METHOD__.', exception: '.$e->getMessage(), OCP\Util::ERROR); + OCP\Util::writeLog('contacts',__CLASS__.'::'.__METHOD__.', aid: '.$aid.' uri'.$uri, OCP\Util::DEBUG); + return false; + } return $result->fetchRow(); } @@ -149,7 +166,13 @@ class OC_Contacts_VCard{ protected static function trueUID($aid, &$uid) { $stmt = OCP\DB::prepare( 'SELECT * FROM *PREFIX*contacts_cards WHERE addressbookid = ? AND uri = ?' ); $uri = $uid.'.vcf'; - $result = $stmt->execute(array($aid,$uri)); + try { + $result = $stmt->execute(array($aid,$uri)); + } catch(Exception $e) { + OCP\Util::writeLog('contacts',__CLASS__.'::'.__METHOD__.', exception: '.$e->getMessage(), OCP\Util::ERROR); + OCP\Util::writeLog('contacts',__CLASS__.'::'.__METHOD__.', aid: '.$aid.' uid'.$uid, OCP\Util::DEBUG); + return false; + } if($result->numRows() > 0){ while(true) { $tmpuid = substr(md5(rand().time()),0,10); @@ -254,7 +277,7 @@ class OC_Contacts_VCard{ * @param integer $aid Addressbook id * @param OC_VObject $card vCard file * @param string $uri the uri of the card, default based on the UID - * @return insertid on success or null if no card. + * @return insertid on success or false. */ public static function add($aid, OC_VObject $card, $uri=null, $isnew=false){ if(is_null($card)){ @@ -289,7 +312,13 @@ class OC_Contacts_VCard{ $data = $card->serialize(); $stmt = OCP\DB::prepare( 'INSERT INTO *PREFIX*contacts_cards (addressbookid,fullname,carddata,uri,lastmodified) VALUES(?,?,?,?,?)' ); - $result = $stmt->execute(array($aid,$fn,$data,$uri,time())); + try { + $result = $stmt->execute(array($aid,$fn,$data,$uri,time())); + } catch(Exception $e) { + OCP\Util::writeLog('contacts',__CLASS__.'::'.__METHOD__.', exception: '.$e->getMessage(), OCP\Util::ERROR); + OCP\Util::writeLog('contacts',__CLASS__.'::'.__METHOD__.', aid: '.$aid.' uri'.$uri, OCP\Util::DEBUG); + return false; + } $newid = OCP\DB::insertid('*PREFIX*contacts_cards'); OC_Contacts_Addressbook::touch($aid); @@ -325,8 +354,8 @@ class OC_Contacts_VCard{ $result = $stmt->execute(array($data,time(),$object[0])); //OCP\Util::writeLog('contacts','OC_Contacts_VCard::updateDataByID, id: '.$object[0].': '.$object[1],OCP\Util::DEBUG); } catch(Exception $e) { - OCP\Util::writeLog('contacts','OC_Contacts_VCard::updateDataByID:, exception: '.$e->getMessage(),OCP\Util::DEBUG); - OCP\Util::writeLog('contacts','OC_Contacts_VCard::updateDataByID, id: '.$object[0],OCP\Util::DEBUG); + OCP\Util::writeLog('contacts',__CLASS__.'::'.__METHOD__.', exception: '.$e->getMessage(),OCP\Util::ERROR); + OCP\Util::writeLog('contacts',__CLASS__.'::'.__METHOD__.', id: '.$object[0],OCP\Util::DEBUG); } } } @@ -357,7 +386,13 @@ class OC_Contacts_VCard{ $data = $card->serialize(); $stmt = OCP\DB::prepare( 'UPDATE *PREFIX*contacts_cards SET fullname = ?,carddata = ?, lastmodified = ? WHERE id = ?' ); - $result = $stmt->execute(array($fn,$data,time(),$id)); + try { + $result = $stmt->execute(array($fn,$data,time(),$id)); + } catch(Exception $e) { + OCP\Util::writeLog('contacts',__CLASS__.'::'.__METHOD__.', exception: '.$e->getMessage(), OCP\Util::ERROR); + OCP\Util::writeLog('contacts',__CLASS__.'::'.__METHOD__.', id'.$id, OCP\Util::DEBUG); + return false; + } OC_Contacts_Addressbook::touch($oldcard['addressbookid']); OC_Hook::emit('OC_Contacts_VCard', 'post_updateVCard', $id); @@ -390,7 +425,13 @@ class OC_Contacts_VCard{ // FIXME: Add error checking. OC_Hook::emit('OC_Contacts_VCard', 'pre_deleteVCard', array('aid' => null, 'id' => $id, 'uri' => null)); $stmt = OCP\DB::prepare( 'DELETE FROM *PREFIX*contacts_cards WHERE id = ?' ); - $stmt->execute(array($id)); + try { + $stmt->execute(array($id)); + } catch(Exception $e) { + OCP\Util::writeLog('contacts',__CLASS__.'::'.__METHOD__.', exception: '.$e->getMessage(), OCP\Util::ERROR); + OCP\Util::writeLog('contacts',__CLASS__.'::'.__METHOD__.', id: '.$id, OCP\Util::DEBUG); + return false; + } return true; } @@ -403,9 +444,15 @@ class OC_Contacts_VCard{ */ public static function deleteFromDAVData($aid,$uri){ // FIXME: Add error checking. Deleting a card gives an Kontact/Akonadi error. - OC_Hook::emit('OC_Contacts_VCard', 'pre_deleteVCard', array('aid' => $aid, 'id' => null, 'uri' => $uid)); + OC_Hook::emit('OC_Contacts_VCard', 'pre_deleteVCard', array('aid' => $aid, 'id' => null, 'uri' => $uri)); $stmt = OCP\DB::prepare( 'DELETE FROM *PREFIX*contacts_cards WHERE addressbookid = ? AND uri=?' ); - $stmt->execute(array($aid,$uri)); + try { + $stmt->execute(array($aid,$uri)); + } catch(Exception $e) { + OCP\Util::writeLog('contacts',__CLASS__.'::'.__METHOD__.', exception: '.$e->getMessage(), OCP\Util::ERROR); + OCP\Util::writeLog('contacts',__CLASS__.'::'.__METHOD__.', aid: '.$aid.' uri: '.$uri, OCP\Util::DEBUG); + return false; + } OC_Contacts_Addressbook::touch($aid); return true; @@ -546,9 +593,9 @@ class OC_Contacts_VCard{ $vals = array_merge((array)$aid, $id); $result = $stmt->execute($vals); } catch(Exception $e) { - OCP\Util::writeLog('contacts','OC_Contacts_VCard::moveToAddressBook:, exception: '.$e->getMessage(),OCP\Util::DEBUG); - OCP\Util::writeLog('contacts','OC_Contacts_VCard::moveToAddressBook, ids: '.join(',', $vals),OCP\Util::DEBUG); - OCP\Util::writeLog('contacts','SQL:'.$prep,OCP\Util::DEBUG); + OCP\Util::writeLog('contacts',__CLASS__.'::'.__METHOD__.', exception: '.$e->getMessage(),OCP\Util::ERROR); + OCP\Util::writeLog('contacts',__CLASS__.'::'.__METHOD__.', ids: '.join(',', $vals),OCP\Util::DEBUG); + OCP\Util::writeLog('contacts',__CLASS__.'::'.__METHOD__.', SQL:'.$prep,OCP\Util::DEBUG); return false; } } else { @@ -556,8 +603,8 @@ class OC_Contacts_VCard{ $stmt = OCP\DB::prepare( 'UPDATE *PREFIX*contacts_cards SET addressbookid = ? WHERE id = ?' ); $result = $stmt->execute(array($aid, $id)); } catch(Exception $e) { - OCP\Util::writeLog('contacts','OC_Contacts_VCard::moveToAddressBook:, exception: '.$e->getMessage(),OCP\Util::DEBUG); - OCP\Util::writeLog('contacts','OC_Contacts_VCard::moveToAddressBook, id: '.$id,OCP\Util::DEBUG); + OCP\Util::writeLog('contacts',__CLASS__.'::'.__METHOD__.', exception: '.$e->getMessage(),OCP\Util::DEBUG); + OCP\Util::writeLog('contacts',__CLASS__.'::'.__METHOD__.' id: '.$id,OCP\Util::DEBUG); return false; } } diff --git a/apps/files_external/lib/dropbox.php b/apps/files_external/lib/dropbox.php index 5e94277c6d4..6f1a154a122 100755 --- a/apps/files_external/lib/dropbox.php +++ b/apps/files_external/lib/dropbox.php @@ -41,7 +41,11 @@ class OC_Filestorage_Dropbox extends OC_Filestorage_Common { return $this->metaData[$path]; } else { if ($list) { - $response = $this->dropbox->getMetaData($path); + try { + $response = $this->dropbox->getMetaData($path); + } catch (Exception $exception) { + return false; + } if ($response && isset($response['contents'])) { $contents = $response['contents']; // Cache folder's contents @@ -90,7 +94,7 @@ class OC_Filestorage_Dropbox extends OC_Filestorage_Common { if ($metaData = $this->getMetaData($path)) { $stat['size'] = $metaData['bytes']; $stat['atime'] = time(); - $stat['mtime'] = strtotime($metaData['modified']); + $stat['mtime'] = (isset($metaData['modified'])) ? strtotime($metaData['modified']) : time(); $stat['ctime'] = $stat['mtime']; return $stat; } @@ -111,11 +115,11 @@ class OC_Filestorage_Dropbox extends OC_Filestorage_Common { } public function is_readable($path) { - return true; + return self::file_exists($path); } public function is_writable($path) { - return true; + return self::file_exists($path); } public function file_exists($path) { diff --git a/apps/files_texteditor/js/editor.js b/apps/files_texteditor/js/editor.js index 9d168c1c4f6..70bb74a9101 100644 --- a/apps/files_texteditor/js/editor.js +++ b/apps/files_texteditor/js/editor.js @@ -67,7 +67,7 @@ function setSyntaxMode(ext){ function showControls(filename,writeperms){ // Loads the control bar at the top. // Load the new toolbar. - var editorbarhtml = '<div id="editorcontrols" style="display: none;"><div class="crumb svg last" id="breadcrumb_file" style="background-image:url("'+OC.imagePath('core','breadcrumb.png')+'")"><p>'+filename+'</p></div>'; + var editorbarhtml = '<div id="editorcontrols" style="display: none;"><div class="crumb svg last" id="breadcrumb_file" style="background-image:url("'+OC.imagePath('core','breadcrumb.png')+'")"><p>'+filename.replace(/</, "<").replace(/>/, ">")+'</p></div>'; if(writeperms=="true"){ editorbarhtml += '<button id="editor_save">'+t('files_texteditor','Save')+'</button><div class="separator"></div>'; } diff --git a/apps/media/lib_scanner.php b/apps/media/lib_scanner.php index a8218c3a4d0..3c32879eeeb 100644 --- a/apps/media/lib_scanner.php +++ b/apps/media/lib_scanner.php @@ -61,7 +61,6 @@ class OC_MEDIA_SCANNER{ * @return boolean */ public static function scanFile($path){ - $file=OC_Filesystem::getLocalFile($path); if(!self::isMusic($path)){ return; } @@ -69,6 +68,7 @@ class OC_MEDIA_SCANNER{ self::$getID3=@new getID3(); self::$getID3->encoding='UTF-8'; } + $file=OC_Filesystem::getLocalFile($path); $data=@self::$getID3->analyze($file); getid3_lib::CopyTagsToComments($data); if(!isset($data['comments'])){ diff --git a/lib/app.php b/lib/app.php index b337c55ec60..a9feff1620a 100755 --- a/lib/app.php +++ b/lib/app.php @@ -84,6 +84,7 @@ class OC_App{ */ public static function loadApp($app){ if(is_file(self::getAppPath($app).'/appinfo/app.php')){ + self::checkUpgrade($app); require_once( $app.'/appinfo/app.php' ); } } @@ -526,22 +527,17 @@ class OC_App{ } /** - * check if any apps need updating and update those + * check if the app need updating and update when needed */ - public static function updateApps(){ + public static function checkUpgrade($app) { $versions = self::getAppVersions(); - //ensure files app is installed for upgrades - if(!isset($versions['files'])){ - $versions['files']='0'; - } - foreach( $versions as $app=>$installedVersion ){ - $currentVersion=OC_App::getAppVersion($app); - if ($currentVersion) { - if (version_compare($currentVersion, $installedVersion, '>')) { - OC_Log::write($app, 'starting app upgrade from '.$installedVersion.' to '.$currentVersion,OC_Log::DEBUG); - OC_App::updateApp($app); - OC_Appconfig::setValue($app, 'installed_version', OC_App::getAppVersion($app)); - } + $currentVersion=OC_App::getAppVersion($app); + if ($currentVersion) { + $installedVersion = $versions[$app]; + if (version_compare($currentVersion, $installedVersion, '>')) { + OC_Log::write($app, 'starting app upgrade from '.$installedVersion.' to '.$currentVersion,OC_Log::DEBUG); + OC_App::updateApp($app); + OC_Appconfig::setValue($app, 'installed_version', OC_App::getAppVersion($app)); } } } @@ -571,6 +567,10 @@ class OC_App{ * get the installed version of all papps */ public static function getAppVersions(){ + static $versions; + if (isset($versions)) { // simple cache, needs to be fixed + return $versions; // when function is used besides in checkUpgrade + } $versions=array(); $query = OC_DB::prepare( 'SELECT appid, configvalue FROM *PREFIX*appconfig WHERE configkey = \'installed_version\'' ); $result = $query->execute(); diff --git a/lib/base.php b/lib/base.php index b4da6434e25..c2b0bbef780 100644 --- a/lib/base.php +++ b/lib/base.php @@ -170,8 +170,10 @@ class OC{ public static function checkInstalled() { // Redirect to installer if not installed if (!OC_Config::getValue('installed', false) && OC::$SUBURI != '/index.php') { - $url = 'http://'.$_SERVER['SERVER_NAME'].OC::$WEBROOT.'/index.php'; - header("Location: $url"); + if(!OC::$CLI){ + $url = 'http://'.$_SERVER['SERVER_NAME'].OC::$WEBROOT.'/index.php'; + header("Location: $url"); + } exit(); } } @@ -180,7 +182,7 @@ class OC{ // redirect to https site if configured if( OC_Config::getValue( "forcessl", false )){ ini_set("session.cookie_secure", "on"); - if(OC_Helper::serverProtocol()<>'https') { + if(OC_Helper::serverProtocol()<>'https' and !OC::$CLI) { $url = "https://". OC_Helper::serverHost() . $_SERVER['REQUEST_URI']; header("Location: $url"); exit(); @@ -208,9 +210,9 @@ class OC{ OC_Config::setValue('version',implode('.',OC_Util::getVersion())); OC_App::checkAppsRequirements(); + // load all apps to also upgrade enabled apps + OC_App::loadApps(); } - - OC_App::updateApps(); } } diff --git a/lib/connector/sabre/directory.php b/lib/connector/sabre/directory.php index 9832449af3a..b75bb5c50f5 100644 --- a/lib/connector/sabre/directory.php +++ b/lib/connector/sabre/directory.php @@ -90,16 +90,18 @@ class OC_Connector_Sabre_Directory extends OC_Connector_Sabre_Node implements Sa foreach($folder_content as $info) { $paths[] = $this->path.'/'.$info['name']; } - $placeholders = join(',', array_fill(0, count($paths), '?')); - $query = OC_DB::prepare( 'SELECT * FROM *PREFIX*properties WHERE userid = ?' . ' AND propertypath IN ('.$placeholders.')' ); - array_unshift($paths, OC_User::getUser()); // prepend userid - $result = $query->execute( $paths ); $properties = array_fill_keys($paths, array()); - while($row = $result->fetchRow()) { - $propertypath = $row['propertypath']; - $propertyname = $row['propertyname']; - $propertyvalue = $row['propertyvalue']; - $properties[$propertypath][$propertyname] = $propertyvalue; + if(count($paths)>0){ + $placeholders = join(',', array_fill(0, count($paths), '?')); + $query = OC_DB::prepare( 'SELECT * FROM *PREFIX*properties WHERE userid = ?' . ' AND propertypath IN ('.$placeholders.')' ); + array_unshift($paths, OC_User::getUser()); // prepend userid + $result = $query->execute( $paths ); + while($row = $result->fetchRow()) { + $propertypath = $row['propertypath']; + $propertyname = $row['propertyname']; + $propertyvalue = $row['propertyvalue']; + $properties[$propertypath][$propertyname] = $propertyvalue; + } } $nodes = array(); diff --git a/lib/helper.php b/lib/helper.php index 37914b73e17..6ab55f27618 100644 --- a/lib/helper.php +++ b/lib/helper.php @@ -75,6 +75,9 @@ class OC_Helper { * reverse proxies */ public static function serverHost() { + if(OC::$CLI){ + return 'localhost'; + } if (isset($_SERVER['HTTP_X_FORWARDED_HOST'])) { if (strpos($_SERVER['HTTP_X_FORWARDED_HOST'], ",") !== false) { $host = trim(array_pop(explode(",", $_SERVER['HTTP_X_FORWARDED_HOST']))); diff --git a/lib/vcategories.php b/lib/vcategories.php index 1e79b62f0d6..8157c343868 100644 --- a/lib/vcategories.php +++ b/lib/vcategories.php @@ -55,7 +55,7 @@ class OC_VCategories { $this->app = $app; $this->user = is_null($user) ? OC_User::getUser() : $user; $categories = trim(OC_Preferences::getValue($this->user, $app, self::PREF_CATEGORIES_LABEL, '')); - $this->categories = $categories != '' ? unserialize($categories) : $defcategories; + $this->categories = $categories != '' ? @unserialize($categories) : $defcategories; } /** @@ -64,6 +64,9 @@ class OC_VCategories { */ public function categories() { //OC_Log::write('core','OC_VCategories::categories: '.print_r($this->categories, true), OC_Log::DEBUG); + if(!$this->categories) { + return array(); + } usort($this->categories, 'strnatcasecmp'); // usort to also renumber the keys return $this->categories; } @@ -203,11 +206,17 @@ class OC_VCategories { // case-insensitive in_array private function in_arrayi($needle, $haystack) { + if(!is_array($haystack)) { + return false; + } return in_array(strtolower($needle), array_map('strtolower', $haystack)); } // case-insensitive array_search private function array_searchi($needle, $haystack) { + if(!is_array($haystack)) { + return false; + } return array_search(strtolower($needle),array_map('strtolower',$haystack)); } diff --git a/public.php b/public.php index 19c02a7a027..8846769f467 100644 --- a/public.php +++ b/public.php @@ -10,6 +10,7 @@ if(is_null($file)){ $parts=explode('/',$file,2); $app=$parts[0]; +OC_Util::checkAppEnabled($app); OC_App::loadApp($app); require_once(OC_App::getAppPath($app) .'/'. $parts[1]); diff --git a/remote.php b/remote.php index e68a53800c7..af48cd922c8 100644 --- a/remote.php +++ b/remote.php @@ -27,13 +27,24 @@ $file = ltrim ($file, '/'); if(count(explode('/',$file)) == 2) { $parts=explode('/',$file); - $app=$parts[1]; - OC_App::loadApp($app); + $app=$parts[0]; + switch ($app) { + case 'files': + OC_Util::checkAppEnabled($app); + OC_App::loadApp($app); + break; + case 'core': + break; + default: + OC_Response::setStatus(OC_Response::STATUS_NOT_FOUND); + exit; + } $baseuri = OC::$WEBROOT . '/remote.php/'.$service.'/'; require_once( OC::$SERVERROOT.'/'.$file); } else { $parts=explode('/', $file, 2); $app=$parts[0]; + OC_Util::checkAppEnabled($app); OC_App::loadApp($app); $baseuri = OC::$WEBROOT . '/remote.php/'.$service.'/'; require_once(OC_App::getAppPath($app) .'/'. $parts[1]); |