annotate views_calc.install @ 3:5635080385bd tip

Merge patch with 1.x-dev
author Franck Deroche <franck@defr.org>
date Fri, 07 Aug 2009 15:20:12 +0200
parents b0a976e17cc7
children
rev   line source
franck@0 1 <?php
franck@2 2 // $Id: views_calc.install,v 1.5 2009/06/12 16:38:30 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@2 13 'base' => array('type' => 'varchar', 'length' => '255', 'not null' => TRUE, 'default' => ''),
franck@0 14 'tablelist' => array('type' => 'text', 'not null' => TRUE),
franck@0 15 'fieldlist' => array('type' => 'text', 'not null' => TRUE),
franck@0 16 'calc' => array('type' => 'text', 'not null' => TRUE),
franck@0 17 ),
franck@0 18 'primary key' => array('cid'),
franck@0 19 'indexes' => array(
franck@0 20 'cid' => array('cid'))
franck@0 21 );
franck@0 22 return $schema;
franck@0 23 }
franck@0 24
franck@0 25 function views_calc_install() {
franck@0 26 drupal_install_schema('views_calc');
franck@0 27 }
franck@0 28
franck@0 29 function views_calc_uninstall() {
franck@0 30 db_query("DROP TABLE {views_calc_fields}");
franck@0 31 }
franck@0 32
franck@0 33 /**
franck@0 34 * Convert the queryname stored in the variable to the fullname
franck@0 35 * so we can access both the fieldname and the tablename from
franck@0 36 * the selections.
franck@0 37 *
franck@0 38 * Change the calc 'AVERAGE' to 'AVG' to match the db function.
franck@0 39 */
franck@0 40 function views_calc_update_1() {
franck@0 41 $ret = array();
franck@0 42 include_once(drupal_get_path('module', 'views') .'/views.module');
franck@0 43 include_once(drupal_get_path('module', 'views_calc') .'/views_calc.module');
franck@0 44 $view_calcs = (array) variable_get('views_calc_vid','');
franck@0 45 foreach ($view_calcs as $view_id) {
franck@0 46 if ($view = views_get_view($view_id)) {
franck@0 47 $cols = (array) variable_get('views_calc_'. $view->vid .'_col','');
franck@0 48 $new_cols = array();
franck@0 49 foreach ($cols as $col) {
franck@0 50 foreach ($view->field as $field) {
franck@0 51 if ($field['queryname'] == $col) {
franck@0 52 $new_cols[] = $field['fullname'];
franck@0 53 }
franck@0 54 }
franck@0 55 }
franck@0 56 variable_set('views_calc_'. $view->vid .'_col', $new_cols);
franck@0 57 $rows = (array) variable_get('views_calc_'. $view->vid. '_row','');
franck@0 58 $new_rows = array();
franck@0 59 foreach ($rows as $row) {
franck@0 60 foreach ($view->field as $field) {
franck@0 61 if ($field['queryname'] == $col) {
franck@0 62 $new_rows[] = $field['fullname'];
franck@0 63 }
franck@0 64 }
franck@0 65 }
franck@0 66 variable_set('views_calc_'. $view->vid .'_row', $new_rows);
franck@0 67 $col_calc = (array) variable_get('views_calc_'.$view->vid.'_col_calc','');
franck@0 68 foreach ($col_calc as $calc) {
franck@0 69 if ($calc == 'AVERAGE') {
franck@0 70 $new_calcs[] = 'AVG';
franck@0 71 }
franck@0 72 else {
franck@0 73 $new_calcs[] = $calc;
franck@0 74 }
franck@0 75 }
franck@0 76 variable_set('views_calc_'. $view->vid .'_col_calc', $new_calcs);
franck@0 77 $row_calc = (array) variable_get('views_calc_'.$view->vid.'_row_calc','');
franck@0 78 foreach ($row_calc as $calc) {
franck@0 79 if ($calc == 'AVERAGE') {
franck@0 80 $new_calcs[] = 'AVG';
franck@0 81 }
franck@0 82 else {
franck@0 83 $new_calcs[] = $calc;
franck@0 84 }
franck@0 85 }
franck@0 86 variable_set('views_calc_'. $view->vid .'_row_calc', $new_calcs);
franck@0 87 }
franck@0 88 }
franck@0 89 return $ret;
franck@0 90 }
franck@0 91
franck@0 92 /**
franck@0 93 * Create a table to store custom views calculation fields.
franck@0 94 */
franck@0 95 function views_calc_update_2() {
franck@0 96 $ret = array();
franck@0 97 global $db_type;
franck@0 98
franck@0 99 switch ($db_type) {
franck@0 100 case 'mysql':
franck@0 101 case 'mysqli':
franck@0 102 $ret[] = update_sql("CREATE TABLE if not exists {views_calc_fields} (
franck@0 103 cid int(10) unsigned NOT NULL default '0',
franck@0 104 label varchar(255),
franck@0 105 format varchar(255),
franck@0 106 custom varchar(255),
franck@0 107 tablelist text,
franck@0 108 fieldlist text,
franck@0 109 calc text,
franck@0 110 KEY (cid)
franck@0 111 ) /*!40100 DEFAULT CHARACTER SET utf8 */");
franck@0 112 break;
franck@0 113 case 'postgres':
franck@0 114 $ret[] = update_sql("CREATE TABLE if not exists {views_calc_fields} (
franck@0 115 cid int(10) unsigned NOT NULL default '0',
franck@0 116 label varchar(255),
franck@0 117 format varchar(255),
franck@0 118 custom varchar(255),
franck@0 119 tablelist text,
franck@0 120 fieldlist text,
franck@0 121 calc text,
franck@0 122 KEY (cid)
franck@0 123 ) ");
franck@0 124 break;
franck@0 125 }
franck@0 126 return $ret;
franck@0 127 }
franck@0 128
franck@0 129 function views_calc_update_6000() {
franck@2 130 $ret = array();
franck@2 131 db_add_field($ret, 'views_calc_fields', 'base', array('type' => 'varchar', 'length' => '255', 'not null' => TRUE, 'default' => 'node'));
franck@2 132 return $ret;
franck@2 133 }