type, 0) && count($node->locations) < variable_get('location_maxnum_'. $node->type, 0) && !$teaser && node_access('update', $node)) { $node->content['location_addanother'] = array( '#type' => 'markup', '#value' => drupal_get_form('location_addanother_form', $node), ); } break; } } /** * Implementation of hook_form_alter(). */ function location_addanother_form_alter($form_id, &$form) { if ($form_id == 'node_type_form') { $type = $form['#node_type']->type; $form['location']['multiple_locations']['location_addanother'] = array( '#type' => 'checkbox', '#title' => t('Add another location from node view page'), '#default_value' => variable_get('location_addanother_'. $type, 0), '#description' => t('Display the "Add another location" option on the node view page.'), ); } } /** * Form to display directly on a node view for "quick location add" functionality. */ function location_addanother_form(&$node) { $settings = variable_get('location_fields_'. $node->type, array()); $form['location'] = array( '#type' => 'location_element', '#title' => t('Add another location'), '#default_value' => NULL, '#location_settings' => $settings, '#collapsible' => TRUE, '#collapsed' => TRUE, ); $form['location']['nid'] = array( '#type' => 'hidden', // @@@ See if we can get away with value-ing this. '#value' => $node->nid, ); $form['location']['submit'] = array( '#type' => 'submit', '#value' => t('Add location'), '#weight' => 50, ); return $form; } /** * Validation function for "add another location" form. */ function location_addanother_form_validate($form_id, &$form_values) { $location = $form_values['location']; $node = node_load($location['nid']); unset($location['nid']); if (!(variable_get('location_addanother_'. $node->type, 0) && count($node->locations) < variable_get('location_maxnum_'. $node->type, 0) && node_access('update', $node))) { form_set_error('location', t("You don't have permission to add a location to this node, or the node has the maximum number of locations already.")); } } /** * Submission function for "add another location" form. */ function location_addanother_form_submit($form_id, &$form_values) { $location = $form_values['location']; $node = node_load($location['nid']); unset($location['nid']); // As this is always a new location, no need to delete anything first... $lid = location_save($location, TRUE); if ($lid) { db_query('INSERT INTO {location_instance} (nid, vid, lid) VALUES (%d, %d, %d)', $node->nid, $node->vid, $lid); drupal_set_message(t('Your new location has been added. (See below)')); } return 'node/'. $node->nid; } /** * Implementation of hook_node_type(). * Synchronize our settings. */ function location_addanother_node_type($op, $info) { switch ($op) { case 'delete': variable_del('location_addanother_'. $info->type); break; case 'update': if (!empty($info->old_type) && $info->old_type != $info->type) { $setting = variable_get('location_addanother_'. $info->old_type, 0); variable_del('location_addanother_'. $info->old_type); variable_set('location_addanother_'. $info->type, $setting); } break; } }