Advertisement
kervi

Untitled

Sep 13th, 2016
162
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 9.80 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[5][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. //dsm('doc 1 :'.$total);
  79.  
  80. }
  81. if(isset($form_state['build_info']['args'][0]['build_info']['args']['data_4'][$item[0]])){
  82. $total += str_replace(',','.',$form_state['build_info']['args'][0]['build_info']['args']['data_4'][$item[0]]);
  83. //dsm('doc 2 :'.$total);
  84. }
  85. //dsm('total final :'.$total);
  86.  
  87. $form['items'][$k]['revenue'] = array(
  88. '#type' => 'textfield',
  89. '#value' => number_format($total, 2, ',', ' '),
  90. '#attributes' => array('class'=>array('table_'.$k.'_revenue')),
  91. '#field_suffix' => '$',
  92. '#disabled' => TRUE,
  93. );
  94.  
  95. $rpm = $item[1] / $views * 1000;
  96. $form['items'][$k]['rpm'] = array(
  97. '#type' => 'textfield',
  98. '#value' => number_format($rpm, 2, ',', ' '),
  99. '#attributes' => array('class'=>array('table_'.$k.'_rpm')),
  100. '#field_suffix' => '$',
  101. '#disabled' => TRUE,
  102. );
  103.  
  104. $form['items'][$k]['percent'] = array(
  105. '#type' => 'textfield',
  106. '#required' => TRUE,
  107. '#default_value' => 100,
  108. '#ajax' => array(
  109. 'wrapper' => 'custom-tabular-form',
  110. 'callback' => 'custom_tabular_form_ajax_percent',
  111. ),
  112. );
  113. }
  114.  
  115. $form['submit'] = array(
  116. '#type' => 'submit',
  117. '#value' => 'Сохранить',
  118. );
  119.  
  120. return $form;
  121. }
  122.  
  123. function custom_tabular_form_submit($form,$form_state){
  124. $date = $form_state['build_info']['args'][0]['build_info']['args']['date'];
  125. $formatted_date = format_date(strtotime($date), 'custom', 'Y-m-d H:i:s', 'UTC');
  126. $items = $form_state['values']['items'];
  127. foreach($form_state['input']['items'] as $k=>$v){
  128. $items[$k]['percent'] = $v['percent'];
  129. }
  130. foreach($form_state['build_info']['args'][0]['build_info']['args']['data_1']['items'] as $k=>$title){
  131. $items[$k]['title'] = $title[0];
  132. }
  133. foreach($items as $item){
  134. $percent = $item['percent'];
  135.  
  136. $title = 'Daily reports for '. $item['title'] . ' - '. $date;
  137. $term = taxonomy_get_term_by_name($item['title']);
  138. $term = array_shift($term);
  139.  
  140. $views = $form_state['build_info']['args'][0]['build_info']['args']['data_2'][$item['title']];
  141. $node = new StdClass();
  142. $node->type = 'daily_reports'; // machine name content type
  143. $node->title = '';
  144. $node->language = 'und';
  145. $node->status = 1;
  146. $node->uid = '1';
  147. $node->field_data['und'][0]['value'] = $formatted_date;
  148. $node->field_publishers['und'][0]['tid'] = $term->tid;
  149.  
  150.  
  151. $revenue = str_replace(',','.',$item['revenue']);
  152. $revenue = $percent / 100 * $revenue;
  153. $node->field_revenue['und'][0]['value'] = $revenue;
  154.  
  155. $rpm = str_replace(',','.',$item['rpm']);
  156. $rpm = $percent / 100 * $rpm;
  157. $node->field_rpm['und'][0]['value'] = $rpm;
  158.  
  159. $node->field_page_views['und'][0]['value'] = str_replace(',','.',$views);
  160. node_save($node);
  161. }
  162.  
  163. ctools_include('ajax');
  164. ctools_add_js('ajax-responder');
  165. $path = 'node/'.$form_state['build_info']['args'][0]['build_info']['args']['nid'];
  166. $commands[] = ctools_ajax_command_redirect($path);
  167. drupal_set_message('Your reports has been created, thank you!');
  168. print ajax_render($commands);
  169. drupal_exit();
  170.  
  171. }
  172.  
  173. function custom_tabular_form_ajax_percent($form, $form_state){
  174. $commands = array();
  175. foreach($form_state['input']['items'] as $k=>$v){
  176. if(is_numeric($v['percent']) ){
  177. $percent = $v['percent'];
  178.  
  179. $revenue = str_replace(',','.',$form_state['values']['items'][$k]['revenue']);
  180. $revenue = $percent / 100 * $revenue;
  181. $rpm = str_replace(',','.',$form_state['values']['items'][$k]['rpm']);
  182. $rpm = $percent / 100 * $rpm;
  183.  
  184. $commands[] = ajax_command_invoke('.table_'.$k.'_revenue', 'val', array($revenue));
  185. $commands[] = ajax_command_invoke('.table_'.$k.'_rpm', 'val', array($rpm));
  186. }
  187. }
  188. return array('#type' => 'ajax', '#commands' => $commands);
  189. }
  190.  
  191. function custom_theme() {
  192. return array(
  193. 'tabular_form' => array(
  194. 'render element' => 'form',
  195. ),
  196. );
  197. }
  198.  
  199.  
  200. /**
  201. * Format form as table.
  202. */
  203. function theme_tabular_form($vars) {
  204. $form = $vars['form'];
  205. $rows = array();
  206.  
  207. foreach (element_children($form) as $key) {
  208. foreach (element_children($form[$key]) as $name) {
  209. $rows[$key][] = drupal_render($form[$key][$name]);
  210. }
  211. }
  212.  
  213. return theme('table', array(
  214. 'rows' => $rows,
  215. 'header' => $form['#header'],
  216. ));
  217. }
  218.  
  219.  
  220.  
  221. function custom_get_file_1($fid){
  222. $file = file_load($fid);
  223. if($file){
  224. $out = array();
  225.  
  226. $url = drupal_realpath($file->uri);
  227. $data = file_get_contents($url);
  228. $data = preg_split('/\R/',$data);
  229. $data = array_slice($data, 7, count($data));
  230. $data = array_filter($data);
  231. foreach($data as $item){
  232. $item = str_getcsv($item);
  233. if(trim($item[0]) == FALSE){
  234. break;
  235. }
  236.  
  237. if($term =taxonomy_get_term_by_name($item[0])){
  238. $title = array_shift($term)->name;
  239. } else {
  240. $title = "N/A";
  241. }
  242. $amount = ($item[1] == '<$0.01') ? '0' : preg_replace("/[^0-9,.]/", "",$item[1]);
  243. $out['items'][] = array($title,$amount);
  244. }
  245. $out['total'] = preg_replace("/[^0-9.]/", "",end($data));
  246. return $out;
  247. }
  248. }
  249.  
  250. function custom_get_file_2($fid){
  251. $file = file_load($fid);
  252. if($file){
  253. $out = array();
  254. $url = drupal_realpath($file->uri);
  255. $data = file_get_contents($url);
  256. $data = preg_split('/\R/',$data);
  257.  
  258. $data = array_slice($data, 7, count($data));
  259. $data = array_filter($data);
  260. foreach($data as $item){
  261. $item = str_getcsv($item);
  262.  
  263. if(!trim($item[0]) || $item[0] == 'Day Index'){
  264. break;
  265. }
  266. if($term = taxonomy_get_term_by_name($item[0])){
  267. $title = array_shift($term)->name;
  268. } else {
  269. $title = "N/A";
  270. }
  271. $out[$title] = $item[1];
  272. }
  273. return $out;
  274. }
  275. }
  276.  
  277.  
  278. function custom_get_file_3($fid){
  279. $file = file_load($fid);
  280. if($file){
  281. $out = array();
  282. $url = drupal_realpath($file->uri);
  283. $data = file_get_contents($url);
  284. $data = preg_split('/\R/',$data);
  285. $data = array_slice($data, 1, count($data));
  286. $data = array_filter($data);
  287. foreach($data as $item){
  288. $item = str_getcsv($item);
  289. if($term = taxonomy_get_term_by_name($item[0])){
  290. $title = array_shift($term)->name;
  291. } else {
  292. $title = "N/A";
  293. }
  294. $out[$title] = $item[1];
  295. }
  296. return $out;
  297. }
  298. }
  299.  
  300.  
  301. function custom_get_file_4($fid){
  302. $file = file_load($fid);
  303. if($file){
  304. $out = array();
  305. $url = drupal_realpath($file->uri);
  306. $data = file_get_contents($url);
  307. $data = preg_split('/\R/',$data);
  308. $data = array_slice($data, 1, count($data));
  309. $data = array_filter($data);
  310. foreach($data as $item){
  311. $item = str_getcsv($item);
  312.  
  313. if($term = taxonomy_get_term_by_name($item[0])){
  314. $title = array_shift($term)->name;
  315. } else {
  316. $title = "N/A";
  317. }
  318. $out[$title] = $item[1];
  319. }
  320. return $out;
  321. }
  322. }
  323.  
  324.  
  325.  
  326.  
  327. /**
  328. * Implements hook_init()
  329. */
  330. function custom_init() {
  331. //Customize modal window
  332. drupal_add_js(array(
  333. 'custom-modal-style' => array(
  334. 'modalSize' => array(
  335. 'type' => 'fixed',
  336. 'width' => 800,
  337. 'height' => 550,
  338. ),
  339. //Animation mode
  340. 'animation' => 'fadeIn',
  341. ),
  342. ), 'setting');
  343. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement