. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT * SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER * IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /** * @file * Code for the Mica Networks module. */ include_once 'mica_networks.features.inc'; include_once drupal_get_path('module', 'mica_core') . '/mica_core.search.utils.inc'; /** * Implements hook_node_view() */ function mica_networks_node_view($node, $view_mode, $langcode) { if ($node->type === 'network') { _mica_networks_network_view($node, $view_mode, $langcode); } } function _mica_networks_network_view($node, $view_mode, $langcode) { // Show moderation state messages if we're on a node page. if (node_is_page($node) && $view_mode === 'banner_area' && empty($node->in_preview)) { workbench_moderation_messages('view', $node); } } /** * Implements hook_node_insert() */ function mica_networks_node_insert($node) { switch ($node->type) { case 'network': mica_core_create_node_menu($node, TRUE, FALSE, 0, 'networks'); break; } } /** * Implements hook_menu_local_tasks_alter(). */ function mica_networks_menu_local_tasks_alter(&$data, $router_item, $root_path) { $links = array(); if ($root_path === 'networks') { if (node_access('create', 'network')) { $node_type = node_type_load('network'); $links['add-network'] = array( '#theme' => 'menu_local_action', '#link' => array( 'title' => t('Add a !name', array('!name' => $node_type->name)), 'href' => 'node/add/network', ), ); } } $data['actions']['output'] = array_merge($data['actions']['output'], $links); } /** * Creates default content after Features successfully installed * Implements hook_features_rebuild_completed() */ function mica_networks_features_rebuild_completed() { if (!variable_get('mica_networks_features_rebuild_completed', FALSE)) { $menu = mica_core_create_menu(st('Networks'), 'networks', 'networks', FALSE, FALSE, 6); mica_core_set_menu_option('network', $menu['mlid']); _mica_networks_configure_permissions(); _mica_networks_add_networks_to_studies_index(); _mica_networks_configure_message(); variable_set('mica_networks_features_rebuild_completed', TRUE); } } function _mica_networks_add_networks_to_studies_index() { cache_clear_all(); $index = search_api_index_load('studies_index', TRUE); $options = $index->options; $fields = $options['fields']; $fields['field_networks'] = array( 'type' => 'list', 'entity_type' => 'node', ); $ret = search_api_index_edit_fields($index->id, $fields); if ($ret) { $index->reindex(); watchdog('mica', 'Networks field was successfully added to Studies index', array(), WATCHDOG_INFO); } else { watchdog('mica', 'Failed to add Networks field to Studies index', array(), WATCHDOG_ERROR); } cache_clear_all(); $searcher = 'search_api@' . $index->machine_name; $facet = facetapi_facet_load('field_networks', $searcher); if ($facet) { $adapter = facetapi_adapter_load($searcher); $realms = facetapi_get_realm_info(); foreach ($realms as $realm_name => $realm) { $delta = facetapi_hash_delta(facetapi_build_delta($searcher, $realm_name, $facet['name'])); $settings = $adapter->getFacet($facet)->getSettings($realm); $settings->settings['widget'] = 'facetapi_checkbox_links'; ctools_export_crud_save('facetapi', $settings); if (facetapi_save_facet_enabled($adapter, $realm, $facet)) { mica_core_enable_facet_block($delta, t('Networks'), 'studies-search'); } } } } function _mica_networks_configure_message() { $msg = t('Mica Networks module was successfully enabled. To complete configuration, go to:'); $msg .= ''; drupal_set_message($msg, 'status', FALSE); watchdog('mica', $msg, array(), WATCHDOG_INFO); } function _mica_networks_configure_permissions() { watchdog('mica', 'Configure Networks custom permissions', array(), WATCHDOG_DEBUG); _mica_networks_configure_role_permissions('network reviewer', array( 'access workbench' => TRUE, 'view moderation history' => TRUE, 'view moderation messages' => TRUE, 'use workbench_moderation my drafts tab' => TRUE, 'use workbench_moderation needs review tab' => TRUE, 'moderate content from draft to needs_review' => TRUE, 'moderate content from needs_review to draft' => TRUE, 'moderate content from needs_review to published' => TRUE, ) ); _mica_networks_configure_role_permissions('network administrator', array( 'access workbench' => TRUE, 'view moderation history' => TRUE, 'view moderation messages' => TRUE, 'use workbench_moderation my drafts tab' => TRUE, 'moderate content from draft to needs_review' => TRUE, 'moderate content from needs_review to draft' => TRUE, ) ); } function _mica_networks_configure_role_permissions($role_name, $permissions) { $role = user_role_load_by_name($role_name); if ($role) { user_role_change_permissions($role->rid, $permissions); } } /** * When creating networks via noderefcreate, set the complete name form the title because of auto_node_title * Implements hook_noderefcreate_alter() */ function mica_networks_noderefcreate_alter(&$newnode, $element, $form_state) { $wrapper = entity_metadata_wrapper('node', $newnode); $wrapper->field_complete_name->set($wrapper->title->value()); }