annotate modules/poll/poll.install @ 0:ff03f76ab3fe

initial version
author danieleb <danielebarchiesi@me.com>
date Wed, 21 Aug 2013 18:51:11 +0100
parents
children
rev   line source
danielebarchiesi@0 1 <?php
danielebarchiesi@0 2
danielebarchiesi@0 3 /**
danielebarchiesi@0 4 * @file
danielebarchiesi@0 5 * Install, update and uninstall functions for the poll module.
danielebarchiesi@0 6 */
danielebarchiesi@0 7
danielebarchiesi@0 8 /**
danielebarchiesi@0 9 * Implements hook_schema().
danielebarchiesi@0 10 */
danielebarchiesi@0 11 function poll_schema() {
danielebarchiesi@0 12 $schema['poll'] = array(
danielebarchiesi@0 13 'description' => 'Stores poll-specific information for poll nodes.',
danielebarchiesi@0 14 'fields' => array(
danielebarchiesi@0 15 'nid' => array(
danielebarchiesi@0 16 'type' => 'int',
danielebarchiesi@0 17 'unsigned' => TRUE,
danielebarchiesi@0 18 'not null' => TRUE,
danielebarchiesi@0 19 'default' => 0,
danielebarchiesi@0 20 'description' => "The poll's {node}.nid.",
danielebarchiesi@0 21 ),
danielebarchiesi@0 22 'runtime' => array(
danielebarchiesi@0 23 'type' => 'int',
danielebarchiesi@0 24 'not null' => TRUE,
danielebarchiesi@0 25 'default' => 0,
danielebarchiesi@0 26 'description' => 'The number of seconds past {node}.created during which the poll is open.',
danielebarchiesi@0 27 ),
danielebarchiesi@0 28 'active' => array(
danielebarchiesi@0 29 'type' => 'int',
danielebarchiesi@0 30 'unsigned' => TRUE,
danielebarchiesi@0 31 'not null' => TRUE,
danielebarchiesi@0 32 'default' => 0,
danielebarchiesi@0 33 'description' => 'Boolean indicating whether or not the poll is open.',
danielebarchiesi@0 34 ),
danielebarchiesi@0 35 ),
danielebarchiesi@0 36 'primary key' => array('nid'),
danielebarchiesi@0 37 'foreign keys' => array(
danielebarchiesi@0 38 'poll_node' => array(
danielebarchiesi@0 39 'table' => 'node',
danielebarchiesi@0 40 'columns' => array('nid' => 'nid'),
danielebarchiesi@0 41 ),
danielebarchiesi@0 42 ),
danielebarchiesi@0 43 );
danielebarchiesi@0 44
danielebarchiesi@0 45 $schema['poll_choice'] = array(
danielebarchiesi@0 46 'description' => 'Stores information about all choices for all {poll}s.',
danielebarchiesi@0 47 'fields' => array(
danielebarchiesi@0 48 'chid' => array(
danielebarchiesi@0 49 'type' => 'serial',
danielebarchiesi@0 50 'unsigned' => TRUE,
danielebarchiesi@0 51 'not null' => TRUE,
danielebarchiesi@0 52 'description' => 'Unique identifier for a poll choice.',
danielebarchiesi@0 53 ),
danielebarchiesi@0 54 'nid' => array(
danielebarchiesi@0 55 'type' => 'int',
danielebarchiesi@0 56 'unsigned' => TRUE,
danielebarchiesi@0 57 'not null' => TRUE,
danielebarchiesi@0 58 'default' => 0,
danielebarchiesi@0 59 'description' => 'The {node}.nid this choice belongs to.',
danielebarchiesi@0 60 ),
danielebarchiesi@0 61 'chtext' => array(
danielebarchiesi@0 62 'type' => 'varchar',
danielebarchiesi@0 63 'length' => 128,
danielebarchiesi@0 64 'not null' => TRUE,
danielebarchiesi@0 65 'default' => '',
danielebarchiesi@0 66 'description' => 'The text for this choice.',
danielebarchiesi@0 67 'translatable' => TRUE,
danielebarchiesi@0 68 ),
danielebarchiesi@0 69 'chvotes' => array(
danielebarchiesi@0 70 'type' => 'int',
danielebarchiesi@0 71 'not null' => TRUE,
danielebarchiesi@0 72 'default' => 0,
danielebarchiesi@0 73 'description' => 'The total number of votes this choice has received by all users.',
danielebarchiesi@0 74 ),
danielebarchiesi@0 75 'weight' => array(
danielebarchiesi@0 76 'type' => 'int',
danielebarchiesi@0 77 'not null' => TRUE,
danielebarchiesi@0 78 'default' => 0,
danielebarchiesi@0 79 'description' => 'The sort order of this choice among all choices for the same node.',
danielebarchiesi@0 80 ),
danielebarchiesi@0 81 ),
danielebarchiesi@0 82 'indexes' => array(
danielebarchiesi@0 83 'nid' => array('nid'),
danielebarchiesi@0 84 ),
danielebarchiesi@0 85 'primary key' => array('chid'),
danielebarchiesi@0 86 'foreign keys' => array(
danielebarchiesi@0 87 'choice_node' => array(
danielebarchiesi@0 88 'table' => 'node',
danielebarchiesi@0 89 'columns' => array('nid' => 'nid'),
danielebarchiesi@0 90 ),
danielebarchiesi@0 91 ),
danielebarchiesi@0 92 );
danielebarchiesi@0 93
danielebarchiesi@0 94 $schema['poll_vote'] = array(
danielebarchiesi@0 95 'description' => 'Stores per-{users} votes for each {poll}.',
danielebarchiesi@0 96 'fields' => array(
danielebarchiesi@0 97 'chid' => array(
danielebarchiesi@0 98 'type' => 'int',
danielebarchiesi@0 99 'unsigned' => TRUE,
danielebarchiesi@0 100 'not null' => TRUE,
danielebarchiesi@0 101 'description' => "The {users}'s vote for this poll.",
danielebarchiesi@0 102 ),
danielebarchiesi@0 103 'nid' => array(
danielebarchiesi@0 104 'type' => 'int',
danielebarchiesi@0 105 'unsigned' => TRUE,
danielebarchiesi@0 106 'not null' => TRUE,
danielebarchiesi@0 107 'description' => 'The {poll} node this vote is for.',
danielebarchiesi@0 108 ),
danielebarchiesi@0 109 'uid' => array(
danielebarchiesi@0 110 'type' => 'int',
danielebarchiesi@0 111 'unsigned' => TRUE,
danielebarchiesi@0 112 'not null' => TRUE,
danielebarchiesi@0 113 'default' => 0,
danielebarchiesi@0 114 'description' => 'The {users}.uid this vote is from unless the voter was anonymous.',
danielebarchiesi@0 115 ),
danielebarchiesi@0 116 'hostname' => array(
danielebarchiesi@0 117 'type' => 'varchar',
danielebarchiesi@0 118 'length' => 128,
danielebarchiesi@0 119 'not null' => TRUE,
danielebarchiesi@0 120 'default' => '',
danielebarchiesi@0 121 'description' => 'The IP address this vote is from unless the voter was logged in.',
danielebarchiesi@0 122 ),
danielebarchiesi@0 123 'timestamp' => array(
danielebarchiesi@0 124 'type' => 'int',
danielebarchiesi@0 125 'not null' => TRUE,
danielebarchiesi@0 126 'default' => 0,
danielebarchiesi@0 127 'description' => 'The timestamp of the vote creation.',
danielebarchiesi@0 128 ),
danielebarchiesi@0 129 ),
danielebarchiesi@0 130 'primary key' => array('nid', 'uid', 'hostname'),
danielebarchiesi@0 131 'foreign keys' => array(
danielebarchiesi@0 132 'poll_node' => array(
danielebarchiesi@0 133 'table' => 'node',
danielebarchiesi@0 134 'columns' => array('nid' => 'nid'),
danielebarchiesi@0 135 ),
danielebarchiesi@0 136 'voter' => array(
danielebarchiesi@0 137 'table' => 'users',
danielebarchiesi@0 138 'columns' => array('uid' => 'uid'),
danielebarchiesi@0 139 ),
danielebarchiesi@0 140 ),
danielebarchiesi@0 141 'indexes' => array(
danielebarchiesi@0 142 'chid' => array('chid'),
danielebarchiesi@0 143 'hostname' => array('hostname'),
danielebarchiesi@0 144 'uid' => array('uid'),
danielebarchiesi@0 145 ),
danielebarchiesi@0 146 );
danielebarchiesi@0 147
danielebarchiesi@0 148 return $schema;
danielebarchiesi@0 149 }
danielebarchiesi@0 150
danielebarchiesi@0 151 /**
danielebarchiesi@0 152 * Use the poll_choice primary key to record votes in poll_votes rather than
danielebarchiesi@0 153 * the choice order. Rename chorder to weight.
danielebarchiesi@0 154 *
danielebarchiesi@0 155 * Rename {poll_choices} table to {poll_choice} and {poll_votes} to {poll_vote}.
danielebarchiesi@0 156 */
danielebarchiesi@0 157 function poll_update_7001() {
danielebarchiesi@0 158 // Add chid column and convert existing votes.
danielebarchiesi@0 159 db_add_field('poll_votes', 'chid', array('type' => 'int', 'unsigned' => TRUE, 'not null' => TRUE, 'default' => 0));
danielebarchiesi@0 160 db_add_index('poll_votes', 'chid', array('chid'));
danielebarchiesi@0 161 db_update('poll_votes')
danielebarchiesi@0 162 ->expression('chid', Database::getConnection()->prefixTables('COALESCE((SELECT chid FROM {poll_choices} c WHERE {poll_votes}.chorder = c.chorder AND {poll_votes}.nid = c.nid), 0)'))
danielebarchiesi@0 163 ->execute();
danielebarchiesi@0 164 // Delete invalid votes.
danielebarchiesi@0 165 db_delete('poll_votes')->condition('chid', 0)->execute();
danielebarchiesi@0 166 // Remove old chorder column.
danielebarchiesi@0 167 db_drop_field('poll_votes', 'chorder');
danielebarchiesi@0 168
danielebarchiesi@0 169 // Change the chorder column to weight in poll_choices.
danielebarchiesi@0 170 db_change_field('poll_choices', 'chorder', 'weight', array('type' => 'int', 'not null' => TRUE, 'default' => 0, 'size' => 'tiny'));
danielebarchiesi@0 171
danielebarchiesi@0 172 db_rename_table('poll_votes', 'poll_vote');
danielebarchiesi@0 173 db_rename_table('poll_choices', 'poll_choice');
danielebarchiesi@0 174 }
danielebarchiesi@0 175
danielebarchiesi@0 176 /**
danielebarchiesi@0 177 * Add timestamp field to {poll_vote}.
danielebarchiesi@0 178 */
danielebarchiesi@0 179 function poll_update_7002() {
danielebarchiesi@0 180 $field = array(
danielebarchiesi@0 181 'type' => 'int',
danielebarchiesi@0 182 'not null' => TRUE,
danielebarchiesi@0 183 'default' => 0,
danielebarchiesi@0 184 );
danielebarchiesi@0 185 db_add_field('poll_vote', 'timestamp', $field);
danielebarchiesi@0 186 }
danielebarchiesi@0 187
danielebarchiesi@0 188 /**
danielebarchiesi@0 189 * Change the weight column to normal int.
danielebarchiesi@0 190 */
danielebarchiesi@0 191 function poll_update_7003() {
danielebarchiesi@0 192 db_change_field('poll_choice', 'weight', 'weight', array(
danielebarchiesi@0 193 'type' => 'int',
danielebarchiesi@0 194 'not null' => TRUE,
danielebarchiesi@0 195 'default' => 0,
danielebarchiesi@0 196 'description' => 'The sort order of this choice among all choices for the same node.',
danielebarchiesi@0 197 ));
danielebarchiesi@0 198 }
danielebarchiesi@0 199
danielebarchiesi@0 200 /**
danielebarchiesi@0 201 * @addtogroup updates-7.x-extra
danielebarchiesi@0 202 * @{
danielebarchiesi@0 203 */
danielebarchiesi@0 204
danielebarchiesi@0 205 /**
danielebarchiesi@0 206 * Update the database to match the schema.
danielebarchiesi@0 207 */
danielebarchiesi@0 208 function poll_update_7004() {
danielebarchiesi@0 209 // Remove field default.
danielebarchiesi@0 210 db_change_field('poll_vote', 'chid', 'chid', array('type' => 'int', 'unsigned' => TRUE, 'not null' => TRUE));
danielebarchiesi@0 211 }
danielebarchiesi@0 212
danielebarchiesi@0 213 /**
danielebarchiesi@0 214 * @} End of "addtogroup updates-7.x-extra".
danielebarchiesi@0 215 */