From b1f6cc27d16e784b65795adf2ae910a3e8f48443 Mon Sep 17 00:00:00 2001 From: Carlo Landmeter Date: Thu, 3 Mar 2011 08:37:16 +0100 Subject: add options to delete and edit repositories --- apk_browser.module | 91 ++++++++++++++++++++++++++++++++++++------------------ 1 file changed, 61 insertions(+), 30 deletions(-) (limited to 'apk_browser.module') diff --git a/apk_browser.module b/apk_browser.module index e9e664e..e53ce53 100644 --- a/apk_browser.module +++ b/apk_browser.module @@ -24,6 +24,12 @@ function apk_browser_menu() { 'page arguments' => array('apk_browser_settings'), 'access arguments' => array('access apk browser'), ); + $items['admin/config/apk_browser/repositories'] = array( + 'title' => 'Repositories', + 'description' => 'Configure APK repositories', + 'page callback' => 'apk_browser_repositories_list', + 'access arguments' => array('access apk browser'), + ); $items['admin/config/apk_browser/repositories/add'] = array( 'title' => 'Add repository', 'description' => 'Add repositoriy', @@ -31,11 +37,21 @@ function apk_browser_menu() { 'page arguments' => array('apk_browser_repository_edit_form'), 'access arguments' => array('access apk browser'), ); - $items['admin/config/apk_browser/repositories'] = array( - 'title' => 'Repositories', - 'description' => 'Configure APK repositories', - 'page callback' => 'apk_browser_repositories_list', + $items['admin/config/apk_browser/repositories/%/edit'] = array( + 'title' => 'Edit repository', + 'description' => 'Edit repositoriy', + 'page callback' => 'drupal_get_form', + 'page arguments' => array('apk_browser_repository_edit_form', 4), + 'access arguments' => array('access apk browser'), + 'access callback' => TRUE, + ); + $items['admin/config/apk_browser/repositories/%/delete'] = array( + 'title' => 'Delete repository', + 'description' => 'Delete repositoriy', + 'page callback' => 'drupal_get_form', + 'page arguments' => array('apk_browser_repository_delete_form', 4), 'access arguments' => array('access apk browser'), + 'access callback' => TRUE, ); return $items; } @@ -63,19 +79,28 @@ function apk_browser_settings($form) { return system_settings_form($form); } -/* - * function apk_browser_settings_validate($form, &$form_state) { - * if (!valid_url($form_state['values']['apk_repo_url'], TRUE)) { - * form_set_error('apk_repo_url', t('Please specify a valid URL!')); - * } - * } - */ +function apk_browser_repository_delete_form($form, &$form_state, $rid) { + $form['repo_id'] = array('#type' => 'hidden', '#value' => $rid); + return confirm_form($form, t('Are you sure you want to delete repository with ID @ID?', array('@ID' => $rid)), 'admin/config/apk_browser/repositories', t('This action cannot be undone.'), t('Delete repository'), t('Cancel')); +} + +function apk_browser_repository_delete_form_submit($form, &$form_state) { + $repos = variable_get('apk_repositories', array()); + unset($repos[$form_state['values']['repo_id']]); + variable_set('apk_repositories', array_values($repos)); + drupal_set_message(t('Repository deleted')); + $form_state['redirect'] = 'admin/config/apk_browser/repositories'; +} -function apk_browser_repository_edit_form($form, &$form_state) { +function apk_browser_repository_edit_form($form, &$form_state, $rid = array()) { + if (!empty($rid)) { + $form['repo_id'] = array('#type' => 'hidden', '#value' => $rid); + } $repo = taxonomy_vocabulary_machine_name_load('apk_repo'); $repo_tree = taxonomy_get_tree($repo->vid); $arch = taxonomy_vocabulary_machine_name_load('apk_arch'); $arch_tree = taxonomy_get_tree($arch->vid); + $repos = variable_get('apk_repositories', array()); if (empty($arch_tree) || empty($repo_tree)) { $form['warning'] = array( '#type' => 'item', @@ -91,7 +116,7 @@ function apk_browser_repository_edit_form($form, &$form_state) { '#type' => 'textfield', '#title' => t('Repository URL'), '#size' => '100', - '#default_value' => '', + '#default_value' => (empty($rid)) ? '' : $repos[$rid]['url'], '#description' => t('Link to the APKINDEX.tar.gz file inside the repository'), '#required' => TRUE, ); @@ -103,6 +128,7 @@ function apk_browser_repository_edit_form($form, &$form_state) { '#type' => 'select', '#options' => $repo_options, '#title' => 'Select repository', + '#default_value' => (empty($rid)) ? '' : $repos[$rid]['repo'], '#description' => t('Please make sure you select the correct repository. Preventing to do so will break package listing') ); @@ -112,14 +138,14 @@ function apk_browser_repository_edit_form($form, &$form_state) { $form['settings']['arch'] = array( '#type' => 'select', '#options' => $arch_options, + '#default_value' => (empty($rid)) ? '' : $repos[$rid]['arch'], '#title' => 'Select architecture', '#description' => t('Please make sure you select the correct architecture. Preventing to dox so will break package listing') ); - $form['submit'] = array( '#type' => 'submit', - '#value' => t('Add repository') + '#value' => t('Save repository') ); } return $form; @@ -129,34 +155,37 @@ function apk_browser_repository_edit_form_validate($form, &$form_state) { if (!valid_url($form_state['values']['apk_repo_url'], TRUE)) { form_set_error('apk_repo_url', t('Please specify a valid URL!')); } - foreach (variable_get('apk_repositories', array()) as $repo) { - if ($form_state['values']['apk_repo_url'] == $repo['url']) { - form_set_error('apk_repo_url', t('You are trying to add a double url')); - } - } + //foreach (variable_get('apk_repositories', array()) as $repo) { + // if ($form_state['values']['apk_repo_url'] == $repo['url']) { + // form_set_error('apk_repo_url', t('You are trying to add a double url')); + // } + // } } function apk_browser_repository_edit_form_submit($form, &$form_state) { - $repos[] = array( + $repos = array( 'url' => $form_state['values']['apk_repo_url'], 'arch' => $form_state['values']['arch'], 'repo' => $form_state['values']['repo'] ); - $current_repos = variable_get('apk_repositories', array()); - //$result = (empty($current_repos)) ? $repos : array_merge($repos, $current_repos); - variable_set('apk_repositories', array_merge($current_repos, $repos)); - $form_state['redirect'] = 'admin/config/apk_browser/repositories'; + $repo_db = variable_get('apk_repositories', array()); + isset($form_state['values']['repo_id']) ? ( $repo_db[$form_state['values']['repo_id']] = $repos) : ($repo_db[] = $repos); + variable_set('apk_repositories', $repo_db); drupal_set_message(t('Repositories are saved')); - //drupal_set_message(t('Submitting values: @values', array('@values' => var_export($result, TRUE)))); + $form_state['redirect'] = 'admin/config/apk_browser/repositories'; + //drupal_set_message(t('Submitting values: @values', array('@values' => var_export($form_state, TRUE)))); } function apk_browser_repositories_list() { $terms = ''; $header = array('ID', 'URL', 'Repo', 'Arch', array('data' => 'Manage', 'colspan' => '2')); - $add = l('', 'admin/config/apk_browser/repositories/add', array('html' => TRUE)); + $add = l('', 'admin/config/apk_browser/repositories/add', array('html' => TRUE)); foreach (variable_get('apk_repositories', array()) as $key => $repo) { - $edit = l('', 'somelink', array('html' => TRUE)); - $delete = l('', 'somelink', array('html' => TRUE)); + $edit = l('', 'admin/config/apk_browser/repositories/' . $key . '/edit', array('html' => TRUE)); + $delete = l('', 'admin/config/apk_browser/repositories/' . $key . '/delete', array('html' => TRUE)); $terms = ''; $terms .= '
'; $tarch = taxonomy_term_load($repo['arch']); @@ -164,7 +193,9 @@ function apk_browser_repositories_list() { $rows[] = array($key, $repo['url'], $trepo->name, $tarch->name, $edit, $delete); } if (!empty($rows)) { - return theme('table', array('header' => $header, 'rows' => $rows)); + $output = theme('table', array('header' => $header, 'rows' => $rows)); + $output .= $add; + return $output; } else { return t('No repositories added. Please add one.') . ' ' . $add; } -- cgit v1.2.3