diff options
author | Carlo Landmeter <clandmeter@gmail.com> | 2011-03-01 15:07:48 +0100 |
---|---|---|
committer | Carlo Landmeter <clandmeter@gmail.com> | 2011-03-01 15:07:48 +0100 |
commit | d6b56d8cbe3ff0394bd19f8933744f20485a9e7b (patch) | |
tree | 540c7acbad307251334b9a9c20989b9e0eb0a227 /apk_browser.install | |
download | apk_browser-d6b56d8cbe3ff0394bd19f8933744f20485a9e7b.tar.bz2 apk_browser-d6b56d8cbe3ff0394bd19f8933744f20485a9e7b.tar.xz |
initial commit with working importer
some basic apk browser function like importer and some settings
still needs a lot of love
Diffstat (limited to 'apk_browser.install')
-rw-r--r-- | apk_browser.install | 205 |
1 files changed, 205 insertions, 0 deletions
diff --git a/apk_browser.install b/apk_browser.install new file mode 100644 index 0000000..0786389 --- /dev/null +++ b/apk_browser.install @@ -0,0 +1,205 @@ +<?php + +function apk_browser_install() { + /* + * Alpine packages are stored as nodes. + * To make sure we have content type we + * create it with hook install so its a + * system content type which cannot be + * deleted. + */ + // use get_t() to get the name of our localization function for translation + // during install, when t() is not available. + $t = get_t(); + //basic new node settings + $node_fields = array( + 'type' => 'apk', //machine name + 'name' => 'Alpine package', // human name + 'base' => 'node_content', //api callback + 'description' => $t('Content type to store Alpine Linux packages'), + 'title_label' => $t('Package'), + //'has_title' => FALSE + ); + //set missing defaults and save the node type + $content_type = node_type_set_defaults($node_fields); + node_type_save($content_type); + + /* + * Create all the fields and instances we are adding to our content type. + */ + foreach (_apk_browser_field_vars() as $name => $fvars) { + $cardinality = ($name == 'apk_depends') ? '-1' : '1'; + if (!field_info_field($name)) { + $field = array( + 'field_name' => $name, + 'cardinality' => $cardinality, + 'type' => 'text', + 'settings' => array( + 'max_length' => $fvars['length'], + ), + + ); + field_create_field($field); + } + // now all instances + if (!field_info_instance('node', $name, 'apk')) { + $instance = array( + 'field_name' => $name, + 'label' => $fvars['label'], + 'type' => 'text', + 'entity_type' => 'node', + 'bundle' => 'apk', + 'widget' => array( + 'type' => 'text_textfield', + ), + 'display' => array( + 'default' => array( + 'label' => 'inline' + ) + ) + ); + field_create_instance($instance); + } + } + + /* + * Create taxonamy vocab + * create table and asign it + */ + $vnames = array( + 'repo' => $t('Repository') , + 'arch' => $t('Architecture') + ); + foreach ($vnames as $vname => $desc) { + $fieldname = 'taxonomy_apk_' . $vname; + $machinename = 'apk_' . $vname; + $vedit = array( + 'name' => $desc, + 'description' => $t('@desc taxonomy', array('@desc' => $desc)), + 'machine_name' => $machinename + ); + if (taxonomy_vocabulary_save((object) $vedit)) { + if (!field_info_field($fieldname)) { + $field = array( + 'field_name' => $fieldname, + 'type' => 'taxonomy_term_reference', + //sets the number of terms which can be selected + 'cardinality' => '1', + 'settings' => array( + 'allowed_values' => array( + array( + 'vocabulary' => $machinename, + 'parent' => 0, + ), + ), + ), + ); + field_create_field($field); + } + if (!field_info_instance('node', $fieldname, 'taxonomy_term_reference')) { + $instance = array( + 'field_name' => $fieldname, + 'entity_type' => 'node', + 'label' => $desc, + 'bundle' => 'apk', + 'required' => TRUE, + 'widget' => array( + 'type' => 'options_select', + ) + ); + field_create_instance($instance); + } + } + } +} + +//cleanup database, removing all apk entries +function apk_browser_uninstall() { + $nfields = array_keys(_apk_browser_field_vars()); + /* delete all apk nodes. + * disabled because too slow + * $nodes = db_select('node') + * ->fields('node', array('nid')) + * ->condition('type', 'apk') + * ->execute() + * ->fetchAll(); + * foreach ($nodes as $node) { + * node_delete($node->nid); + * } + */ + //delete the content type + node_type_delete('apk'); + //delete the apk node fields + foreach ($nfields as $nfield) { + field_delete_field($nfield); + } + //delete all apk related instaces + $instances = field_info_instances('node', 'apk'); + foreach ($instances as $instance) { + field_delete_instance($instance, TRUE); + } + field_delete_field('taxonomy_apk_repo'); + field_delete_field('taxonomy_apk_arch'); + //delete taxonomy + $vocabulary = taxonomy_vocabulary_machine_name_load('apk_arch'); + if ($vocabulary) { + taxonomy_vocabulary_delete($vocabulary->vid); + } + $vocabulary = taxonomy_vocabulary_machine_name_load('apk_repo'); + if ($vocabulary) { + taxonomy_vocabulary_delete($vocabulary->vid); + } + db_delete('variable')->condition('name', 'apk_%%', 'LIKE')->execute(); +} + +/* + * functions which return apk browser + * structure and variables will be used + * for install and uninstall + */ + +function _apk_browser_field_vars() { + $t = get_t(); + //return array of fields variables + return array( +/* + * use node title as package name + 'apk_name' => array( + 'label' => $t('Package'), + 'length' => '255' + ), + */ + 'apk_checksum' => array( + 'label' => $t('Checksum'), + 'length' => '255' + ), + 'apk_version' => array( + 'label' => $t('Version'), + 'length' => '60' + ), + 'apk_size' => array( + 'label' => $t('Size'), + 'length' => '255' + ), + 'apk_isize' => array( + 'label' => $t('Installed size'), + 'length' => '255' + ), + 'apk_description' => array( + 'label' => $t('Description'), + 'length' => '1000' + ), + 'apk_url' => array( + 'label' => $t('URL'), + 'length' => '255' + ), + 'apk_license' => array( + 'label' => $t('License'), + 'length' => '25' + ), + 'apk_depends' => array( + 'label' => $t('Dependencies'), + 'length' => '2000' + ) + ); +} |