/** * (non-PHPdoc) * @see Tinebase_Controller_Record_Abstract::_addDefaultFilter() */ protected function _addDefaultFilter(Tinebase_Model_Filter_FilterGroup $_filter = NULL) { $manageShared = Tinebase_Core::getUser()->hasRight('Sipgate', Sipgate_Acl_Rights::MANAGE_SHARED_ACCOUNTS); $managePrivate = Tinebase_Core::getUser()->hasRight('Sipgate', Sipgate_Acl_Rights::MANAGE_PRIVATE_ACCOUNTS); $manage = Tinebase_Core::getUser()->hasRight('Sipgate', Sipgate_Acl_Rights::MANAGE_ACCOUNTS); $fg = new Sipgate_Model_LineFilter(array(), 'OR'); // fetch all assignes lines $my = new Tinebase_Model_Filter_Id(array('field' => 'user_id', 'operator' => 'equals', 'value' => Tinebase_Core::getUser()->getId())); $my->setIsImplicit(true); $fg->addFilter($my); if ($manage) { // fetch all private accounts of the user himself if ($managePrivate) { $accountFilter = new Sipgate_Model_AccountFilter(array(), 'AND'); $accountFilter->addFilter(new Tinebase_Model_Filter_Text(array('field' => 'type', 'operator' => 'equals', 'value' => 'private'))); $r = Sipgate_Controller_Account::getInstance()->search($accountFilter); if ($r->count()) { $f = new Tinebase_Model_Filter_Id(array('field' => 'account_id', 'operator' => 'in', 'value' => $r->id)); $f->setIsImplicit(true); $fg->addFilter($f); } } // fetch shared accounts if ($manageShared) { $accountFilter = new Sipgate_Model_AccountFilter(array(), 'AND'); $accountFilter->addFilter(new Tinebase_Model_Filter_Text(array('field' => 'type', 'operator' => 'equals', 'value' => 'shared'))); $r = Sipgate_Controller_Account::getInstance()->searchRightsLess($accountFilter); if ($r->count()) { $f = new Tinebase_Model_Filter_Id(array('field' => 'account_id', 'operator' => 'in', 'value' => $r->id)); $f->setIsImplicit(true); $fg->addFilter($f); } } } $_filter->addFiltergroup($fg); }
/** * returns record prepared for json transport * * @param Tinebase_Record_Interface $_record * @return array record data */ protected function _recordToJson($_record) { switch (get_class($_record)) { case 'Sipgate_Model_Account': $filter = new Sipgate_Model_LineFilter(array(), 'AND'); $filter->addFilter(new Tinebase_Model_Filter_Id(array('field' => 'account_id', 'operator' => 'equals', 'value' => $_record->id))); $_record->lines = $this->_multipleRecordsToJson(Sipgate_Controller_Line::getInstance()->search($filter)); break; case 'Sipgate_Model_Line': Tinebase_User::getInstance()->resolveUsers($_record, $this->_resolveUserFields['Sipgate_Model_Line']); $_record->account_id = Sipgate_Controller_Account::getInstance()->get($_record->account_id); break; } return parent::_recordToJson($_record); }
/** * inspects delete action * * @param array $_ids * @return array of ids to actually delete */ protected function _inspectDelete(array $_ids) { if (!is_array($_ids)) { $_ids = array($_ids); } $filter = new Sipgate_Model_LineFilter(array(), 'OR'); foreach ($_ids as $id) { $filter->addFilter(new Tinebase_Model_Filter_Text(array('field' => 'account_id', 'operator' => 'equals', 'value' => $id))); } Sipgate_Controller_Line::getInstance()->deleteByFilter($filter); return $_ids; }