Calendar_Frontend_Json - searchAllAttendeeTypes
authorPaul Mehrer <p.mehrer@metaways.de>
Wed, 7 Jun 2017 10:15:18 +0000 (12:15 +0200)
committerPaul Mehrer <p.mehrer@metaways.de>
Wed, 7 Jun 2017 11:30:17 +0000 (13:30 +0200)
and add test

Change-Id: Ic281885a081f63b61c68b681dc5c083df93f32ab
Reviewed-on: http://gerrit.tine20.com/customers/4840
Tested-by: Jenkins CI (http://ci.tine20.com/)
Reviewed-by: Paul Mehrer <p.mehrer@metaways.de>
Tested-by: Paul Mehrer <p.mehrer@metaways.de>
tests/tine20/Calendar/JsonTests.php
tine20/Calendar/Frontend/Json.php

index 2b4dcce..a4487c0 100644 (file)
@@ -2007,6 +2007,40 @@ class Calendar_JsonTests extends Calendar_TestCase
         ));
 
         $fbinfo = $this->_uit->getFreeBusyInfo($persistentEvent->attendee->toArray(), $period);
-        $this->assertGreaterThanOrEqual(2, count($fbinfo));
+        $this->assertEquals(2, count($fbinfo));
+
+        $fbinfo = $this->_uit->getFreeBusyInfo($persistentEvent->attendee->toArray(), $period, array($persistentEvent->uid));
+        $this->assertEquals(0, count($fbinfo));
+    }
+
+    public function testSearchAllAttendeeTypes()
+    {
+        $event = $this->_getEvent();
+        $event->attendee = new Tinebase_Record_RecordSet('Calendar_Model_Attender', array(
+            array('user_id' => $this->_getPersonasContacts('sclever')->getId()),
+            array('user_id' => $this->_getPersonasContacts('pwulf')->getId())
+        ));
+        $persistentEvent = $this->_eventController->create($event);
+
+        $period = array(array(
+            'field'     => 'period',
+            'operator'  => 'within',
+            'value'     => array(
+                'from'      => $persistentEvent->dtstart,
+                'until'     => $persistentEvent->dtend
+            ),
+        ));
+
+        $filter = array(array('field' => 'name', 'operator' => 'contains', 'value' => 'l'));
+        $paging = array('sort' => 'name', 'dir' => 'ASC', 'start' => 0, 'limit' => 10);
+
+        $result = $this->_uit->searchAllAttendeeTypes($filter, $paging, $period, array());
+        $this->assertTrue(
+            isset($result[Calendar_Model_Attender::USERTYPE_USER]) &&
+            count($result[Calendar_Model_Attender::USERTYPE_USER]) === 3 &&
+            isset($result[Calendar_Model_Attender::USERTYPE_GROUP]) &&
+            isset($result[Calendar_Model_Attender::USERTYPE_RESOURCE]) &&
+            isset($result['freeBusyInfo']) &&
+            count($result['freeBusyInfo']) === 2, print_r($result, true));
     }
 }
index 1f2948f..050657d 100644 (file)
@@ -43,7 +43,8 @@ class Calendar_Frontend_Json extends Tinebase_Frontend_Json_Abstract
     {
         $event = new Calendar_Model_Event(array(), TRUE);
         $event->setFromJsonInUsersTimezone($recordData);
-        
+
+        /** @noinspection PhpDeprecationInspection */
         $returnEvent = Calendar_Controller_Event::getInstance()->createRecurException($event, $deleteInstance, $deleteAllFollowing, $checkBusyConflicts);
         
         return $this->getEvent($returnEvent->getId());
@@ -52,7 +53,7 @@ class Calendar_Frontend_Json extends Tinebase_Frontend_Json_Abstract
     /**
      * deletes existing events
      *
-     * @param array $_ids
+     * @param array $ids
      * @param string $range
      * @return string
      */
@@ -64,7 +65,7 @@ class Calendar_Frontend_Json extends Tinebase_Frontend_Json_Abstract
     /**
      * deletes existing resources
      *
-     * @param array $_ids 
+     * @param array $ids
      * @return string
      */
     public function deleteResources($ids)
@@ -76,7 +77,7 @@ class Calendar_Frontend_Json extends Tinebase_Frontend_Json_Abstract
      * deletes a recur series
      *
      * @param  array $recordData
-     * @return void
+     * @return array
      */
     public function deleteRecurSeries($recordData)
     {
@@ -273,8 +274,8 @@ class Calendar_Frontend_Json extends Tinebase_Frontend_Json_Abstract
     /**
      * Search for events matching given arguments
      *
-     * @param  array $_filter
-     * @param  array $_paging
+     * @param  array $filter
+     * @param  array $paging
      * @return array
      */
     public function searchEvents($filter, $paging)
@@ -349,8 +350,8 @@ class Calendar_Frontend_Json extends Tinebase_Frontend_Json_Abstract
     /**
      * Search for resources matching given arguments
      *
-     * @param  array $_filter
-     * @param  array $_paging
+     * @param  array $filter
+     * @param  array $paging
      * @return array
      */
     public function searchResources($filter, $paging)
@@ -430,7 +431,7 @@ class Calendar_Frontend_Json extends Tinebase_Frontend_Json_Abstract
     /**
      * prepares an iMIP (RFC 6047) Message
      * 
-     * @param array $iMIP
+     * @param array|Calendar_Model_iMIP $iMIP
      * @return array prepared iMIP part
      */
     public function iMIPPrepare($iMIP)
@@ -476,4 +477,44 @@ class Calendar_Frontend_Json extends Tinebase_Frontend_Json_Abstract
 
         return $fbInfo->toArray();
     }
+
+    /**
+     * @param array $_filter
+     * @param array $_paging
+     * @param array $_periods
+     * @param array $_ignoreUIDs
+     * @return array
+     */
+    public function searchAllAttendeeTypes($_filter, $_paging, $_periods, $_ignoreUIDs)
+    {
+        $addressBookFE = new Addressbook_Frontend_Json();
+        $contactFilter = array(array('condition' => 'OR', 'filters' => array(
+            $_filter[0],
+            array('field' => 'path', 'operator' => 'contains', 'value' => $_filter[0]['value'])
+        )));
+        $groupFilter = $contactFilter;
+        $groupFilter[] = array('field' => 'type', 'operator' => 'contains', 'value' => 'group');
+        $contactPaging = $_paging;
+        $contactPaging['sort'] = 'type';
+
+        $result = array(
+            Calendar_Model_Attender::USERTYPE_USER => $addressBookFE->searchContacts($contactFilter, $contactPaging),
+            Calendar_Model_Attender::USERTYPE_GROUP => $addressBookFE->searchLists($groupFilter, $_paging),
+            Calendar_Model_Attender::USERTYPE_RESOURCE => $this->searchResources($_filter, $_paging)
+        );
+
+        $attendee = array();
+        foreach ($result as $type => $res) {
+            foreach ($res['results'] as $r) {
+                $attendee[] = array(
+                    'user_id'   => $r['id'],
+                    'user_type' => $type
+                );
+            }
+        }
+
+        $result['freeBusyInfo'] = $this->getFreeBusyInfo($attendee, $_periods, $_ignoreUIDs);
+
+        return $result;
+    }
 }