Пример #1
0
 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);
 }