/** * Load data for html printing * * @param type $uuid * @param type $base_rs */ protected function show_print_html($uuid, $base_rs) { $bin = AIR2_Record::find('Bin', $uuid); $base_rs['sources'] = array(); // authorized sources $authz_sources = array(); $q = Doctrine_Query::create()->from('BinSource bs'); $q->leftJoin('bs.Source s'); $q->where('bs.bsrc_bin_id = ?', $bin->bin_id); $q->select('bs.bsrc_src_id, s.src_uuid'); BinSource::query_may_read($q, $this->user, 'bs'); $bsrcs = $q->fetchArray(); foreach ($bsrcs as $bsrc) { $authz_sources[$bsrc['Source']['src_uuid']] = true; } // only keep fetching if there is stuff to get $authz_responses = array(); if (count($authz_sources) > 0) { $q = Doctrine_Query::create()->from('BinSrcResponseSet bs'); $q->leftJoin('bs.SrcResponseSet s'); $q->where('bs.bsrs_bin_id = ?', $bin->bin_id); $q->select('bs.bsrs_srs_id, s.srs_uuid'); BinSrcResponseSet::query_may_read($q, $this->user, 'bs'); $bsrss = $q->fetchArray(); foreach ($bsrss as $bsrs) { $authz_responses[$bsrs['SrcResponseSet']['srs_uuid']] = true; } // let perl do the heavy lifting $binsources = CallPerl::exec('AIR2::Bin->flatten', $bin->bin_id); foreach ($binsources as $src) { $src_uuid = $src['src_uuid']; if (isset($authz_sources[$src_uuid])) { // apply authz to responses if (is_array($src['response_sets'])) { foreach ($src['response_sets'] as $idx => $srs) { $srs_uuid = $srs['srs_uuid']; if (!isset($authz_responses[$srs_uuid])) { unset($src['response_sets'][$idx]); } } $src['response_sets'] = array_values($src['response_sets']); } // add as value $authz_sources[$src_uuid] = $src; } } } // reorganize for the print view $raw = array('bin' => $base_rs['radix'], 'sources' => array_values($authz_sources)); $this->airoutput->view = 'print/bin'; $this->response($raw); }
/** * Read - bin readable, and source readable * * @param User $user * @return boolean */ public function user_may_read($user) { if ($user->is_system()) { return AIR2_AUTHZ_IS_SYSTEM; } if ($this->Bin->user_may_read($user)) { if ($this->Source->user_may_read($user)) { return AIR2_AUTHZ_IS_ORG; } // check bin_src_response_sets for this source $q = Doctrine_Query::create()->from('BinSrcResponseSet'); $q->andWhere('bsrs_bin_id = ?', $this->bsrc_bin_id); $q->andWhere('bsrs_src_id = ?', $this->bsrc_src_id); BinSrcResponseSet::query_may_read($q, $user); if ($q->count() > 0) { return AIR2_AUTHZ_IS_PROJECT; } } return AIR2_AUTHZ_IS_DENIED; }