annotate views_calc.install @ 1:cedf71edacf5

Views Calc: Total du group dans le cas d'un group by
author Franck Deroche <franck@defr.org>
date Thu, 06 Aug 2009 19:09:42 +0200
parents 0651c02e6ed7
children b0a976e17cc7
rev   line source
franck@0 1 <?php
franck@0 2 // $Id: views_calc.install,v 1.3 2008/09/16 18:03:08 karens Exp $
franck@0 3 /**
franck@0 4 * Implementation of hook_schema().
franck@0 5 */
franck@0 6 function views_calc_schema() {
franck@0 7 $schema['views_calc_fields'] = array(
franck@0 8 'fields' => array(
franck@0 9 'cid' => array('type' => 'serial', 'not null' => TRUE, 'disp-width' => '10'),
franck@0 10 'label' => array('type' => 'varchar', 'length' => '255', 'not null' => TRUE, 'default' => ''),
franck@0 11 'format' => array('type' => 'varchar', 'length' => '255', 'not null' => TRUE, 'default' => ''),
franck@0 12 'custom' => array('type' => 'varchar', 'length' => '255', 'not null' => TRUE, 'default' => ''),
franck@0 13 'tablelist' => array('type' => 'text', 'not null' => TRUE),
franck@0 14 'fieldlist' => array('type' => 'text', 'not null' => TRUE),
franck@0 15 'calc' => array('type' => 'text', 'not null' => TRUE),
franck@0 16 ),
franck@0 17 'primary key' => array('cid'),
franck@0 18 'indexes' => array(
franck@0 19 'cid' => array('cid'))
franck@0 20 );
franck@0 21 return $schema;
franck@0 22 }
franck@0 23
franck@0 24 function views_calc_install() {
franck@0 25 drupal_install_schema('views_calc');
franck@0 26 }
franck@0 27
franck@0 28 function views_calc_uninstall() {
franck@0 29 db_query("DROP TABLE {views_calc_fields}");
franck@0 30 }
franck@0 31
franck@0 32 /**
franck@0 33 * Convert the queryname stored in the variable to the fullname
franck@0 34 * so we can access both the fieldname and the tablename from
franck@0 35 * the selections.
franck@0 36 *
franck@0 37 * Change the calc 'AVERAGE' to 'AVG' to match the db function.
franck@0 38 */
franck@0 39 function views_calc_update_1() {
franck@0 40 $ret = array();
franck@0 41 include_once(drupal_get_path('module', 'views') .'/views.module');
franck@0 42 include_once(drupal_get_path('module', 'views_calc') .'/views_calc.module');
franck@0 43 $view_calcs = (array) variable_get('views_calc_vid','');
franck@0 44 foreach ($view_calcs as $view_id) {
franck@0 45 if ($view = views_get_view($view_id)) {
franck@0 46 $cols = (array) variable_get('views_calc_'. $view->vid .'_col','');
franck@0 47 $new_cols = array();
franck@0 48 foreach ($cols as $col) {
franck@0 49 foreach ($view->field as $field) {
franck@0 50 if ($field['queryname'] == $col) {
franck@0 51 $new_cols[] = $field['fullname'];
franck@0 52 }
franck@0 53 }
franck@0 54 }
franck@0 55 variable_set('views_calc_'. $view->vid .'_col', $new_cols);
franck@0 56 $rows = (array) variable_get('views_calc_'. $view->vid. '_row','');
franck@0 57 $new_rows = array();
franck@0 58 foreach ($rows as $row) {
franck@0 59 foreach ($view->field as $field) {
franck@0 60 if ($field['queryname'] == $col) {
franck@0 61 $new_rows[] = $field['fullname'];
franck@0 62 }
franck@0 63 }
franck@0 64 }
franck@0 65 variable_set('views_calc_'. $view->vid .'_row', $new_rows);
franck@0 66 $col_calc = (array) variable_get('views_calc_'.$view->vid.'_col_calc','');
franck@0 67 foreach ($col_calc as $calc) {
franck@0 68 if ($calc == 'AVERAGE') {
franck@0 69 $new_calcs[] = 'AVG';
franck@0 70 }
franck@0 71 else {
franck@0 72 $new_calcs[] = $calc;
franck@0 73 }
franck@0 74 }
franck@0 75 variable_set('views_calc_'. $view->vid .'_col_calc', $new_calcs);
franck@0 76 $row_calc = (array) variable_get('views_calc_'.$view->vid.'_row_calc','');
franck@0 77 foreach ($row_calc as $calc) {
franck@0 78 if ($calc == 'AVERAGE') {
franck@0 79 $new_calcs[] = 'AVG';
franck@0 80 }
franck@0 81 else {
franck@0 82 $new_calcs[] = $calc;
franck@0 83 }
franck@0 84 }
franck@0 85 variable_set('views_calc_'. $view->vid .'_row_calc', $new_calcs);
franck@0 86 }
franck@0 87 }
franck@0 88 return $ret;
franck@0 89 }
franck@0 90
franck@0 91 /**
franck@0 92 * Create a table to store custom views calculation fields.
franck@0 93 */
franck@0 94 function views_calc_update_2() {
franck@0 95 $ret = array();
franck@0 96 global $db_type;
franck@0 97
franck@0 98 switch ($db_type) {
franck@0 99 case 'mysql':
franck@0 100 case 'mysqli':
franck@0 101 $ret[] = update_sql("CREATE TABLE if not exists {views_calc_fields} (
franck@0 102 cid int(10) unsigned NOT NULL default '0',
franck@0 103 label varchar(255),
franck@0 104 format varchar(255),
franck@0 105 custom varchar(255),
franck@0 106 tablelist text,
franck@0 107 fieldlist text,
franck@0 108 calc text,
franck@0 109 KEY (cid)
franck@0 110 ) /*!40100 DEFAULT CHARACTER SET utf8 */");
franck@0 111 break;
franck@0 112 case 'postgres':
franck@0 113 $ret[] = update_sql("CREATE TABLE if not exists {views_calc_fields} (
franck@0 114 cid int(10) unsigned NOT NULL default '0',
franck@0 115 label varchar(255),
franck@0 116 format varchar(255),
franck@0 117 custom varchar(255),
franck@0 118 tablelist text,
franck@0 119 fieldlist text,
franck@0 120 calc text,
franck@0 121 KEY (cid)
franck@0 122 ) ");
franck@0 123 break;
franck@0 124 }
franck@0 125 return $ret;
franck@0 126 }
franck@0 127
franck@0 128 /**
franck@0 129 * TODO
franck@0 130 * Use these values to create new default views, then delete them.
franck@0 131 *
franck@0 132 function views_calc_update_6000() {
franck@0 133 $view_calcs = (array) variable_get('views_calc_vid','');
franck@0 134 foreach ($view_calcs as $view_id) {
franck@0 135 variable_del('views_calc_'. $view_id .'_col');
franck@0 136 variable_del('views_calc_'. $view_id .'_col_calc');
franck@0 137 variable_del('views_calc_'. $view_id .'_row');
franck@0 138 variable_del('views_calc_'. $view_id .'_row_calc');
franck@0 139 }
franck@0 140 variable_del('views_calc_vid');
franck@0 141 variable_del('views_calc_operators');
franck@0 142
franck@0 143 }
franck@0 144 */