]> source.dussan.org Git - nextcloud-server.git/commitdiff
Remove ugly activation hack.
authorThomas Tanghus <thomas@tanghus.net>
Wed, 4 Jul 2012 20:12:56 +0000 (22:12 +0200)
committerThomas Tanghus <thomas@tanghus.net>
Wed, 4 Jul 2012 20:13:36 +0000 (22:13 +0200)
apps/contacts/appinfo/database.xml
apps/contacts/appinfo/version
apps/contacts/js/contacts.js
apps/contacts/lib/addressbook.php

index 7c8268d71f53430c61b45ab6a27d2e34df035a44..dc469ca0a0cae0b3136dc5f381b9b37d7b7d442f 100644 (file)
     <length>4</length>
    </field>
 
+   <field>
+    <name>active</name>
+    <type>integer</type>
+    <default>0</default>
+    <notnull>true</notnull>
+    <length>4</length>
+   </field>
+
   </declaration>
 
  </table>
index 2f4536184bcac31936bd15a5f9cf931dd526c022..7dff5b8921122a487162febe3c8e32effb7acb35 100644 (file)
@@ -1 +1 @@
-0.2
\ No newline at end of file
+0.2.1
\ No newline at end of file
index 5be1fa61292b860677c4a009a12cda2e0f3bcc24..d4b3ef588ba38bcbf6f62a835eb34e9809312a08 100644 (file)
@@ -1359,13 +1359,18 @@ Contacts={
                                }
                                return false;
                        },
