View source
<?php
function scs_node_selection($form_state) {
$filters = array();
if (!empty($form_state['post'])) {
if (!empty($form_state['post']['nid'])) {
$filters['nid'] = $form_state['post']['nid'];
}
if (!empty($form_state['post']['title'])) {
$filters['title'] = $form_state['post']['title'];
}
if (!is_numeric($form_state['post']['type'])) {
$filters['type'] = $form_state['post']['type'];
}
}
$form = array();
if (is_null($form_state['storage'])) {
$form['step'] = array(
'#type' => 'hidden',
'#value' => 1,
);
$return = _scs_get_nodes(array(), $filters);
$nodes = $return['nodes'];
foreach ($nodes as $node) {
$form['nid_' . $node->nid] = array(
'#type' => 'checkbox',
'#return_value' => $node->nid,
);
}
$form['newsletter_title'] = array(
'#type' => 'textfield',
'#title' => t('Title'),
'#description' => t('Enter the title of this newsletter'),
'#default_value' => variable_get('scs_default_title', ''),
);
$form['newsletter_toc'] = array(
'#type' => 'checkbox',
'#title' => t('Create a table of contents'),
'#description' => t('Create a table of contents at top of the newsletter with the titles of the selected nodes. If newsletter is HTML format, these table of contents will be bookmarks.'),
);
$content_types = variable_get('simplenews_content_types', array());
if (count($content_types) != 1) {
$form['newsletter_content_type'] = array(
'#type' => 'select',
'#title' => t('Content type'),
'#description' => t('Select the content type of the newsletter you are creating. Only the content types selected ' . l('here', 'admin/settings/simplenews/general') . ' are displayed.'),
'#options' => $content_types,
);
}
if (variable_get('scs_types', '') != '' && count(_scs_get_types()) != 1) {
$form['newsletter_type'] = array(
'#type' => 'select',
'#title' => t('Newsletter type'),
'#options' => _scs_get_types(),
'#default_value' => $type,
);
}
$form['filters'] = array(
'#type' => 'fieldset',
'#title' => t('Filters'),
'#collapsible' => TRUE,
'#collapsed' => empty($filters) ? TRUE : FALSE,
);
$form['filters']['nid'] = array(
'#type' => 'textfield',
'#title' => t('Nid'),
'#description' => t('Filter on nid'),
'#size' => 10,
);
$form['filters']['title'] = array(
'#type' => 'textfield',
'#title' => t('Title'),
'#description' => t('Filter on title. Used as LIKE \'title%\'.'),
);
$form['filters']['type'] = array(
'#type' => 'select',
'#title' => t('Type'),
'#options' => _scs_get_typefilter(),
);
$form['filters']['filter'] = array(
'#type' => 'button',
'#value' => t('Filter'),
);
$form['submit'] = array(
'#type' => 'submit',
'#value' => t('Sort nodes'),
);
}
else {
$form['step'] = array(
'#type' => 'hidden',
'#value' => 2,
);
$form = array_merge($form, scs_sort_nodes($form_state['storage']['nodes']));
}
return $form;
}
function scs_node_selection_validate($form, &$form_state) {
if ($form_state['values']['op'] != t('Filter')) {
if ($form_state['values']['newsletter_title'] == '' && $form_state['values']['step'] == 1) {
form_set_error('newsletter_title', t('This field is required.'));
}
}
}
function scs_node_selection_submit($form, &$form_state) {
if ($form_state['values']['step'] == 1) {
$form_state['storage']['title'] = $form_state['values']['newsletter_title'];
$form_state['storage']['toc'] = $form_state['values']['newsletter_toc'];
if (array_key_exists('newsletter_content_type', $form_state['values'])) {
$form_state['storage']['type'] = $form_state['values']['newsletter_content_type'];
}
else {
$types = variable_get('simplenews_content_types', array());
foreach ($types as $type) {
$form_state['storage']['type'] = $type;
}
}
if (array_key_exists('newsletter_type', $form_state['values'])) {
$form_state['storage']['scs_type'] = $form_state['values']['newsletter_type'];
}
foreach ($form_state['values'] as $field => $value) {
if (ereg('nid_', $field) && $value != 0) {
$nodes[] = $value;
}
}
$form_state['storage']['nodes'] = $nodes;
$form_state['storage']['step'] = 2;
$form_state['rebuild'] = TRUE;
}
else {
$nodes = array();
foreach ($form_state['values'] as $key => $value) {
if (ereg('weight_', $key)) {
$nid = explode('_', $key);
$nid = $nid[1];
$region = $form_state['values']['region_' . $nid];
$nodes[$region][$nid] = $value;
}
}
foreach ($nodes as $region => $elements) {
asort($elements);
$elements = array_keys($elements);
$nodes[$region] = $elements;
}
$options = array(
'title' => $form_state['storage']['title'],
'nodes' => $nodes,
'toc' => $form_state['storage']['toc'],
'content_type' => $form_state['storage']['type'],
);
if (array_key_exists('scs_type', $form_state['storage'])) {
$options['newsletter_type'] = $form_state['storage']['scs_type'];
}
_scs_create_newsletter($options);
}
}
function scs_sort_nodes($nodes = array(), $post = array()) {
$fields = false;
$type = '';
if (array_key_exists('storage', $nodes)) {
if (count($_GET) != 0) {
$fields = true;
$nodes = array();
foreach ($_GET as $key => $nid) {
if ($key != 'q') {
$nodes[] = $nid;
}
}
}
else {
drupal_set_message(t('There was an error. No nodes found'));
return array();
}
}
$form = array();
if ($fields == TRUE) {
$form['newsletter_title'] = array(
'#type' => 'textfield',
'#title' => t('Title'),
'#description' => t('Enter the title of this newsletter'),
'#default_value' => variable_get('scs_default_title', t('Please edit the title of this newsletter.')),
'#required' => true,
);
$form['newsletter_toc'] = array(
'#type' => 'checkbox',
'#title' => t('Create a table of contents'),
'#description' => t('Create a table of contents at top of the newsletter with the titles of the selected nodes. If newsletter is HTML format, these table of contents will be bookmarks.'),
);
if (variable_get('scs_types', '') != '' && count(_scs_get_types()) != 1) {
$form['newsletter_type'] = array(
'#type' => 'select',
'#title' => t('Newsletter type'),
'#options' => _scs_get_types(),
'#default_value' => $type,
);
}
$content_types = variable_get('simplenews_content_types', array());
if (count($content_types) != 1) {
$form['newsletter_content_type'] = array(
'#type' => 'select',
'#title' => t('Content type'),
'#description' => t('Select the content type of the newsletter you are creating. Only the content types selected ' . l('here', 'admin/settings/simplenews/general') . ' are displayed.'),
'#options' => $content_types,
);
}
}
$counter = 0;
$regions = array();
$regions[0] = t('No region');
for ($i = 0; $i < 10; $i++) {
$regions[$i + 1] = t('Region' . ' ' . ($i + 1));
}
foreach ($nodes as $nid) {
$form['weight_' . $nid] = array(
'#type' => 'weight',
'#default_value' => $counter,
'#attributes' => array(
'class' => 'scs_weight scs_weight_0',
),
'#delta' => 100,
);
$form['region_' . $nid] = array(
'#type' => 'select',
'#default_value' => 0,
'#options' => $regions,
'#attributes' => array(
'class' => 'scs_region scs_region_0',
),
);
$counter++;
}
$form['submit'] = array(
'#type' => 'submit',
'#value' => t('Create newsletter'),
);
return $form;
}
function scs_sort_nodes_submit($form, &$form_state) {
$nodes = array();
foreach ($form_state['values'] as $key => $value) {
if (ereg('weight_', $key)) {
$nid = explode('_', $key);
$nid = $nid[1];
$nodes[$nid] = $value;
}
}
if (array_key_exists('newsletter_content_type', $form_state['values'])) {
$type = $form_state['values']['newsletter_content_type'];
}
else {
$types = variable_get('simplenews_content_types', array());
foreach ($types as $selected) {
$type = $selected;
}
}
$nodes = array();
foreach ($form_state['values'] as $key => $value) {
if (ereg('weight_', $key)) {
$nid = explode('_', $key);
$nid = $nid[1];
$region = $form_state['values']['region_' . $nid];
$nodes[$region][$nid] = $value;
}
}
foreach ($nodes as $region => $elements) {
asort($elements);
$elements = array_keys($elements);
$nodes[$region] = $elements;
}
$options = array(
'title' => $form_state['values']['newsletter_title'],
'nodes' => $nodes,
'toc' => $form_state['values']['newsletter_toc'],
'content_type' => $type,
'newsletter_type' => $form_state['values']['newsletter_type'],
);
_scs_create_newsletter($options);
}