'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'), ); //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) { if (!field_info_field($name)) { $field = array( 'field_name' => $name, 'cardinality' => (isset($fvars['cdl'])) ? $fvars['cdl'] : '1', 'type' => (isset($fvars['type'])) ? $fvars['type'] : 'text', ); if (isset($fvars['settings'])) { $field['settings'] = $fvars['settings']; } field_create_field($field); } // now all instances if (!field_info_instance('node', $name, 'apk')) { $instance = array( 'field_name' => $name, 'label' => $fvars['label'], 'entity_type' => 'node', 'bundle' => 'apk', 'widget' => array( 'type' => (isset($fvars['widget'])) ? $fvars['widget'] : '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 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( 'apk_checksum' => array( 'label' => $t('Checksum') ), 'apk_version' => array( 'label' => $t('Version') ), 'apk_size' => array( 'label' => $t('Size') ), 'apk_installed_size' => array( 'label' => $t('Installed size') ), 'apk_description' => array( 'label' => $t('Description'), 'settings' => array('max_length' => '1000') ), 'apk_url' => array( 'label' => $t('URL'), ), 'apk_license' => array( 'label' => $t('License') ), 'apk_origin' => array( 'label' => $t('Origin') ), 'apk_build_time' => array( 'label' => $t('Build date'), 'type' => 'datestamp', 'widget' => 'date_text' ), 'apk_commit' => array( 'label' => $t('Commit') ), 'apk_maintainer' => array( 'label' => $t('Maintainer'), ), 'apk_depends' => array( 'label' => $t('Dependencies'), 'cdl' => '-1' ), 'apk_install_if' => array( 'label' => $t('Install if'), 'cdl' => '-1' ) ); }