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