votingapi.install
6.43 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
<?php
/**
* @file
* Installation file for VotingAPI module.
*/
function votingapi_schema() {
$schema['votingapi_vote'] = array(
'fields' => array(
'vote_id' => array('type' => 'serial', 'unsigned' => TRUE, 'not null' => TRUE),
'entity_type' => array('type' => 'varchar', 'length' => 64, 'not null' => TRUE, 'default' => 'node'),
'entity_id' => array('type' => 'int', 'unsigned' => TRUE, 'not null' => TRUE, 'default' => 0),
'value' => array('type' => 'float', 'not null' => TRUE, 'default' => 0),
'value_type' => array('type' => 'varchar', 'length' => 64, 'not null' => TRUE, 'default' => 'percent'),
'tag' => array('type' => 'varchar', 'length' => 64, 'not null' => TRUE, 'default' => 'vote'),
'uid' => array('type' => 'int', 'unsigned' => TRUE, 'not null' => TRUE, 'default' => 0),
'timestamp' => array('type' => 'int', 'unsigned' => TRUE, 'not null' => TRUE, 'default' => 0),
'vote_source' => array('type' => 'varchar', 'length' => 255),
),
'primary key' => array('vote_id'),
'indexes' => array(
'content_uid' => array('entity_type', 'entity_id', 'uid'),
'content_uid_2' => array('entity_type', 'uid'),
'content_source' => array('entity_type', 'entity_id', 'vote_source'),
'content_value_tag' => array('entity_type', 'entity_id', 'value_type', 'tag'),
),
);
$schema['votingapi_cache'] = array(
'fields' => array(
'vote_cache_id' => array('type' => 'serial', 'unsigned' => TRUE, 'not null' => TRUE),
'entity_type' => array('type' => 'varchar', 'length' => 64, 'not null' => TRUE, 'default' => 'node'),
'entity_id' => array('type' => 'int', 'unsigned' => TRUE, 'not null' => TRUE, 'default' => 0),
'value' => array('type' => 'float', 'not null' => TRUE, 'default' => 0),
'value_type' => array('type' => 'varchar', 'length' => 64, 'not null' => TRUE, 'default' => 'percent'),
'tag' => array('type' => 'varchar', 'length' => 64, 'not null' => TRUE, 'default' => 'vote'),
'function' => array('type' => 'varchar', 'length' => 64, 'not null' => TRUE, 'default' => ''),
'timestamp' => array('type' => 'int', 'unsigned' => TRUE, 'not null' => TRUE, 'default' => 0),
),
'primary key' => array('vote_cache_id'),
'indexes' => array(
'content' => array('entity_type', 'entity_id'),
'content_function' => array('entity_type', 'entity_id', 'function'),
'content_tag_func' => array('entity_type', 'entity_id', 'tag', 'function'),
'content_vtype_tag' => array('entity_type', 'entity_id', 'value_type', 'tag'),
'content_vtype_tag_func' => array('entity_type', 'entity_id', 'value_type', 'tag', 'function'),
),
);
return $schema;
}
/**
* The most recent update removed for version-to-version compatibility.
*/
function votingapi_update_last_removed() {
return 6101;
}
/**
* Fix default values for entity_type columns
*/
function votingapi_update_7203() {
db_change_field('votingapi_vote', 'entity_type', 'entity_type', array('type' => 'varchar', 'length' => 64, 'not null' => TRUE, 'default' => 'node'));
db_change_field('votingapi_cache', 'entity_type', 'entity_type', array('type' => 'varchar', 'length' => 64, 'not null' => TRUE, 'default' => 'node'));
}
/**
* Queue orphaned votes for deletion (nodes and comments)
*/
function votingapi_update_7202() {
$tables[] = 'votingapi_vote';
$tables[] = 'votingapi_cache';
$types[] = array('node', 'node', 'nid');
$types[] = array('comment', 'comment', 'cid');
$queue = DrupalQueue::get('VotingAPIOrphaned', TRUE);
foreach ($types as $w) {
list($type, $type_table, $type_key) = $w;
if (!db_table_exists($type_table)) {
continue;
}
foreach ($tables as $table) {
$sql = "SELECT v.entity_type, v.entity_id FROM {{$table}} v
LEFT OUTER JOIN {{$type_table}} e ON v.entity_id=e.$type_key
WHERE v.entity_type='$type' AND e.$type_key IS NULL
GROUP BY v.entity_type, v.entity_id";
$result = db_query($sql);
foreach ($result as $row) {
$queue->createItem((array) $row);
}
}
}
}
/**
* Renaming the 'content_type' and 'content_id' columns to entity_type and entity_id.
* Reduces confusion about 'content types' versus 'node types'.
*/
function votingapi_update_7201() {
$index['votingapi_vote'] = array(
'content_uid' => array('entity_type', 'entity_id', 'uid'),
'content_uid_2' => array('entity_type', 'uid'),
'content_source' => array('entity_type', 'entity_id', 'vote_source'),
'content_value_tag' => array('entity_type', 'entity_id', 'value_type', 'tag'),
);
$index['votingapi_cache'] = array(
'content' => array('entity_type', 'entity_id'),
'content_function' => array('entity_type', 'entity_id', 'function'),
'content_tag_func' => array('entity_type', 'entity_id', 'tag', 'function'),
'content_vtype_tag' => array('entity_type', 'entity_id', 'value_type', 'tag'),
'content_vtype_tag_func' => array('entity_type', 'entity_id', 'value_type', 'tag', 'function'),
);
// Remove all existing indexes.
foreach ($index as $table => $data) {
foreach ($data as $index_name => $columns) {
if (db_index_exists($table, $index_name)) {
db_drop_index($table, $index_name);
}
}
}
// Change fields
foreach (array('votingapi_vote', 'votingapi_cache') as $table) {
db_change_field($table, 'content_type', 'entity_type', array('type' => 'varchar', 'length' => 64, 'not null' => TRUE, 'default' => 'node'));
db_change_field($table, 'content_id', 'entity_id', array('type' => 'int', 'unsigned' => TRUE, 'not null' => TRUE, 'default' => 0));
db_change_field($table, 'value_type', 'value_type', array('type' => 'varchar', 'length' => 64, 'not null' => TRUE, 'default' => 'percent'));
db_change_field($table, 'tag', 'tag', array('type' => 'varchar', 'length' => 64, 'not null' => TRUE, 'default' => 'vote'));
}
// Recreate the indexes.
foreach ($index as $table => $data) {
foreach ($data as $index_name => $columns) {
db_add_index($table, $index_name, $columns);
}
}
return t('Updated VotingAPI table structure.');
}
/**
* Implements hook_uninstall().
*/
function votingapi_uninstall() {
// Delete variables created by voteapi module.
$variables = array(
'votingapi_last_cron',
'votingapi_anonymous_window',
'votingapi_user_window',
'votingapi_calculation_schedule',
);
foreach ($variables as $variable) {
variable_del($variable);
}
}