You are here

cctags.admin.inc in cctags 6

Same filename and directory in other branches
  1. 7 cctags.admin.inc

File

cctags.admin.inc
View source
<?php

/**
 * @file
 */
function cctags_settings() {
  $vocabularys = array();
  $items = _cctags_get_settings();
  $options = array();
  foreach (taxonomy_get_vocabularies(NULL) as $vocabulary) {
    $options[$vocabulary->vid] = $vocabulary->name;
  }
  $form['#tree'] = TRUE;
  foreach ($items as $key => $item) {
    $form['cctags_id'][] = array(
      '#type' => 'hidden',
      '#value' => $key,
    );
    $form['cctags_item'][$key]['cctags_item_name'] = array(
      '#value' => $item['name'],
    );
    $form['cctags_item'][$key]['cctags_item_block'] = array(
      '#type' => 'checkbox',
      '#default_value' => $item['block'],
    );
    $form['cctags_item'][$key]['cctags_item_page'] = array(
      '#type' => 'checkbox',
      '#default_value' => $item['page'],
    );
    $form['cctags_item'][$key]['cctags_item_path'] = array(
      '#value' => l($item['page_path'], $item['page_path']),
    );
    $form['cctags_item'][$key]['cctags_item_edit'] = array(
      '#value' => l(t('Settings'), 'admin/settings/cctags/' . $item['cctid'] . '/edit'),
    );
    $form['cctags_item'][$key]['cctags_item_del'] = array(
      '#value' => l(t('Delete'), 'admin/settings/cctags/' . $item['cctid'] . '/delete'),
    );
    $form['cctags_item'][$key]['cctags_item_id'] = array(
      '#value' => $item['cctid'],
    );
    $form['cctags_item'][$key]['cctags_item_page_path'] = array(
      '#type' => 'hidden',
      '#value' => $item['page_path'],
    );
    $form['cctags_item'][$key]['cctags_item_page_title'] = array(
      '#type' => 'hidden',
      '#value' => $item['page_title'],
    );
    $form['cctags_item'][$key]['cctags_item_block_name'] = array(
      '#type' => 'hidden',
      '#value' => $item['block_name'],
    );
    $form['cctags_item'][$key]['cctid'] = array(
      '#type' => 'hidden',
      '#value' => $item['cctid'],
      '#tree' => TRUE,
    );
  }
  $form['cctags_node'] = array(
    '#type' => 'fieldset',
    '#title' => t('Setting for node api of tags'),
    '#collapsible' => TRUE,
  );
  $form['cctags_node']['block'] = array(
    '#type' => 'fieldset',
    '#title' => t('Setting for node api of block'),
    '#collapsible' => FALSE,
  );
  $form['cctags_node']['block']['cctags_node_load'] = array(
    '#type' => 'checkbox',
    '#title' => t('Enable node tags block'),
    '#default_value' => variable_get('cctags_node_load', 0),
  );
  $form['cctags_node']['block']['cctags_node_block_name'] = array(
    '#type' => 'textfield',
    '#title' => t('Block name'),
    '#maxlength' => 64,
    '#description' => t('A name of your block. Used on the block overview page.'),
    '#default_value' => variable_get('cctags_node_block_name', ''),
  );
  $form['cctags_node']['block']['cctags_node_links'] = array(
    '#type' => 'checkbox',
    '#title' => t('Enable node links block'),
    '#default_value' => variable_get('cctags_node_links', 0),
  );
  $form['cctags_node']['block']['cctags_node_links_block_name'] = array(
    '#type' => 'textfield',
    '#title' => t('Block name'),
    '#maxlength' => 64,
    '#description' => t('A name of your block. Used on the block overview page.'),
    '#default_value' => variable_get('cctags_node_links_block_name', ''),
  );
  $form['cctags_users'] = array(
    '#type' => 'fieldset',
    '#title' => t('Setting for users cloud'),
    '#collapsible' => TRUE,
  );
  $form['cctags_users']['cctags_users_load'] = array(
    '#type' => 'checkbox',
    '#title' => t('Enable users cloud block'),
    '#default_value' => variable_get('cctags_users_load', 0),
  );
  $form['cctags_users']['cctags_users_block_name'] = array(
    '#type' => 'textfield',
    '#title' => t('Block name'),
    '#maxlength' => 64,
    '#description' => t('A name of your block. Used on the block overview page.'),
    '#default_value' => variable_get('cctags_users_block_name', ''),
  );
  $form['cctags_users']['cctags_users_page_title'] = array(
    '#type' => 'textfield',
    '#title' => t('User list page name'),
    '#maxlength' => 64,
    '#description' => t('A name of your user list page. If &lt;none&gt; then title empty.'),
    '#default_value' => variable_get('cctags_users_page_title', t('User_list')),
  );
  $form['cctags_users']['cctags_users_page_path'] = array(
    '#type' => 'textfield',
    '#title' => t('User list page menu path'),
    '#maxlength' => 128,
    '#description' => t('A path to user list page. If empty then predefinr cctags/users.'),
    '#default_value' => variable_get('cctags_users_page_path', 'cctags/users'),
  );
  $form['cctags_users']['cctags_users_page_amount'] = array(
    '#type' => 'select',
    '#title' => t('Users to show on per page'),
    '#options' => _cctags_get_select_list('amount_user'),
    '#default_value' => variable_get('cctags_users_page_amount', 5),
    '#description' => t('The number of user to show on per page.If zero then show all users on one page'),
  );
  $op_sort = array(
    'level,asc' => t('by level, ascending'),
    'level,desc' => t('by level, descending'),
    'title,asc' => t('by title, ascending'),
    'title,desc' => t('by title, descending'),
    'random,none' => t('random'),
  );
  $form['cctags_users']['cctags_users_page_sort'] = array(
    '#type' => 'radios',
    '#title' => t('Users list sort order'),
    '#options' => $op_sort,
    '#default_value' => variable_get('cctags_users_page_sort', 'title,asc'),
    '#description' => t('Determines the sort order of the users on the user list page.'),
  );
  $form['cctags_clear'] = array(
    '#type' => 'fieldset',
    '#title' => t('Setting for disposal unused of tags'),
    '#collapsible' => TRUE,
  );
  $form['cctags_clear']['cctags_node_clear'] = array(
    '#type' => 'checkboxes',
    '#title' => t('Remove unused terms when changing the node from the following dictionaries'),
    '#options' => $options,
    '#default_value' => variable_get('cctags_node_clear', array()),
  );
  $form['cctags_clear']['cctags_cron_clear'] = array(
    '#type' => 'checkboxes',
    '#title' => t('Remove unused terms in the cron of the following dictionaries'),
    '#options' => $options,
    '#default_value' => variable_get('cctags_cron_clear', array()),
  );
  $form['submit'] = array(
    '#type' => 'submit',
    '#value' => t('Save cctags settings'),
  );
  return $form;
}
function cctags_settings_submit($form, &$form_state) {
  if (!form_get_errors()) {
    variable_set('cctags_node_load', $form_state['values']['cctags_node']['block']['cctags_node_load']);
    variable_set('cctags_node_block_name', check_plain($form_state['values']['cctags_node']['block']['cctags_node_block_name']));
    variable_set('cctags_node_links', $form_state['values']['cctags_node']['block']['cctags_node_links']);
    variable_set('cctags_node_links_block_name', check_plain($form_state['values']['cctags_node']['block']['cctags_node_links_block_name']));
    variable_set('cctags_users_load', $form_state['values']['cctags_users']['cctags_users_load']);
    variable_set('cctags_users_block_name', check_plain($form_state['values']['cctags_users']['cctags_users_block_name']));
    variable_set('cctags_users_page_title', check_plain($form_state['values']['cctags_users']['cctags_users_page_title']));
    variable_set('cctags_users_page_path', $form_state['values']['cctags_users']['cctags_users_page_path']);
    variable_set('cctags_users_page_amount', $form_state['values']['cctags_users']['cctags_users_page_amount']);
    variable_set('cctags_users_page_sort', $form_state['values']['cctags_users']['cctags_users_page_sort']);
    variable_set('cctags_node_clear', $form_state['values']['cctags_clear']['cctags_node_clear']);
    variable_set('cctags_cron_clear', $form_state['values']['cctags_clear']['cctags_cron_clear']);
    foreach ($form_state['values']['cctags_item'] as $key => $value) {
      $block = $value['cctags_item_block'];
      $page = $value['cctags_item_page'];
      $cctid = $value['cctid'];
      if ($block) {
        $block_name = check_plain($form['cctags_item'][$key]['cctags_item_block_name']['#value'] ? $form['cctags_item'][$key]['cctags_item_block_name']['#value'] : $form['cctags_item'][$key]['cctags_item_name']['#value']);
        db_query("UPDATE {cctags} SET block_name='%s' WHERE cctid=%d", $block_name, $cctid);
      }
      if ($page) {
        $page_path = $form['cctags_item'][$key]['cctags_item_page_path']['#value'] ? $form['cctags_item'][$key]['cctags_item_page_path']['#value'] : 'cctags/page/' . $cctid;
        $page_title = check_plain($form['cctags_item'][$key]['cctags_item_page_title']['#value'] ? $form['cctags_item'][$key]['cctags_item_page_path']['#value'] : $form['cctags_item'][$key]['cctags_item_name']['#value']);
        db_query("UPDATE {cctags} SET page_path='%s',page_title='%s' WHERE cctid=%d", $page_path, $page_title, $cctid);
      }
      db_query("UPDATE {cctags} SET block=%d,page=%d WHERE cctid=%d", $block, $page, $cctid);
    }
    menu_rebuild();
    _cctags_clear_cache(NULL, 'all', TRUE);
    _cctags_clear_cache(-3, 'usres', TRUE);
    _cctags_clear_cache(-2, NULL, TRUE);
    _cctags_clear_cache(-1, NULL, TRUE);
  }
}
function cctags_settings_item(&$form_state, $cctid = NULL) {
  $form = array();
  $maxlevel = 0;
  if ($cctid) {
    $items = _cctags_get_settings($cctid);
    $item = $items[0];
    $form['cctags_cctid'] = array(
      '#type' => 'hidden',
      '#value' => $cctid,
    );
  }
  else {
    $item['page_level'] = 5;
    $item['page_amount'] = 0;
    $item['page_mode'] = 'mixed';
    $item['page_sort'] = 'title,asc';
  }
  $vocabularys = array();
  foreach (taxonomy_get_vocabularies(NULL) as $vocabulary) {
    $options[$vocabulary->vid] = $vocabulary->name;
    $tree[$vocabulary->vid] = taxonomy_get_tree($vocabulary->vid);
    $vocabularys[$vocabulary->vid]['name'] = $vocabulary->name;
    $cnt = array();
    foreach ($tree[$vocabulary->vid] as $l) {
      $cnt[$l->depth]++;
      if ($maxlevel < $l->depth) {
        $maxlevel = $l->depth;
      }
      $vocabularys[$vocabulary->vid][$l->depth] = $cnt[$l->depth];
    }
  }
  $form['cctags_name'] = array(
    '#type' => 'textfield',
    '#title' => t('Cctags item name'),
    '#default_value' => $item['name'],
    '#required' => TRUE,
  );
  foreach ($vocabularys as $key => $value) {
    $form['cctags_select_vocs'][$key] = array(
      '#type' => 'hidden',
      '#value' => $value['name'],
    );
    $form['cctags_select_' . $key] = array(
      '#type' => 'checkbox',
      '#title' => $value['name'],
      '#default_value' => $item['item_data']['vocs'][$key],
    );
    foreach ($value as $k => $count_terms) {
      if (is_numeric($k)) {
        $form['cctags_select_' . $key . '_level_' . $k] = array(
          '#type' => 'checkbox',
          '#default_value' => $item['item_data']['level'][$key][$k],
        );
      }
    }
  }
  $form['cctags_block'] = array(
    '#type' => 'fieldset',
    '#title' => t('Setting for block of this item cctags'),
    '#collapsible' => TRUE,
    '#collapsed' => FALSE,
  );
  $form['cctags_block']['block'] = array(
    '#type' => 'checkbox',
    '#title' => t('Enable block for this cctags item'),
    '#default_value' => $item['block'],
  );
  $form['cctags_block']['block_name'] = array(
    '#type' => 'textfield',
    '#title' => t('Block name'),
    '#maxlength' => 255,
    '#description' => t('A name of your block. Used on the block overview page. If empty then uses name this cctags  item.'),
    '#default_value' => $item['block_name'],
  );
  $form['cctags_page'] = array(
    '#type' => 'fieldset',
    '#title' => t('Setting for page of this item cctags'),
    '#collapsible' => TRUE,
    '#collapsed' => FALSE,
  );
  $form['cctags_page']['page'] = array(
    '#type' => 'checkbox',
    '#title' => t('Enable access page for this cctags item'),
    '#default_value' => $item['page'],
  );
  $form['cctags_page']['page_title'] = array(
    '#type' => 'textfield',
    '#title' => t('Page title'),
    '#maxlength' => 64,
    '#description' => t('A title of your page.'),
    '#default_value' => $item['page_title'],
  );
  $form['cctags_page']['page_path'] = array(
    '#type' => 'textfield',
    '#title' => t('Page path'),
    '#maxlength' => 128,
    '#description' => t('Path to access of your page. If empty, predefined path cctags/page/%item-id.'),
    '#default_value' => $item['page_path'],
  );
  $c = _cctags_get_select_list('level');
  $form['cctags_page']['page_level'] = array(
    '#type' => 'select',
    '#options' => $c,
    '#title' => t('Number of levels fonts metrics'),
    '#default_value' => $item['page_level'],
    '#description' => t('The number of levels between the least popular tags and the most popular ones. Different levels will be assigned a different class to be themed in cctags.css'),
  );
  $op_sort = array(
    'level,asc' => t('by level, ascending'),
    'level,desc' => t('by level, descending'),
    'title,asc' => t('by title, ascending'),
    'title,desc' => t('by title, descending'),
    'random,none' => t('random'),
  );
  $form['cctags_page']['page_sort'] = array(
    '#type' => 'radios',
    '#title' => t('Tags sort order'),
    '#options' => $op_sort,
    '#default_value' => $item['page_sort'],
    '#description' => t('Determines the sort order of the tags on the page.'),
  );
  $amounts = _cctags_get_select_list('amount_tags');
  $form['cctags_page']['page_amount'] = array(
    '#type' => 'select',
    '#options' => $amounts,
    '#title' => t('Amount of tags on the per page'),
    '#default_value' => $item['page_amount'],
    '#description' => t('The amount of tags that will show up in a cloud on the per pages. if value equal 0, then all tags, for this cctags item, will be visible in one page.'),
  );
  $op_mode = array(
    'group' => t('group by vocabulary'),
    'mixed' => t('mixed vocabulary'),
  );
  $form['cctags_page']['page_mode'] = array(
    '#type' => 'radios',
    '#title' => t('View page mode'),
    '#options' => $op_mode,
    '#default_value' => $item['page_mode'],
    '#description' => t('Determines the view mode of the tags on the page.'),
  );
  $form['cctags_page']['page_vocname'] = array(
    '#type' => 'checkbox',
    '#title' => t('Cctags view page vocabulary name'),
    '#default_value' => $item['page_vocname'],
    '#description' => t('Determines the view vocabulary name(s).'),
  );
  $form['cctags_select_block_maxlevel'] = array(
    '#type' => 'hidden',
    '#value' => $maxlevel,
  );
  $form['submit'] = array(
    '#type' => 'submit',
    '#value' => t('Save cctags item'),
  );
  return $form;
}
function cctags_settings_add_item_validate($form, &$form_state) {
  cctags_settings_item_validate($form, &$form_state);
}
function cctags_settings_edit_item_validate($form, &$form_state) {
  cctags_settings_item_validate($form, &$form_state);
}
function cctags_settings_item_validate($form, &$form_state) {
  $error = TRUE;
  foreach ($form_state['values'] as $key => $value) {
    if (is_numeric($key)) {
      if ($form_state['values']['cctags_select_' . $key] == 1) {
        for ($i = 0; $i <= $form_state['values']['cctags_select_block_maxlevel']; $i++) {
          if ($form_state['values']['cctags_select_' . $key . '_level_' . $i] == 1) {
            $error = FALSE;
            break;
          }
        }
      }
    }
  }
  if ($error) {
    form_set_error('', t('Select at least one vocabulary and level.'));
  }
}
function cctags_settings_add_item_submit($form, &$form_state) {
  if (!form_get_errors()) {
    if ($form_state['values']['op'] == t('Save cctag item')) {
      foreach ($form_state['values'] as $key => $value) {
        if (is_numeric($key)) {
          $item['vocs'][$key] = $form_state['values']['cctags_select_' . $key];
          for ($i = 0; $i <= $form_state['values']['cctags_select_block_maxlevel']; $i++) {
            $item['level'][$key][$i] = $form_state['values']['cctags_select_' . $key . '_level_' . $i];
          }
        }
      }
      db_query("INSERT INTO {cctags} (name) VALUES ('%s')", check_plain($form_state['values']['cctags_name']));
      $cctid = db_last_insert_id('cctags', 'cctid');
      $block_name = check_plain(empty($form_state['values']['block_name']) ? $form_state['values']['block'] == 1 ? $form_state['values']['cctags_name'] : '' : $form_state['values']['block_name']);
      $page_path = empty($form_state['values']['page_path']) ? $form_state['values']['page'] == 1 ? 'cctags/page/' . $cctid : '' : $form_state['values']['page_path'];
      db_query("UPDATE {cctags} SET block=%d,block_name='%s',page=%d,page_title='%s',page_path='%s',page_level=%d,page_amount=%d,page_sort='%s',page_mode='%s',page_vocname=%d,item_data='%s' WHERE cctid=%d", $form_state['values']['block'], $block_name, $form_state['values']['page'], check_plain($form_state['values']['page_title']), $page_path, $form_state['values']['page_level'], $form_state['values']['page_amount'], $form_state['values']['page_sort'], $form_state['values']['page_mode'], $form_state['values']['page_vocname'], serialize($item), $cctid);
      drupal_set_message(t('The Cctags item %name has been created.', array(
        '%name' => check_plain($form_state['values']['cctags_name']),
      )));
      menu_rebuild();
      _cctags_clear_cache($cctid, 'all', TRUE);
      $form_state['redirect'] = 'admin/settings/cctags/list';
    }
  }
}
function cctags_settings_edit_item_submit($form, &$form_state) {
  if (!form_get_errors()) {
    foreach ($form_state['values'] as $key => $value) {
      if (is_numeric($key)) {
        $item['vocs'][$key] = $form_state['values']['cctags_select_' . $key];
        for ($i = 0; $i <= $form_state['values']['cctags_select_block_maxlevel']; $i++) {
          $item['level'][$key][$i] = $form_state['values']['cctags_select_' . $key . '_level_' . $i];
        }
      }
    }
    $block_name = check_plain(empty($form_state['values']['block_name']) ? $form_state['values']['block'] == 1 ? $form_state['values']['cctags_name'] : '' : $form_state['values']['block_name']);
    $page_path = empty($form_state['values']['page_path']) ? $form_state['values']['page'] == 1 ? 'cctags/page/' . $form_state['values']['cctags_cctid'] : '' : $form_state['values']['page_path'];
    $cctid = $form_state['values']['cctags_cctid'];
    db_query("UPDATE {cctags} SET name='%s',block=%d,block_name='%s',page=%d,page_title='%s',page_path='%s',page_level=%d,page_amount=%d,page_sort='%s',page_mode='%s',page_vocname=%d,item_data='%s' WHERE cctid=%d", $form_state['values']['cctags_name'], $form_state['values']['block'], $block_name, $form_state['values']['page'], check_plain($form_state['values']['page_title']), $page_path, $form_state['values']['page_level'], $form_state['values']['page_amount'], $form_state['values']['page_sort'], $form_state['values']['page_mode'], $form_state['values']['page_vocname'], serialize($item), $cctid);
    drupal_set_message(t('The Cctags item %name has been updated.', array(
      '%name' => check_plain($form_state['values']['cctags_name']),
    )));
    menu_rebuild();
    _cctags_clear_cache($cctid, 'all', TRUE);
    $form_state['redirect'] = 'admin/settings/cctags/list';
  }
}
function theme_cctags_settings($form) {
  $output = '';
  $header = array(
    t('Cctags item name'),
    t('Cctag id'),
    t('Block'),
    t('Page'),
    t('Page path'),
    array(
      'data' => t('Operation'),
      'colspan' => '2',
    ),
  );
  $rows = array();
  if (count($form['cctags_id'])) {
    foreach ($form['cctags_id'] as $k => $value) {
      $key = $value['#value'];
      if (is_numeric($key)) {
        $row = array();
        $row[] = drupal_render($form['cctags_item'][$key]['cctags_item_name']);
        $row[] = drupal_render($form['cctags_item'][$key]['cctags_item_id']);
        $row[] = drupal_render($form['cctags_item'][$key]['cctags_item_block']);
        $row[] = drupal_render($form['cctags_item'][$key]['cctags_item_page']);
        $row[] = drupal_render($form['cctags_item'][$key]['cctags_item_path']);
        $row[] = drupal_render($form['cctags_item'][$key]['cctags_item_edit']);
        $row[] = drupal_render($form['cctags_item'][$key]['cctags_item_del']);
        $rows[] = $row;
      }
    }
    $form['cctags_item'] = array(
      '#type' => 'markup',
      '#value' => theme('table', $header, $rows),
    );
  }
  else {
    $form['cctags_item'] = array(
      '#type' => 'markup',
      '#value' => t('Not defined cctags item. Use tab Add cctag item.'),
    );
  }
  $form['cctags_item'] = array_merge($form['cctags_item'], array(
    '#type' => 'fieldset',
    '#title' => t('Setting for cctags item'),
    '#collapsible' => FALSE,
    '#tree' => TRUE,
    '#weight' => -20,
  ));
  $output .= drupal_render($form);
  return $output;
}
function theme_cctags_settings_add_item($form) {
  return theme('cctags_settings_item', $form);
}
function theme_cctags_settings_edit_item($form) {
  return theme('cctags_settings_item', $form);
}
function theme_cctags_settings_item($form) {
  $output = '';
  $header = array(
    t('Vocabulary name'),
  );
  for ($i = 0; $i <= $form['cctags_select_block_maxlevel']['#value']; $i++) {
    $header[] = t('Level') . ' ' . $i;
  }
  $rows = array();
  foreach ($form['cctags_select_vocs'] as $key => $value) {
    if (is_numeric($key)) {
      $row = array();
      $row[] = drupal_render($form['cctags_select_' . $key]);
      for ($i = 0; $i <= $form['cctags_select_block_maxlevel']['#value']; $i++) {
        $row[] = drupal_render($form['cctags_select_' . $key . '_level_' . $i]);
      }
      $rows[] = $row;
    }
  }

  //$output .= drupal_render($form['cctags']);
  $output .= drupal_render($form['cctags_name']);
  $output .= theme('table', $header, $rows);
  $output .= drupal_render($form);
  return $output;
}
function cctags_settings_add_item(&$form_state) {
  return cctags_settings_item($form_state, NULL);
}
function cctags_settings_edit_item(&$form_state, $cctid) {
  return cctags_settings_item($form_state, $cctid);
}
function cctags_settings_delete_item(&$form_state, $cctid) {
  $items = _cctags_get_settings($cctid);
  $item = $items[0];
  $form['info'] = array(
    '#type' => 'hidden',
    '#value' => $item['name'],
  );
  $form['cctid'] = array(
    '#type' => 'hidden',
    '#value' => $cctid,
  );
  return confirm_form($form, t('Are you sure you want to delete the cctags item %name?', array(
    '%name' => $item['name'],
  )), 'admin/settings/cctags', '', t('Delete'), t('Cancel'));
}
function cctags_settings_delete_item_submit($form, &$form_state) {
  db_query('DELETE FROM {cctags} WHERE cctid = %d', $form_state['values']['cctid']);
  drupal_set_message(t('The cctags item %name has been removed.', array(
    '%name' => $form_state['values']['info'],
  )));
  menu_rebuild();
  _cctags_clear_cache($form_state['values']['cctid'], 'all', TRUE);
  $form_state['redirect'] = 'admin/settings/cctags';
  return;
}