/**
  * testRenameResource
  * 
  * @see 0010106: rename resource does not update container name
  */
 public function testRenameResource()
 {
     $resource = $this->_getResource();
     $createResource = Calendar_Controller_Resource::getInstance()->create($resource);
     $calenderFrontend = new Calendar_Frontend_Json();
     $resourceArrayFromDB = $calenderFrontend->getResource($createResource->getId());
     $resourceArrayFromDB['name'] = 'Other Room';
     $calenderFrontend->saveResource($resourceArrayFromDB);
     $containerFrontend = new Tinebase_Frontend_Json_Container();
     $result = $containerFrontend->getContainer('Calendar', Tinebase_Model_Container::TYPE_SHARED, '');
     foreach ($result as $container) {
         if ($container['id'] != $createResource->container_id) {
             continue;
         }
         $this->assertEquals($container['name'], 'Other Room');
     }
 }
 /**
  * converts Tinebase_Record_Abstract to external format
  *
  * @param  Tinebase_Record_Abstract $_record
  * @return mixed
  */
 public function fromTine20Model(Tinebase_Record_Abstract $_record)
 {
     $jsonData = parent::fromTine20Model($_record);
     if (Tinebase_Core::getUser()->hasRight('Calendar', Calendar_Acl_Rights::MANAGE_RESOURCES)) {
         $jsonData['grants'] = Tinebase_Container::getInstance()->getGrantsOfContainer($_record->container_id, TRUE)->toArray();
         $jsonData['grants'] = Tinebase_Frontend_Json_Container::resolveAccounts($jsonData['grants']);
     }
     return $jsonData;
 }
 /**
  * try to set container grants
  *
  */
 public function testSetContainerGrants()
 {
     $container = $this->_backend->addContainer('Addressbook', 'Tine 2.0 Unittest', Tinebase_Model_Container::TYPE_PERSONAL);
     $this->assertEquals('Tine 2.0 Unittest', $container['name']);
     $newGrants = array(array('account_id' => Zend_Registry::get('currentAccount')->getId(), 'account_type' => 'user', Tinebase_Model_Grants::GRANT_READ => true, Tinebase_Model_Grants::GRANT_ADD => true, Tinebase_Model_Grants::GRANT_EDIT => true, Tinebase_Model_Grants::GRANT_DELETE => false, Tinebase_Model_Grants::GRANT_ADMIN => true));
     $grants = $this->_backend->setContainerGrants($container['id'], $newGrants);
     $this->assertEquals(1, count($grants['results']));
     $this->assertFalse($grants['results'][0]["deleteGrant"]);
     $this->assertTrue($grants['results'][0]["adminGrant"]);
     $this->_backend->deleteContainer($container['id']);
     $this->setExpectedException('Tinebase_Exception_NotFound');
     $container = Tinebase_Container::getInstance()->getContainerById($container['id']);
 }
 /**
  * try to move a contact to another container and check content sequence
  */
 public function testMoveContactToContainer()
 {
     $sharedContainer = $this->_instance->addContainer(new Tinebase_Model_Container(array('name' => 'tine20shared', 'type' => Tinebase_Model_Container::TYPE_SHARED, 'owner_id' => Tinebase_Core::getUser(), 'backend' => 'Sql', 'application_id' => Tinebase_Application::getInstance()->getApplicationByName('Addressbook')->getId())));
     $initialContainer = $this->_instance->get($this->objects['initialContainer']);
     $contact = new Addressbook_Model_Contact(array('n_family' => 'Tester', 'container_id' => $sharedContainer->getId()));
     $contact = Addressbook_Controller_Contact::getInstance()->create($contact);
     $filter = array(array('field' => 'id', 'operator' => 'in', 'value' => array($contact->getId())));
     $containerJson = new Tinebase_Frontend_Json_Container();
     $result = $containerJson->moveRecordsToContainer($initialContainer->getId(), $filter, 'Addressbook', 'Contact');
     $this->assertGreaterThan(0, count($result['results']), 'no contacts moved');
     $this->assertEquals($contact->getId(), $result['results'][0]);
     $movedContact = Addressbook_Controller_Contact::getInstance()->get($contact->getId());
     $this->assertEquals($initialContainer->getId(), $movedContact->container_id, 'contact has not been moved');
     $contentSeqs = $this->_instance->getContentSequence(array($sharedContainer->getId(), $initialContainer->getId()));
     $this->assertEquals(2, $contentSeqs[$sharedContainer->getId()], 'content seq mismatch: ' . print_r($contentSeqs, TRUE));
     $this->assertEquals(1, $contentSeqs[$initialContainer->getId()], 'content seq mismatch: ' . print_r($contentSeqs, TRUE));
     // check container content
     $contentRecords = $this->_instance->getContentHistory($sharedContainer->getId());
     $this->assertEquals(2, count($contentRecords));
     $this->assertEquals($contact->getId(), $contentRecords->getFirstRecord()->record_id);
     $this->assertEquals(Tinebase_Model_ContainerContent::ACTION_CREATE, $contentRecords->getFirstRecord()->action);
 }
 /**
  * external organizer container should not be visible
  */
 public function testExternalContactContainer()
 {
     $this->testExternalInvitationRequestProcess();
     $containerFrontend = new Tinebase_Frontend_Json_Container();
     $result = $containerFrontend->getContainer('Calendar', Tinebase_Model_Container::TYPE_SHARED, null, null);
     foreach ($result as $container) {
         if ($container['name'] === '*****@*****.**') {
             $this->fail('found external organizer container: ' . print_r($container, true));
         }
     }
 }
