summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--apk_browser.module99
1 files changed, 76 insertions, 23 deletions
diff --git a/apk_browser.module b/apk_browser.module
index d05e294..39b4e49 100644
--- a/apk_browser.module
+++ b/apk_browser.module
@@ -582,7 +582,7 @@ function apk_browser_preprocess_node(&$vars) {
}
}
-function apk_browser_origin_table() {
+function apk_browser_origin_list() {
//Get a loaded object from a router item.
$node = menu_get_object();
//Some older packages are missing origin field.
@@ -601,7 +601,7 @@ function apk_browser_origin_table() {
':arch' => $node->taxonomy_apk_arch['und']['0']['tid'],
':repo' => $node->taxonomy_apk_repo['und']['0']['tid']
)
- )->fetchCol();
+ )->fetchCol();
if ($rows) {
foreach ($rows as $key => $row) {
$link = l($row, 'apk/' .
@@ -609,36 +609,89 @@ function apk_browser_origin_table() {
$node->taxonomy_apk_arch['und']['0']['taxonomy_term']->name . '/' .
$row
);
- $list['items'][]['data'] = $link;
+ $list['items'][]['data'] = $link;
}
- $table['attributes']['id'] = 'same-origin';
return theme('item_list', $list);
}
}
return FALSE;
}
+function apk_browser_reverse_depends() {
+ $node = menu_get_object();
+ $rows = db_query("
+ SELECT node.title
+ FROM {node}
+ LEFT JOIN {field_data_apk_depends} as deps ON (node.nid = deps.entity_id)
+ LEFT JOIN {field_data_taxonomy_apk_arch} as arch ON (node.nid = arch.entity_id)
+ LEFT JOIN {field_data_taxonomy_apk_repo} as repo ON (node.nid = repo.entity_id)
+ WHERE deps.apk_depends_value = :deps
+ AND arch.taxonomy_apk_arch_tid = :arch
+ AND repo.taxonomy_apk_repo_tid = :repo
+ AND node.status = '1'
+ ", array(
+ ':deps' => $node->title,
+ ':arch' => $node->taxonomy_apk_arch['und']['0']['tid'],
+ ':repo' => $node->taxonomy_apk_repo['und']['0']['tid']
+ )
+ )->fetchCol();
+ if ($rows) {
+ foreach ($rows as $key => $row) {
+ $link = l($row, 'apk/' .
+ $node->taxonomy_apk_repo['und']['0']['taxonomy_term']->name . '/' .
+ $node->taxonomy_apk_arch['und']['0']['taxonomy_term']->name . '/' .
+ $row
+ );
+ $list['items'][]['data'] = $link;
+ }
+ return theme('item_list', $list);
+ } else {
+ return FALSE;
+ }
+}
+
function apk_browser_block_info() {
- $blocks['apk_browser_origin'] = array(
- 'info' => t('Packages with same origin'),
- 'visibility' => BLOCK_VISIBILITY_LISTED,
- // This block should only display on pages starting with apk.
- 'pages' => 'apk/*'
- );
- return $blocks;
+ $blocks['apk_browser_origin'] = array(
+ 'info' => t('Packages with same origin'),
+ 'visibility' => BLOCK_VISIBILITY_LISTED,
+ // This block should only display on pages starting with apk.
+ 'pages' => 'apk/*'
+ );
+ $blocks['apk_browser_reverse_depends'] = array(
+ 'info' => t('Package reverse dependicies'),
+ 'visibility' => BLOCK_VISIBILITY_LISTED,
+ 'pages' => 'apk/*'
+ );
+ return $blocks;
}
function apk_browser_block_view($delta = '') {
- //The $delta parameter tells us which block is being requested.
- switch ($delta) {
- case 'apk_browser_origin':
- // Title of the block
- $block['subject'] = t('Same origin');
- // content of the block
- $table = apk_browser_origin_table();
- $block['content'] = ($table) ? $table : FALSE;
- break;
- }
- //return FALSE will disable the block from display
- return ($block['content']) ? $block : FALSE;
+ $js = 'jQuery(document).ready(function() {
+ jQuery(".block-apk-browser .block-content").hide();
+ jQuery(".block-apk-browser .block-title").click(function()
+ { jQuery(this).next(".block-apk-browser .block-content").slideToggle(500);
+ return FALSE;
+ });
+ });';
+ //The $delta parameter tells us which block is being requested.
+ switch ($delta) {
+ case 'apk_browser_origin':
+ $origin = apk_browser_origin_list();
+ if ($origin) {
+ $block['subject'] = t('Same origin');
+ $block['content'] = $origin;
+ }
+ break;
+ case 'apk_browser_reverse_depends':
+ $revdep = apk_browser_reverse_depends();
+ if ($revdep) {
+ $block['subject'] = t('Reverse dependecies');
+ $block['content'] = $revdep;
+ }
+ }
+ // If one of the functions above returns true, we add collapse script
+ if (($origin) || ($revdep)) {
+ drupal_add_js($js, 'inline');
+ }
+ return ($block['content']) ? $block : FALSE;
}