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