-                       activation:function(checkbox, bookid)
-                       {
-                               $.post(OC.filePath('contacts', 'ajax', 'activation.php'), { bookid: bookid, active: checkbox.checked?1:0 },
-                                 function(data) {
-                                       if (data.status == 'success'){
-                                               checkbox.checked = data.active == 1;
-                                               Contacts.UI.Contacts.update();
+                       activation:function(checkbox, bookid){
+                               var active = checkbox.checked;
+                               $.post(OC.filePath('contacts', 'ajax', 'activation.php'), {bookid: bookid, active: (active?1:0)}, function(jsondata) {
+                                       if (jsondata.status == 'success'){
+                                               if(!active) {
+                                                       $('#contacts h3[data-id="'+bookid+'"],#contacts ul[data-id="'+bookid+'"]').remove();
+                                               } else {
+                                                       Contacts.UI.Contacts.update();
+                                               }
+                                       } else {
+                                               OC.dialogs.alert(jsondata.data.message, t('contacts', 'Error'));
+                                               checkbox.checked = !active;
                                        }
                                  });
                        },
index 86a41b18cf3e8ccc300f6b4a3a320a38b90a1c02..f33f4a204e70c1ebfb5a6f48cf1e43be95db22d6 100644 (file)
@@ -41,27 +41,62 @@ class OC_Contacts_Addressbook{
        /**
         * @brief Returns the list of addressbooks for a specific user.
         * @param string $uid
+        * @param boolean $active Only return calendars with this $active state, default(=false) is don't care
         * @return array or false.
         */
-       public static function all($uid){
+       public static function all($uid, $active=false){
+               $values = array($uid);
+               $active_where = '';
+               if ($active){
+                       $active_where = ' AND active = ?';
+                       $values[] = 1;
+               }
                try {
-                       $stmt = OCP\DB::prepare( 'SELECT * FROM *PREFIX*contacts_addressbooks WHERE userid = ? ORDER BY displayname' );
-                       $result = $stmt->execute(array($uid));
+                       $stmt = OCP\DB::prepare( 'SELECT * FROM *PREFIX*contacts_addressbooks WHERE userid = ? ' . $active_where . ' ORDER BY displayname' );
+                       $result = $stmt->execute($values);
                } 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()){
                        $addressbooks[] = $row;
                }
+               if(!$active && !count($addressbooks)) {
+                       self::addDefault($uid);
+               }
 
                return $addressbooks;
        }
 
+       /**
+        * @brief Get active addressbook IDs for a user.
+        * @param integer $uid User id. If null current user will be used.
+        * @return array
+        */
+       public static function activeIds($uid = null){
+               if(is_null($uid)){
+                       $uid = OCP\USER::getUser();
+               }
+               $activeaddressbooks = self::all($uid, true);
+               $ids = array();
+               foreach($activeaddressbooks as $addressbook) {
+                       $ids[] = $addressbook['userid'];
+               }
+               return $ids;
+       }
+
+       /**
+        * @brief Returns the list of active addressbooks for a specific user.
+        * @param string $uid
+        * @return array
+        */
+       public static function active($uid){
+               return self::all($uid, true);
+       }
+
        /**
         * @brief Returns the list of addressbooks for a principal (DAV term of user)
         * @param string $principaluri
@@ -186,77 +221,6 @@ class OC_Contacts_Addressbook{
                return true;
        }
 
-       public static function cleanArray($array, $remove_null_number = true){
-               $new_array = array();
-
-               $null_exceptions = array();
-
-               foreach ($array as $key => $value){
-                       $value = trim($value);
-
-                       if($remove_null_number){
-                               $null_exceptions[] = '0';
-                       }
-
-                       if(!in_array($value, $null_exceptions) && $value != "") {
-                               $new_array[] = $value;
-                       }
-               }
-               return $new_array;
-       }
-
-       /**
-        * @brief Get active addressbooks for a user.
-        * @param integer $uid User id. If null current user will be used.
-        * @return array
-        */
-       public static function activeIds($uid = null){
-               if(is_null($uid)){
-                       $uid = OCP\USER::getUser();
-               }
-               $prefbooks = OCP\Config::getUserValue($uid,'contacts','openaddressbooks',null);
-               if(!$prefbooks){
-                       $addressbooks = OC_Contacts_Addressbook::all($uid);
-                       if(count($addressbooks) == 0){
-                               self::addDefault($uid);
-                       }
-               }
-               $prefbooks = OCP\Config::getUserValue($uid,'contacts','openaddressbooks',null);
-               return explode(';',$prefbooks);
-       }
-
-       /**
-        * @brief Returns the list of active addressbooks for a specific user.
-        * @param string $uid
-        * @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), '?'));
-               $prep = 'SELECT * FROM *PREFIX*contacts_addressbooks WHERE id IN ('.$ids_sql.') ORDER BY displayname';
-               try {
-                       $stmt = OCP\DB::prepare( $prep );
-                       $result = $stmt->execute($active);
-               } 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__.', 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;
-       }
-
        /**
         * @brief Activates an addressbook
         * @param integer $id
@@ -264,30 +228,16 @@ class OC_Contacts_Addressbook{
         * @return boolean
         */
        public static function setActive($id,$active){
-               // Need these ones for checking uri
-               //$addressbook = self::find($id);
-
-               if(is_null($id)){
-                       $id = 0;
-               }
-
-               $openaddressbooks = self::activeIds();
-               if($active) {
-                       if(!in_array($id, $openaddressbooks)) {
-                               $openaddressbooks[] = $id;
-                       }
-               } else { 
-                       if(in_array($id, $openaddressbooks)) {
-                               unset($openaddressbooks[array_search($id, $openaddressbooks)]);
-                       }
+               $sql = 'UPDATE *PREFIX*contacts_addressbooks SET active = ? WHERE id = ?';
+               OCP\Util::writeLog('contacts',__CLASS__.'::'.__METHOD__.', id: '.$id.', active: '.intval($active),OCP\Util::ERROR);
+               try {
+                       $stmt = OCP\DB::prepare($sql);
+                       $stmt->execute(array(intval($active), $id));
+                       return true;
+               } catch(Exception $e) {
+                       OCP\Util::writeLog('contacts',__CLASS__.'::'.__METHOD__.', exception for '.$id.': '.$e->getMessage(),OCP\Util::ERROR);
+                       return false;
                }
-               // NOTE: Ugly hack...
-               $openaddressbooks = self::cleanArray($openaddressbooks, false);
-               sort($openaddressbooks, SORT_NUMERIC);
-               // FIXME: I alway end up with a ';' prepending when imploding the array..?
-               OCP\Config::setUserValue(OCP\USER::getUser(),'contacts','openaddressbooks',implode(';', $openaddressbooks));
-
-               return true;
        }
 
        /**
@@ -296,8 +246,15 @@ class OC_Contacts_Addressbook{
         * @return boolean
         */
        public static function isActive($id){
-               //OCP\Util::writeLog('contacts','OC_Contacts_Addressbook::isActive('.$id.'):'.in_array($id, self::activeIds()), OCP\Util::DEBUG);
-               return in_array($id, self::activeIds());
+               $sql = 'SELECT active FROM *PREFIX*contacts_addressbooks WHERE id = ?';
+               try {
+                       $stmt = OCP\DB::prepare( $sql );
+                       $result = $stmt->execute(array($id));
+                       $row = $result->fetchRow();
+                       return (bool)$row['active'];
+               } catch(Exception $e) {
+                       OCP\Util::writeLog('contacts',__CLASS__.'::'.__METHOD__.', exception: '.$e->getMessage(),OCP\Util::ERROR);
+               }
        }
 
        /**