Esempio n. 6
0
 /**
  * returns record prepared for json transport
  *
  * @param Tinebase_Record_Interface $_record
  * @return array record data
  */
 protected function _recordToJson($_record)
 {
     $result = parent::_recordToJson($_record);
     if ($_record instanceof Tinebase_Model_Container) {
         $result['account_grants'] = Tinebase_Frontend_Json_Container::resolveAccounts($result['account_grants']);
     }
     return $result;
 }
 /**
  * returns multiple records prepared for json transport
  *
  * @param Tinebase_Record_RecordSet $_records Tinebase_Record_Abstract
  * @param Tinebase_Model_Filter_FilterGroup
  * @param Tinebase_Model_Pagination $_pagination
  * @return array data
  * 
  * @todo move to converter
  * @todo get multiple grants at once
  */
 protected function _multipleRecordsToJson(Tinebase_Record_RecordSet $_records, $_filter = NULL, $_pagination = NULL)
 {
     $result = parent::_multipleRecordsToJson($_records, $_filter);
     foreach ($result as $idx => $recordArray) {
         $recordIdx = $_records->getIndexById($recordArray['id']);
         try {
             if (!is_object($_records[$recordIdx]->filters)) {
                 throw new Tinebase_Exception_UnexpectedValue('no filter group found');
             }
             $result[$idx]['filters'] = $_records[$recordIdx]->filters->toArray(TRUE);
         } catch (Exception $e) {
             if (Tinebase_Core::isLogLevel(Zend_Log::NOTICE)) {
                 Tinebase_Core::getLogger()->notice(__METHOD__ . '::' . __LINE__ . ' Skipping filter: ' . $e->getMessage());
             }
             unset($result[$idx]);
             continue;
         }
         // resolve grant users/groups
         if (isset($result[$idx]['grants'])) {
             $result[$idx]['grants'] = Tinebase_Frontend_Json_Container::resolveAccounts($result[$idx]['grants']);
             $result[$idx]['account_grants'] = Tinebase_PersistentFilter::getInstance()->getGrantsOfAccount(Tinebase_Core::getUser(), $_records[$recordIdx])->toArray();
         }
     }
     return array_values($result);
 }
 /**
  * testPersonalContainers
  * 
  * @see 0007098: personal containers of other users are shown below personal container node
  */
 public function testPersonalContainers()
 {
     $containerJson = new Tinebase_Frontend_Json_Container();
     $personalContainers = $containerJson->getContainer('Projects', 'personal', Tinebase_Core::getUser()->getId());
     $this->assertEquals(1, count($personalContainers), 'this should only return 1 personal container: ' . print_r($personalContainers, TRUE));
 }
 /**
  * test deleting container and the containing events
  * #6704: events do not disappear when shared calendar got deleted
  * https://forge.tine20.org/mantisbt/view.php?id=6704
  */
 public function testDeleteContainerAndEvents()
 {
     $fe = new Tinebase_Frontend_Json_Container();
     $container = $fe->addContainer('Calendar', 'testdeletecontacts', Tinebase_Model_Container::TYPE_SHARED, '');
     // test if model is set automatically
     $this->assertEquals($container['model'], 'Calendar_Model_Event');
     $date = new Tinebase_DateTime();
     $event = new Calendar_Model_Event(array('dtstart' => $date, 'dtend' => $date->subHour(1), 'summary' => 'bla bla', 'class' => 'PUBLIC', 'transp' => 'OPAQUE', 'container_id' => $container['id'], 'organizer' => Tinebase_Core::getUser()->contact_id));
     $event = Calendar_Controller_Event::getInstance()->create($event);
     $this->assertEquals($container['id'], $event->container_id);
     $fe->deleteContainer($container['id']);
     $e = new Exception('dummy');
     $cb = new Calendar_Backend_Sql();
     $deletedEvent = $cb->get($event->getId(), true);
     // record should be deleted
     $this->assertEquals($deletedEvent->is_deleted, 1);
     try {
         Calendar_Controller_Event::getInstance()->get($event->getId(), $container['id']);
         $this->fail('The expected exception was not thrown');
     } catch (Tinebase_Exception_NotFound $e) {
         // ok;
     }
     // record should not be found
     $this->assertEquals($e->getMessage(), 'Calendar_Model_Event record with id ' . $event->getId() . ' not found!');
 }