1) $result = sprintf( "%d days and %s", $tmp, $result ); elseif ($tmp == 1) $result = sprintf( "%d day and %s", $tmp, $result ); else $printed_conjunction = false; $val = floor($val / 7); if ($val == 0) return $result; if ($printed_conjunction) $result = sprintf( ", %s", $result ); else $result = sprintf( " and %s", $result ); if ($val>1) $result = sprintf( "%d weeks%s", $val, $result ); else $result = sprintf( "%d week%s", $val, $result ); return $result; }; function git_url($repository,$type,$commit,$path,$line = null,$commit_is_hash = null) { global $git_available; if (!isset($git_available)) { $git_available = apcu_fetch('git_available', $apcu_success); if ($apcu_success == false) { $git_available = preg_match( "/ 200 OK$/", get_headers("https://git.archlinux32.org/archlinux32/packages")[0] ); apcu_store('git_available', $git_available, 120); }; $git_available = $git_available == 1; } if (!isset($commit_is_hash)) $commit_is_hash = preg_match("/^[0-9a-f]{40}$/",$commit)==1; if ($git_available) { if (isset($line)) $line = "#L" . $line; else $line = ""; if ($commit_is_hash) $commit = "commit/" . $commit; else $commit = "branch/" . $commit; switch ($type) { case "tree": return "https://git.archlinux32.org/archlinux32/" . $repository . "/src/" . $commit . "/" . $path . $line; case "log": return "https://git.archlinux32.org/archlinux32/" . $repository . "/commits/" . $commit . "/" . $path . $line; } } else { if (isset($line)) $line = "#n" . $line; else $line = ""; if ($commit_is_hash) $commit = "?id=" . $commit; else $commit = "?h=" . $commit; switch ($type) { case "tree": return "https://git2.archlinux32.org/Archlinux32/" . $repository . "/tree/" . $path . $commit . $line; case "log": return "https://git2.archlinux32.org/Archlinux32/" . $repository . "/log/" . $path . $commit . $line; } }; }; function if_unset($array, $index, $default) { if (isset($array[$index])) return $array[$index]; else return $default; }; function site_is_reachable($url) { $stream_context = stream_context_create(array('timeout' => 10)); $headers = get_headers($url, 0, $stream_context); if (is_array($headers)) foreach ($headers as $header) { if (!(strpos($header, 'HTTP/') === 0)) continue; if (explode(' ', $header)[1] == '200') return true; return false; } return false; } function add_fancy_unit($value, $unit) { $suffixes = array("z", "y", "a", "f", "p", "n", "ยต", "m", "", "k", "M", "G", "T", "P", "Y", "Z"); if ($value==0) return $value . " " . $unit; $exponent = max(0,min(count($suffixes)-1,round(log(abs($value))/log(1024)-1))); return sprintf("%.2f %s%s", $value / pow(1024,$exponent), $suffixes[8 + $exponent], $unit); } function parse_package_filename($filename, $repo = NULL) { if (! preg_match( '/^(\S+)-(([^-:]+):)?([^-:]+)-([^-]+)-([^-]+)\.pkg\.tar\.xz$/', $filename, $matches )) return; $result = array( 'pkgname' => $matches[1], 'pkgver' => $matches[4], 'pkgrel' => $matches[5], 'arch' => $matches[6] ); if (!empty($repo)) $result['repo'] = $repo; if (empty($matches[3])) $result['epoch'] = '0'; else $result['epoch'] = $matches[3]; return $result; } function find_upstream_packages_in($repo) { $parse_package_filename_in_repo = function($filename) use ($repo) { return parse_package_filename($filename, $repo); }; return array_map( $parse_package_filename_in_repo, explode( "\n", shell_exec( "tar -Oxzf /var/lib/pacman/sync/" . $repo . ".db" . " | grep -xFA1 '%FILENAME%'" . " | grep -vxF '%FILENAME%\n--'" ) ) ); } function available_upstream_packages($columns = NULL) { $available_upstream_packages = apcu_fetch('available_upstream_packages', $apcu_success); if ($apcu_success == false) { $available_upstream_packages_repowise = array_map( 'find_upstream_packages_in', array( 'core', 'extra', 'community' ) ); $available_upstream_packages = array(); foreach ($available_upstream_packages_repowise as $sub_array) $available_upstream_packages = array_merge( $available_upstream_packages, $sub_array ); apcu_store('available_upstream_packages', $available_upstream_packages, 1800); } if (!isset($columns)) return $available_upstream_packages; if (!is_array($columns)) return array_column($available_upstream_packages, $columns); $select_columns_of_interest = function($row) use ($columns) { $select = function($column) use ($row) { return $row[$column]; }; return array_combine( $columns, array_map( $select, $columns ) ); }; return array_map( $select_columns_of_interest, $available_upstream_packages ); }