word_link.admin.inc in Word Link 7
Same filename and directory in other branches
Administrative pages for the Word Link module.
File
word_link.admin.incView source
<?php
/**
* @file
* Administrative pages for the Word Link module.
*/
/**
* Form builder for a settings page.
*/
function word_link_admin_settings() {
$form['#tree'] = TRUE;
$form['word_link_settings'] = array(
'#type' => 'fieldset',
'#title' => t('Settings'),
'#collapsible' => FALSE,
);
$form['word_link_settings']['word_link_node_types'] = array(
'#type' => 'fieldset',
'#title' => t('Node types'),
'#description' => t('Choose the fields into which Word Link will automatically insert links.'),
'#collapsible' => TRUE,
'#collapsed' => FALSE,
);
// Get all node types.
$node_types = node_type_get_names();
$type_defaults = variable_get('word_link_node_types', array());
foreach ($type_defaults as $content => $type) {
$types = array();
foreach ($type['fields'] as $name => $field) {
if (!is_array($field)) {
$types[$field] = $field;
}
else {
foreach ($field as $fc_field) {
$types[$name . '__' . $fc_field] = $name . '__' . $fc_field;
}
}
}
$type_defaults[$content]['fields'] = isset($types) ? $types : array();
}
foreach ($node_types as $type => $name) {
$fields = word_link_get_node_fields($type);
if (!empty($fields)) {
if (module_exists('comment')) {
$fields['comments'] = t('Comments');
}
$default_values = isset($type_defaults[$type]['fields']) ? $type_defaults[$type]['fields'] : array();
$default_values = is_array($default_values) ? array_filter($default_values) : array();
$form['word_link_settings']['word_link_node_types'][$type] = array(
'#type' => 'fieldset',
'#title' => $name,
'#collapsible' => TRUE,
'#collapsed' => empty($default_values),
);
$form['word_link_settings']['word_link_node_types'][$type]['fields'] = array(
'#type' => 'select',
'#options' => $fields,
'#multiple' => TRUE,
'#tree' => TRUE,
'#default_value' => $default_values,
);
}
}
$form['word_link_settings']['word_link_css'] = array(
'#type' => 'checkbox',
'#title' => t('Add default CSS'),
'#description' => t('If turned on default CSS from module will be added.'),
'#default_value' => variable_get('word_link_css', 1),
);
$form['word_link_settings']['word_link_highlight'] = array(
'#type' => 'checkbox',
'#title' => t('Highlight words.'),
'#description' => t('Highlight found words instead of replace it to links.'),
'#default_value' => variable_get('word_link_highlight', 0),
);
$form['word_link_settings']['word_link_limit'] = array(
'#type' => 'textfield',
'#size' => 5,
'#maxlenghth' => 3,
'#title' => t('Convert limit'),
'#description' => t('Set the maxium instances that will be converted. Use 0 if you want all instances in the node to be converted.'),
'#default_value' => variable_get('word_link_limit', 0),
);
$form['word_link_settings']['word_link_tags_except'] = array(
'#type' => 'textfield',
'#title' => t('Disallowed HTML tags'),
'#description' => t('A list of HTML tags that will be ignored. Never enter here tags that are not text. E.g. @tags.', array(
'@tags' => '<img>',
)),
'#default_value' => variable_get('word_link_tags_except', '<h1> <h2> <h3> <h4> <h5> <h6>'),
);
$form['word_link_add_form']['save'] = array(
'#type' => 'submit',
'#value' => t('Save'),
);
return $form;
}
/**
* Form validation for a settings page.
*/
function word_link_admin_settings_validate($form, &$form_state) {
$limit = $form_state['values']['word_link_settings']['word_link_limit'];
if (!is_numeric($limit) || (int) $limit < 0) {
form_set_error('word_link_settings][word_link_limit', t('Replace limit must be numeric.'));
}
}
/**
* Submit form for a settings page.
*/
function word_link_admin_settings_submit($form, &$form_state) {
$types = $form_state['values']['word_link_settings']['word_link_node_types'];
foreach ($form_state['values']['word_link_settings']['word_link_node_types'] as $content => $type) {
$fields = array();
foreach ($type['fields'] as $field) {
if (preg_match('/.+__.+/', $field) != 0) {
$fc = explode('__', $field);
$fields[$fc[0]][$fc[1]] = $fc[1];
}
else {
$fields[$field] = $field;
}
}
$types[$content]['fields'] = $fields;
}
// Set variables for word-link settings.
variable_set('word_link_limit', $form_state['values']['word_link_settings']['word_link_limit']);
variable_set('word_link_tags_except', $form_state['values']['word_link_settings']['word_link_tags_except']);
variable_set('word_link_node_types', $types);
variable_set('word_link_css', $form_state['values']['word_link_settings']['word_link_css']);
variable_set('word_link_highlight', $form_state['values']['word_link_settings']['word_link_highlight']);
cache_clear_all('word_link_nid_', 'cache', TRUE);
drupal_set_message(t('Saved'));
}
/**
* Buid a Word Link list page.
*/
function word_link_list_page_form($form, $form_state) {
// Return confirm page when need to delete words.
if (!empty($form_state['values']['words'])) {
return word_link_list_page_form_delete_confirm($form, $form_state, array_filter($form_state['values']['words']));
}
// Build the sortable table header.
$header = array(
'id' => array(
'data' => t('id'),
'field' => 'wl.id',
'sort' => 'desc',
),
'text' => array(
'data' => t('Text'),
'field' => 'wl.text',
),
'case_sensitive' => array(
'data' => t('Case sensitive'),
'field' => 'wl.case_sensitive',
),
'url' => array(
'data' => t('URL'),
'field' => 'wl.url',
),
'url_title' => array(
'data' => t('URL title'),
'field' => 'wl.url_title',
),
'class' => array(
'data' => t('Class'),
'field' => 'wl.class',
),
'except' => array(
'data' => t('Visibility'),
'field' => 'wl.except',
),
'operations' => array(
'data' => t('Operations'),
),
);
// Get words from DB.
$words = word_link_get_link(NULL, $header, 50);
$destination = drupal_get_destination();
$options = array();
foreach ($words as $delta => $word) {
$visibility = '';
if (!empty($word->except)) {
$visibility = $word->visibility ? t('Only on') . ': ' : t('Except') . ': ';
}
$options[$word->id] = array(
'id' => $delta,
'text' => check_plain($word->text),
'case_sensitive' => $word->case_sensitive ? t('Yes') : t('No'),
'url' => array(
'data' => array(
'#type' => 'link',
'#title' => check_plain($word->url),
'#href' => $word->url,
'#options' => array(
'attributes' => array(
'target' => '_blank',
),
),
),
),
'url_title' => check_plain($word->url_title),
'class' => check_plain($word->class),
'except' => $visibility . str_replace(array(
"\r\n",
"\n",
"\r",
), " | ", check_plain(trim($word->except))),
);
// Build a list of all the accessible operations for the current word.
$operations = array();
if (user_access('edit word link')) {
$operations['edit'] = array(
'title' => t('edit'),
'href' => 'admin/config/content/word-link/edit/' . $word->id,
'query' => $destination,
);
}
if (user_access('delete word link')) {
$operations['delete'] = array(
'title' => t('delete'),
'href' => 'admin/config/content/word-link/delete/' . $word->id,
'query' => $destination,
);
}
if (count($operations) > 1) {
// Render an unordered list of operations links.
$options[$word->id]['operations'] = array(
'data' => array(
'#theme' => 'links__node_operations',
'#links' => $operations,
'#attributes' => array(
'class' => array(
'links',
'inline',
),
),
),
);
}
elseif (!empty($operations)) {
// Render the first and only operation as a link.
$link = reset($operations);
$options[$word->id]['operations'] = array(
'data' => array(
'#type' => 'link',
'#title' => check_plain($link['title']),
'#href' => $link['href'],
'#options' => array(
'query' => $link['query'],
),
),
);
}
}
// Only use a tableselect when the current user is able to perform any
// operations.
if (user_access('edit word link') || user_access('delete word link')) {
$form['words'] = array(
'#type' => 'tableselect',
'#header' => $header,
'#options' => $options,
'#empty' => t('No words available.'),
);
}
else {
unset($header['operations']);
$form['words'] = array(
'#theme' => 'table',
'#header' => $header,
'#rows' => $options,
'#empty' => t('No words available.'),
);
}
if (!empty($options) && user_access('delete word link')) {
$form['submit'] = array(
'#type' => 'submit',
'#value' => t('Delete selected'),
);
}
$form['pager'] = array(
'#markup' => theme('pager'),
);
return $form;
}
/**
* Submit for a Word Link list page.
*/
function word_link_list_page_form_submit($form, &$form_state) {
$form_state['rebuild'] = TRUE;
}
/**
* Confirm form for delete operation.
*/
function word_link_list_page_form_delete_confirm($form, &$form_state, $words) {
$form['words']['#tree'] = TRUE;
foreach ($words as $wid) {
$form['words'][$wid] = array(
'#type' => 'hidden',
'#value' => $wid,
);
}
$form['#submit'][] = 'word_link_list_page_form_delete_confirm_submit';
$confirm_question = format_plural(count($words), 'Are you sure you want to delete this item?', 'Are you sure you want to delete these items?');
return confirm_form($form, $confirm_question, 'admin/config/content/word-link/list', t('This action cannot be undone.'), t('Delete'), t('Cancel'));
}
/**
* Submit for delete operation.
*/
function word_link_list_page_form_delete_confirm_submit($form, &$form_state) {
foreach ($form_state['values']['words'] as $wid) {
if (!empty($wid) && is_numeric($wid)) {
word_link_del_link($wid);
}
}
}
/**
* Form builder for add or edit page.
*/
function word_link_add_form($form, &$form_state, $id = NULL) {
$form['word_link_add_form'] = array(
'#type' => 'fieldset',
'#title' => t('Add word'),
'#collapsible' => TRUE,
'#collapsed' => FALSE,
);
if (!empty($id)) {
$defaults = word_link_get_link($id);
$form['word_link_add_form']['delete'] = array(
'#type' => 'submit',
'#value' => t('Delete'),
'#weight' => 15,
'#submit' => array(
'word_link_add_form_delete_submit',
),
);
}
$form['word_link_add_form']['text'] = array(
'#type' => 'textfield',
'#title' => t('Word/Phrase'),
'#size' => 30,
'#maxlength' => 255,
'#description' => t('The word or phrase you wish to convert to a link. This field is case sensitive.'),
'#required' => TRUE,
'#default_value' => !empty($defaults[$id]->text) ? $defaults[$id]->text : '',
);
$form['word_link_add_form']['case_sensitive'] = array(
'#type' => 'checkbox',
'#title' => t('Case Sensitivity'),
'#description' => t('By default Word Link are case sensitive. Uncheck this checkbox if you want this particular Word Link to be case insensitive.'),
'#default_value' => isset($defaults[$id]->case_sensitive) ? (int) $defaults[$id]->case_sensitive : 1,
);
$form['word_link_add_form']['url'] = array(
'#type' => 'textfield',
'#title' => t('URL'),
'#size' => 30,
'#maxlength' => 255,
'#description' => t('The URL of the page to link to. External links must start with %http or %https and will be open in new window.', array(
'%http' => 'http://',
'%https' => 'https://',
)),
'#required' => TRUE,
'#default_value' => isset($defaults[$id]->url) ? $defaults[$id]->url : '',
);
$form['word_link_add_form']['url_title'] = array(
'#type' => 'textfield',
'#title' => t('URL Title'),
'#size' => 30,
'#maxlength' => 255,
'#description' => t('Title for the above URL. It will be embedded in the created link and appear as a tooltip when hovering the mouse over the link.'),
'#default_value' => isset($defaults[$id]->url_title) ? $defaults[$id]->url_title : '',
);
$form['word_link_add_form']['class'] = array(
'#type' => 'textfield',
'#title' => t('Class'),
'#size' => 30,
'#maxlength' => 255,
'#description' => t('Use this to add a class for the link. Default value is "word-link".'),
'#default_value' => isset($defaults[$id]->class) ? $defaults[$id]->class : 'word-link',
);
$form['word_link_add_form']['rel'] = array(
'#type' => 'textfield',
'#title' => t('Rel'),
'#size' => 30,
'#maxlength' => 255,
'#description' => t('Use this to add a rel attribute for the link..'),
'#default_value' => isset($defaults[$id]->rel) ? $defaults[$id]->rel : '',
);
$form['word_link_add_form']['visibility'] = array(
'#type' => 'radios',
'#title' => t('Show links on specific pages'),
'#options' => array(
0 => t('All pages except those listed'),
1 => t('Only the listed pages'),
),
'#default_value' => isset($defaults[$id]->visibility) ? $defaults[$id]->visibility : 0,
);
$form['word_link_add_form']['except'] = array(
'#type' => 'textarea',
'#description' => t('Specify pages by using their paths. Enter one path per line. E.g. node/1.'),
'#default_value' => isset($defaults[$id]->except) ? $defaults[$id]->except : '',
);
$form['word_link_add_form']['id'] = array(
'#type' => 'hidden',
'#value' => !empty($id) ? $id : NULL,
);
$form['word_link_add_form']['save'] = array(
'#type' => 'submit',
'#value' => t('Save'),
'#weight' => 15,
'#submit' => array(
'word_link_add_form_save_submit',
),
);
return $form;
}
/**
* Validate form for add or edit page.
*/
function word_link_add_form_validate($form, &$form_state) {
if ($form_state['values']['op'] == t('Save')) {
$args = arg();
$normal_path = drupal_get_normal_path($form_state['values']['url']);
$arg = empty($args[5]) ? 0 : $args[5];
$exist = word_link_word_exist(trim($form_state['values']['text']), $arg);
$regex_validate = '/^[_a-zA-Z]+[_a-zA-Z0-9-\\s]*$/';
if ($exist) {
form_set_error('text', t('This word already exists.'));
}
if (!drupal_valid_path($normal_path)) {
form_set_error('url', t("The path '@url' is either invalid or you do not have access to it.", array(
'@url' => $form_state['values']['url'],
)));
}
if (!empty($form_state['values']['class']) && !preg_match($regex_validate, trim($form_state['values']['class']))) {
form_set_error('class', t('Class is not valid.'));
}
if (!empty($form_state['values']['rel']) && !preg_match($regex_validate, trim($form_state['values']['rel']))) {
form_set_error('rel', t('Rel is not valid.'));
}
}
}
/**
* Submit for delete action.
*/
function word_link_add_form_delete_submit($form, &$form_state) {
$destination = array();
if (isset($_GET['destination'])) {
$destination = drupal_get_destination();
unset($_GET['destination']);
}
$form_state['redirect'] = array(
'admin/config/content/word-link/delete/' . $form_state['values']['id'],
array(
'query' => $destination,
),
);
}
/**
* Submit for save action.
*/
function word_link_add_form_save_submit($form, &$form_state) {
$values = array(
'text' => trim($form_state['values']['text']),
'case_sensitive' => $form_state['values']['case_sensitive'],
'url' => trim($form_state['values']['url']),
'url_title' => trim($form_state['values']['url_title']),
'class' => trim($form_state['values']['class']),
'rel' => trim($form_state['values']['rel']),
'visibility' => $form_state['values']['visibility'],
'except' => trim($form_state['values']['except']),
);
if (isset($form_state['values']['id'])) {
word_link_add_update_link('update', $values, $form_state['values']['id']);
drupal_set_message(t('Done'));
}
else {
word_link_add_update_link('insert', $values);
drupal_set_message(t('Link succesfuly added'));
}
$form_state['redirect'] = 'admin/config/content/word-link/list';
}
/**
* Form builder for delete confirm page.
*/
function word_link_del_form($form, &$form_state, $id) {
$form['word_link_del_form']['message'] = array(
'#markup' => t('This action cannot be undone.'),
'#prefix' => '<div class="form-item">',
'#suffix' => '</div>',
);
$form['word_link_del_form']['delete'] = array(
'#type' => 'submit',
'#value' => t('Delete'),
);
$form['word_link_del_form']['cancel'] = array(
'#markup' => l(t('Cancel'), 'admin/config/content/word-link/list'),
);
$form['word_link_del_form']['id'] = array(
'#type' => 'hidden',
'#value' => $id,
);
return $form;
}
/**
* Submit form for delete confirm page.
*/
function word_link_del_form_submit($form, &$form_state) {
word_link_del_link($form_state['values']['id']);
$form_state['redirect'] = 'admin/config/content/word-link/list';
}
Functions
Name | Description |
---|---|
word_link_add_form | Form builder for add or edit page. |
word_link_add_form_delete_submit | Submit for delete action. |
word_link_add_form_save_submit | Submit for save action. |
word_link_add_form_validate | Validate form for add or edit page. |
word_link_admin_settings | Form builder for a settings page. |
word_link_admin_settings_submit | Submit form for a settings page. |
word_link_admin_settings_validate | Form validation for a settings page. |
word_link_del_form | Form builder for delete confirm page. |
word_link_del_form_submit | Submit form for delete confirm page. |
word_link_list_page_form | Buid a Word Link list page. |
word_link_list_page_form_delete_confirm | Confirm form for delete operation. |
word_link_list_page_form_delete_confirm_submit | Submit for delete operation. |
word_link_list_page_form_submit | Submit for a Word Link list page. |