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()); } } }