function getList($source = '', $categories = array(), $profilename = '') { $installer = new Tiki_Profile_Installer(); $list = array(); $sources = $this->getSources(); foreach ($sources as $s) { if ($source && $s['url'] != $source) { continue; } if (!$s['lastupdate']) { continue; } $fp = fopen($this->getCacheLocation($s['url']), 'r'); while (false !== ($row = fgetcsv($fp, 200, "\t"))) { if (count($row) != 3) { continue; } list($c, $t, $i) = $row; $key = "{$s['url']}#{$i}"; if ($profilename && stripos($i, $profilename) === false) { continue; } if (array_key_exists($key, $list)) { $list[$key]['categories'][] = $c; } else { $list[$key] = array('domain' => $s['domain'], 'categories' => array($c), 'name' => $i, 'installed' => $installer->isKeyInstalled($s['domain'], $i)); } } fclose($fp); // Apply category filter foreach ($list as $pkey => $profile) { $in = true; // If there are no required categories, don't filter anything. if (!empty($categories)) { foreach ($categories as $category) { $in = false; // Start assuming this required category isn't in this profile's categories foreach ($profile['categories'] as $pcategory) { if ($category == $pcategory) { $in = true; break; } } if (!$in) { break; } } } if (!$in) { unset($list[$pkey]); } } } return array_values($list); }