/**
  * Static function to refresh src_org_cache from src_org
  *
  * @param Source|src_id|src_uuid $source
  * @return int number of rows cached
  */
 public static function refresh_cache($source)
 {
     $conn = AIR2_DBManager::get_master_connection();
     // get the src_id
     $src_id;
     if (is_numeric($source)) {
         $src_id = $source;
     } elseif (is_string($source)) {
         $q = 'select src_id from source where src_uuid = ?';
         $src_id = $conn->fetchOne($q, array($source), 0);
     } elseif (is_object($source)) {
         $src_id = $source->src_id;
     }
     // sanity!
     if (!$src_id) {
         Carper::carp("Source !exists");
         return;
     }
     // delete all src_org_cache recs for this source
     $conn->execute("delete from src_org_cache where soc_src_id = {$src_id}");
     // array of org_id => status
     $org_status = Source::get_authz_status($src_id);
     // bulk-insert
     $vals = array();
     foreach ($org_status as $org_id => $status) {
         $vals[] = "({$src_id},{$org_id},'{$status}')";
     }
     if (count($vals)) {
         $vals = implode(',', $vals);
         $stmt = "insert into src_org_cache (soc_src_id, soc_org_id, soc_status)";
         $conn->execute("{$stmt} values {$vals}");
     }
     return count($vals);
 }