Advertisement
kervi

Untitled

Sep 13th, 2016
213
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 9.72 KB | None | 0 0
  1. <?php
  2.  
  3. function custom_form_alter(&$form, &$form_state, $form_id) {
  4.   if($form_id == 'webform_client_form_6'){
  5.     $form['actions']['submit']['#ajax'] = array(
  6.       'callback' => 'custom_form_webform_client_form_ajax_submit',
  7.       'wrapper' => $form['#id'],
  8.     );
  9.     $form['actions']['submit']['#attributes']['class'][] = 'ctools-modal-custom-modal-style';
  10.     unset($form['actions']['submit']['#pre_render']);
  11.   }
  12. }
  13.  
  14.  
  15. /**
  16.  * Ajax submit.
  17.  */
  18. function custom_form_webform_client_form_ajax_submit($form, &$form_state) {
  19.     ctools_include('ajax');
  20.     ctools_include('modal');
  21.     ctools_modal_add_js();
  22.  
  23.     if (form_get_errors()) {
  24.       return $form;
  25.     }
  26.  
  27.     $submission = webform_get_submission($form_state['storage']['details']['nid'], $form_state['storage']['details']['sid']);
  28.  
  29.     $data_1 = custom_get_file_1($submission->data[1][0]);
  30.     $data_2 = custom_get_file_2($submission->data[4][0]);
  31.     $data_3 = custom_get_file_3($submission->data[2][0]);
  32.     $data_4 = custom_get_file_4($submission->data[2][0]);
  33.  
  34.     $form_state = array(
  35.       'title' => t('Contact'), // Используется для заголовка модального окна.
  36.       'ajax' => TRUE,
  37.       'build_info' => array(
  38.         'args' => array(
  39.           'data_1' => $data_1,
  40.           'data_2' => $data_2,
  41.           'data_3' => $data_3,
  42.           'data_4' => $data_4,
  43.           'date' => $submission->data[3][0],
  44.           'nid' => $form_state['storage']['details']['nid'],
  45.         ),
  46.       ),
  47.     );
  48.  
  49.   $form = drupal_get_form('custom_tabular_form', $form_state);
  50.   ctools_modal_render('Validation',  $form);
  51.   drupal_exit();
  52.  
  53. }
  54.  
  55.  
  56.  
  57. /**
  58.  * Form builder.
  59.  */
  60. function custom_tabular_form($form, $form_state) {
  61.   $form['items'] = array(
  62.     '#tree' => TRUE,
  63.     '#theme' => 'tabular_form',
  64.     '#header' => array('Source', 'Page views', 'Revenue','RPM', 'Percent %'),
  65.   );
  66.   foreach ($form_state['build_info']['args'][0]['build_info']['args']['data_1']['items'] as $k=>$item) {
  67.     $form['items'][$k]['source'] = array(
  68.       '#markup' => $item[0],
  69.     );
  70.     $views = str_replace(',','',$form_state['build_info']['args'][0]['build_info']['args']['data_2'][$item[0]]);
  71.     $form['items'][$k]['views'] = array(
  72.       '#markup' => $views,
  73.     );
  74.     $total = $item[1];
  75.     //dsm('total :'.$total);
  76.     if(isset($form_state['build_info']['args'][0]['build_info']['args']['data_3'][$item[0]])){
  77.       $total += str_replace(',','.',$form_state['build_info']['args'][0]['build_info']['args']['data_3'][$item[0]]);
  78.     }
  79.     if(isset($form_state['build_info']['args'][0]['build_info']['args']['data_4'][$item[0]])){
  80.       $total += str_replace(',','.',$form_state['build_info']['args'][0]['build_info']['args']['data_4'][$item[0]]);
  81.     }
  82.     //dsm('total final :'.$total);
  83.  
  84.     $form['items'][$k]['revenue'] = array(
  85.       '#type' => 'textfield',
  86.       '#value' => number_format($total, 2, ',', ' '),
  87.       '#attributes' => array('class'=>array('table_'.$k.'_revenue')),
  88.       '#field_suffix' => '$',
  89.       '#disabled' => TRUE,
  90.     );
  91.  
  92.     $rpm = $item[1] / $views * 1000;
  93.     $form['items'][$k]['rpm'] = array(
  94.       '#type' => 'textfield',
  95.       '#value' => number_format($rpm, 2, ',', ' '),
  96.       '#attributes' => array('class'=>array('table_'.$k.'_rpm')),
  97.       '#field_suffix' => '$',
  98.       '#disabled' => TRUE,
  99.     );
  100.  
  101.     $form['items'][$k]['percent'] = array(
  102.       '#type' => 'textfield',
  103.       '#required' => TRUE,
  104.       '#default_value' => 100,
  105.       '#ajax' => array(
  106.         'wrapper' => 'custom-tabular-form',
  107.         'callback' => 'custom_tabular_form_ajax_percent',
  108.       ),
  109.     );
  110.   }
  111.  
  112.   $form['submit'] = array(
  113.     '#type' => 'submit',
  114.     '#value' => 'Сохранить',
  115.   );
  116.  
  117.   return $form;
  118. }
  119.  
  120. function custom_tabular_form_submit($form,$form_state){
  121.   $date = $form_state['build_info']['args'][0]['build_info']['args']['date'];
  122.   $formatted_date =  format_date(strtotime($date), 'custom', 'Y-m-d H:i:s', 'UTC');
  123.   $items = $form_state['values']['items'];
  124.   foreach($form_state['input']['items'] as $k=>$v){
  125.     $items[$k]['percent'] = $v['percent'];
  126.   }
  127.   foreach($form_state['build_info']['args'][0]['build_info']['args']['data_1']['items'] as $k=>$title){
  128.    $items[$k]['title'] = $title[0];
  129.   }
  130.   foreach($items as $item){
  131.     $percent = $item['percent'];
  132.  
  133.     $title = 'Daily reports for '. $item['title'] . ' - '. $date;
  134.     $term = taxonomy_get_term_by_name($item['title']);
  135.     $term = array_shift($term);
  136.  
  137.     $views = $form_state['build_info']['args'][0]['build_info']['args']['data_2'][$item['title']];
  138.     $node = new StdClass();
  139.     $node->type = 'daily_reports';  // machine name content type
  140.     $node->title = '';
  141.     $node->language = 'und';
  142.     $node->status = 1;
  143.     $node->uid = '1';
  144.     $node->field_data['und'][0]['value'] = $formatted_date;
  145.     $node->field_publishers['und'][0]['tid'] = $term->tid;
  146.  
  147.  
  148.     $revenue = str_replace(',','.',$item['revenue']);
  149.     $revenue = $percent / 100 * $revenue;
  150.     $node->field_revenue['und'][0]['value'] = $revenue;
  151.  
  152.     $rpm = str_replace(',','.',$item['rpm']);
  153.     $rpm = $percent / 100 * $rpm;
  154.     $node->field_rpm['und'][0]['value'] = $rpm;
  155.  
  156.     $node->field_page_views['und'][0]['value'] = str_replace(',','.',$views);
  157.     node_save($node);
  158.   }
  159.  
  160.   ctools_include('ajax');
  161.   ctools_add_js('ajax-responder');
  162.   $path = 'node/'.$form_state['build_info']['args'][0]['build_info']['args']['nid'];
  163.   $commands[] = ctools_ajax_command_redirect($path);
  164.   drupal_set_message('Your reports has been created, thank you!');
  165.   print ajax_render($commands);
  166.   drupal_exit();
  167.  
  168. }
  169.  
  170. function custom_tabular_form_ajax_percent($form, $form_state){
  171.   $commands = array();
  172.   foreach($form_state['input']['items'] as $k=>$v){
  173.     if(is_numeric($v['percent']) ){
  174.       $percent = $v['percent'];
  175.  
  176.       $revenue = str_replace(',','.',$form_state['values']['items'][$k]['revenue']);
  177.       $revenue = $percent / 100 * $revenue;
  178.       $rpm = str_replace(',','.',$form_state['values']['items'][$k]['rpm']);
  179.       $rpm = $percent / 100 * $rpm;
  180.  
  181.       $commands[] =  ajax_command_invoke('.table_'.$k.'_revenue', 'val', array($revenue));
  182.       $commands[] =  ajax_command_invoke('.table_'.$k.'_rpm', 'val', array($rpm));
  183.     }
  184.   }
  185.   return array('#type' => 'ajax', '#commands' => $commands);
  186. }
  187.  
  188. function custom_theme() {
  189.   return array(
  190.     'tabular_form' => array(
  191.       'render element' => 'form',
  192.     ),
  193.   );
  194. }
  195.  
  196.  
  197.  /**
  198.  * Format form as table.
  199.  */
  200. function theme_tabular_form($vars) {
  201.   $form = $vars['form'];
  202.   $rows = array();
  203.  
  204.   foreach (element_children($form) as $key) {
  205.     foreach (element_children($form[$key]) as $name) {
  206.       $rows[$key][] = drupal_render($form[$key][$name]);
  207.     }
  208.   }
  209.  
  210.   return theme('table', array(
  211.     'rows' => $rows,
  212.     'header' => $form['#header'],
  213.   ));
  214. }
  215.  
  216.  
  217.  
  218. function custom_get_file_1($fid){
  219.   $file = file_load($fid);
  220.   if($file){
  221.     $out = array();
  222.  
  223.     $url = drupal_realpath($file->uri);
  224.     $data = file_get_contents($url);
  225.     $data = preg_split('/\R/',$data);
  226.     $data = array_slice($data, 7, count($data));
  227.     $data = array_filter($data);
  228.     foreach($data as $item){
  229.       $item = str_getcsv($item);
  230.       if(trim($item[0]) == FALSE){
  231.         break;
  232.       }
  233.  
  234.       if($term =taxonomy_get_term_by_name($item[0])){
  235.         $title = array_shift($term)->name;
  236.       }  else {
  237.         $title = "N/A";
  238.       }
  239.       $amount = ($item[1] == '<$0.01') ? '0' : preg_replace("/[^0-9,.]/", "",$item[1]);
  240.       $out['items'][] =  array($title,$amount);
  241.     }
  242.     $out['total'] = preg_replace("/[^0-9.]/", "",end($data));
  243.     return $out;
  244.   }
  245. }
  246.  
  247. function custom_get_file_2($fid){
  248.   $file = file_load($fid);
  249.   if($file){
  250.     $out = array();
  251.     $url = drupal_realpath($file->uri);
  252.     $data = file_get_contents($url);
  253.     $data = preg_split('/\R/',$data);
  254.  
  255.     $data = array_slice($data, 7, count($data));
  256.     $data = array_filter($data);
  257.     foreach($data as $item){
  258.       $item = str_getcsv($item);
  259.  
  260.       if(!trim($item[0]) || $item[0] == 'Day Index'){
  261.         break;
  262.       }
  263.       if($term = taxonomy_get_term_by_name($item[0])){
  264.         $title = array_shift($term)->name;
  265.       }  else {
  266.         $title = "N/A";
  267.       }
  268.       $out[$title] = $item[1];
  269.     }
  270.     return $out;
  271.   }
  272. }
  273.  
  274.  
  275. function custom_get_file_3($fid){
  276.   $file = file_load($fid);
  277.   if($file){
  278.     $out = array();
  279.     $url = drupal_realpath($file->uri);
  280.     $data = file_get_contents($url);
  281.     $data = preg_split('/\R/',$data);
  282.     $data = array_slice($data, 1, count($data));
  283.     $data = array_filter($data);
  284.     foreach($data as $item){
  285.       $item = str_getcsv($item);
  286.       if($term = taxonomy_get_term_by_name($item[0])){
  287.         $title = array_shift($term)->name;
  288.       }  else {
  289.         $title = "N/A";
  290.       }
  291.       $out[$title] = $item[1];
  292.     }
  293.     return $out;
  294.   }
  295. }
  296.  
  297.  
  298. function custom_get_file_4($fid){
  299.   $file = file_load($fid);
  300.   if($file){
  301.     $out = array();
  302.     $url = drupal_realpath($file->uri);
  303.     $data = file_get_contents($url);
  304.     $data = preg_split('/\R/',$data);
  305.     $data = array_slice($data, 1, count($data));
  306.     $data = array_filter($data);
  307.     foreach($data as $item){
  308.       $item = str_getcsv($item);
  309.  
  310.       if($term = taxonomy_get_term_by_name($item[0])){
  311.         $title = array_shift($term)->name;
  312.       }  else {
  313.         $title = "N/A";
  314.       }
  315.       $out[$title] = $item[1];
  316.     }
  317.   }
  318. }
  319.  
  320.  
  321.  
  322.  
  323. /**
  324.  * Implements hook_init()
  325.  */
  326. function custom_init() {
  327.     //Customize modal window
  328.     drupal_add_js(array(
  329.     'custom-modal-style' => array(
  330.       'modalSize' => array(
  331.         'type' => 'fixed',
  332.         'width' => 800,
  333.         'height' => 550,
  334.       ),
  335.      //Animation mode
  336.      'animation' => 'fadeIn',
  337.     ),
  338.   ), 'setting');
  339. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement