/** * 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)); } } }
/** * 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!'); }