Example #1
0
 public function searchByPackageNameAndDescription($searchArray)
 {
     $tmpLocal = $this->repo_list['local'];
     $packages_available_to_install = array();
     $packages_available_to_install_in_aur = array();
     $repoCount = 0;
     // First known repositories
     foreach ($this->repo_list as $repo => $repoData) {
         if ($repo == 'local' || strlen($GLOBALS['active_repos']) && false === strpos($GLOBALS['active_repos'], ',' . $repo . ',')) {
             continue;
         }
         $firstCoincidence = true;
         foreach ($repoData as $packageData) {
             if (PacmanData::checkIfSearchMatches($searchArray, $packageData)) {
                 if ($firstCoincidence) {
                     $firstCoincidence = false;
                     $currRepoColor = $GLOBALS['repoColors'][$repoCount % count($GLOBALS['repoColors'])];
                     $repoCount++;
                 }
                 $packages_available_to_install[] = $repo . '/' . $packageData['name'];
                 $index = count($packages_available_to_install);
                 if ($packageData['installed'] !== 'false') {
                     if ($packageData['version'] == $this->installed_packages[$packageData['name']]['version']) {
                         sendMessage('packageInfoListInstalled', array('%c' => $index, '%z' => $currRepoColor, '%r' => $repo, '%p' => $packageData['name'], '%v' => $packageData['version'], '%d' => $packageData['desc'], '%i' => $packageData['installed'], '%s' => ''));
                     } else {
                         sendMessage('packageInfoListOtherInstalled', array('%c' => $index, '%z' => $currRepoColor, '%r' => $repo, '%p' => $packageData['name'], '%v' => $packageData['version'], '%d' => $packageData['desc'], '%i' => $packageData['installed'], '%s' => ''));
                     }
                 } else {
                     sendMessage('packageInfoListNotInstalled', array('%c' => $index, '%z' => $currRepoColor, '%r' => $repo, '%p' => $packageData['name'], '%v' => $packageData['version'], '%d' => $packageData['desc'], '%i' => '', '%s' => ''));
                 }
             }
         }
     }
     if (!$GLOBALS['NO_AUR']) {
         PacmanData::searchInAur($searchArray);
         $currRepoColor = $GLOBALS['repoColors'][$repoCount % count($GLOBALS['repoColors'])];
         $repoCount++;
         $repo = 'aur';
         foreach ($GLOBALS['aur_matches'] as $packageName => $packageData) {
             $packages_available_to_install_in_aur[] = $repo . '/' . $packageData['name'];
             $index = count($packages_available_to_install) + count($packages_available_to_install_in_aur);
             if ($this->installed_packages[$packageName]) {
                 $packageData['installed'] = $this->installed_packages[$packageName]['version'];
                 unset($tmpLocal[$packageName]);
             }
             if ($packageData['installed'] !== 'false') {
                 if ($packageData['version'] == $packageData['installed']) {
                     sendMessage('packageInfoListInstalled', array('%c' => $index, '%z' => $currRepoColor, '%r' => $repo, '%p' => $packageData['name'], '%v' => $packageData['version'], '%d' => $packageData['desc'], '%i' => $packageData['installed'], '%s' => $packageData['safe']));
                 } else {
                     sendMessage('packageInfoListOtherInstalled', array('%c' => $index, '%z' => $currRepoColor, '%r' => $repo, '%p' => $packageData['name'], '%v' => $packageData['version'], '%d' => $packageData['desc'], '%i' => $packageData['installed'], '%s' => $packageData['safe']));
                 }
             } else {
                 sendMessage('packageInfoListNotInstalled', array('%c' => $index, '%z' => $currRepoColor, '%r' => $repo, '%p' => $packageData['name'], '%v' => $packageData['version'], '%d' => $packageData['desc'], '%i' => '', '%s' => $packageData['safe']));
             }
         }
     }
     // Then local repository
     foreach ($tmpLocal as $packageName => $packageData) {
         if (PacmanData::checkIfSearchMatches($searchArray, $packageData)) {
             sendMessage('packageInfoListInstalled', array('%c' => '', '%z' => '', '%r' => '_NO_REPO_', '%p' => $packageData['name'], '%v' => $packageData['version'], '%d' => $packageData['desc'], '%i' => '', '%s' => ''));
         }
     }
     if (!$GLOBALS['NO_PROMP']) {
         if (count($packages_available_to_install) || count($packages_available_to_install_in_aur)) {
             sendMessage('choosePackages', array());
             $input = readline('==: ');
             $input = split("[\n\r\t ]+", $input);
             if (count($input)) {
                 $packages_to_install = '';
                 $packages_to_install_in_aur = '';
                 foreach ($input as $package_to_install) {
                     if ($package_to_install <= count($packages_available_to_install)) {
                         $packages_to_install .= $packages_available_to_install[$package_to_install - 1] . ' ';
                     } else {
                         $packages_to_install_in_aur .= $packages_available_to_install_in_aur[$package_to_install - count($packages_available_to_install) - 1] . ' ';
                     }
                 }
                 if (preg_match('/\\w+/', $packages_to_install)) {
                     sendMessage('callingPacman', array());
                     call('su -c "pacman -S ' . $packages_to_install . '"');
                 }
                 if (preg_match('/\\w+/', $packages_to_install_in_aur)) {
                     sendMessage('callingYaourt', array());
                     call('yaourt -S ' . $packages_to_install_in_aur);
                 }
             }
         } else {
             sendMessage('nothingToInstall', array());
         }
     }
 }