/[drupal]/contributions/modules/radioactivity/radioactivity.install
ViewVC logotype

Contents of /contributions/modules/radioactivity/radioactivity.install

Parent Directory Parent Directory | Revision Log Revision Log | View Revision Graph Revision Graph


Revision 1.4 - (show annotations) (download) (as text)
Sun May 25 20:31:14 2008 UTC (18 months ago) by skiminki
Branch: MAIN
CVS Tags: DRUPAL-5--1-2-RC1, DRUPAL-5--1-2rc1, DRUPAL-5--1-3-RC1, DRUPAL-5--1-2-RC2, DRUPAL-5--1-3, DRUPAL-5--1-2, HEAD
Branch point for: DRUPAL-5, DRUPAL-6--1
Changes since 1.3: +116 -12 lines
File MIME type: text/x-php
o PostgreSQL fixes:
  - fix postgres update
  - rename columns oid->id and oclass->class. Column oid was creating problems
    as PostgreSQL has internal meaning for it
  - fix energy adding for postgresql. There were typos there.
o Implement functionality to port views created against radioactivity 1.1 to
  forthcoming 1.2. This functionality is invoked by update.php.
1 <?php
2 // Advanced node popularity install
3
4 function radioactivity_install() {
5 switch ($GLOBALS['db_type']) {
6 case 'mysql':
7 case 'mysqli':
8 db_query("CREATE TABLE {radioactivity} (
9 id int NOT NULL,
10 class varchar(7) NOT NULL,
11 decay_profile int NOT NULL,
12 energy double unsigned NOT NULL DEFAULT 0,
13 last_emission_timestamp int NOT NULL,
14 PRIMARY KEY (id, class, decay_profile)
15 ) /*!40100 DEFAULT CHARACTER SET utf8 */;");
16
17 db_query("CREATE INDEX {radioactivity_ix_energy}
18 ON {radioactivity} (energy);");
19
20 break;
21
22 case 'pgsql':
23 db_query("CREATE TABLE {radioactivity} (
24 id int NOT NULL,
25 class varchar(7) NOT NULL,
26 decay_profile int NOT NULL,
27 energy double precision NOT NULL DEFAULT 0,
28 last_emission_timestamp int NOT NULL,
29 PRIMARY KEY (id, class, decay_profile)
30 );");
31
32 db_query("CREATE INDEX {radioactivity}_ix_energy
33 ON {radioactivity} (energy);");
34 break;
35 }
36 }
37
38 function radioactivity_uninstall() {
39 db_query("DROP TABLE {radioactivity}");
40 variable_del("radioactivity_profiles");
41 variable_del("radioactivity_decay_granularity");
42 variable_del("radioactivity_last_cron_timestamp");
43 }
44
45 function radioactivity_update_1() {
46 $ret=array();
47
48 switch ($GLOBALS['db_type']) {
49 case 'mysql':
50 case 'mysqli':
51 $ret[]=update_sql("ALTER TABLE {radioactivity} DROP PRIMARY KEY");
52 $ret[]=update_sql("ALTER TABLE {radioactivity} CHANGE COLUMN nid id int NOT NULL");
53 $ret[]=update_sql("ALTER TABLE {radioactivity} ADD COLUMN class varchar(7) NULL AFTER id");
54 $ret[]=update_sql("UPDATE {radioactivity} SET class='node'");
55 $ret[]=update_sql("ALTER TABLE {radioactivity} MODIFY COLUMN class varchar(7) NOT NULL");
56 $ret[]=update_sql("ALTER TABLE {radioactivity} ADD PRIMARY KEY (id, class, decay_profile)");
57 break;
58
59 case 'pgsql':
60 $ret[]=update_sql("ALTER TABLE {radioactivity} DROP CONSTRAINT radioactivity_pkey");
61 $ret[]=update_sql("ALTER TABLE {radioactivity} RENAME COLUMN nid TO id");
62 $ret[]=update_sql("ALTER TABLE {radioactivity} ADD COLUMN class varchar(7) NULL");
63 $ret[]=update_sql("UPDATE {radioactivity} SET class='node'");
64 $ret[]=update_sql("ALTER TABLE {radioactivity} ALTER COLUMN class SET NOT NULL");
65 $ret[]=update_sql("ALTER TABLE {radioactivity} ADD PRIMARY KEY (id, class, decay_profile)");
66 break;
67 }
68
69 // update decay profiles
70 $profiles=variable_get('radioactivity_profiles', NULL);
71 $new_profiles=array();
72 if (is_array($profiles)) {
73 foreach ($profiles as $dpid => $profile) {
74 $new_profiles[$dpid]=_radioactivity_upgrade_profile($profile);
75 $ret[]=array('success' => TRUE, 'query' => t('Profile %label (id=%id) upgraded',
76 array('%label' => $new_profiles[$dpid]['label'],
77 '%id' => $dpid)));
78 }
79
80 variable_set('radioactivity_profiles', $new_profiles);
81 }
82
83 // enable radioactivity_node
84 module_rebuild_cache();
85 module_list(TRUE, FALSE);
86 drupal_install_modules(array('radioactivity_node'));
87 $ret[]=array('success' => TRUE, 'query' => t('Installed module %m', array('%m' => 'radioactivity_node')));
88
89 $ret[]=update_sql("INSERT INTO {radioactivity_node_clicks} (nid,uid,remote_address,click_timestamp) ".
90 "SELECT nid,uid,remote_address,click_timestamp FROM {radioactivity_clicks}");
91 $ret[]=update_sql("DROP TABLE {radioactivity_clicks}");
92
93 return $ret;
94 }
95
96 function _radioactivity_upgrade_profile($profile) {
97 $ret=array();
98 if (isset($profile['label'])) $ret['label']=$profile['label'];
99 if (isset($profile['description'])) $ret['description']=$profile['description'];
100 if (isset($profile['half_life'])) $ret['half_life']=$profile['half_life'];
101 if (isset($profile['cut_off_energy'])) $ret['cut_off_energy']=$profile['cut_off_energy'];
102
103 $ret['energy']['node']=array('view' => $profile['energy_view'],
104 'comment_insert' => $profile['energy_comment_insert'],
105 'comment_publish' => $profile['energy_comment_publish']);
106 return $ret;
107 }
108
109 function _radioactivity_upgrade_view_get_legacy_dpid_from_field($field) {
110 $matches=array();
111
112 if (preg_match('@^radioactivity_(\d+)\.energy$@', $field, $matches)) {
113 return $matches[1];
114 } else {
115 return FALSE;
116 }
117 }
118
119 function _radioactivity_upgrade_view_get_legacy_dpid_from_tablename($tablename) {
120 $matches=array();
121
122 if (preg_match('@^radioactivity_(\d+)$@', $tablename, $matches)) {
123 return $matches[1];
124 } else {
125 return FALSE;
126 }
127 }
128
129
130 function _radioactivity_upgrade_view($view) {
131 $upgraded=FALSE;
132
133 // upgrade sorts when necessary
134 foreach (array_keys($view->sort) as $sortkey) {
135 if ($dpid=_radioactivity_upgrade_view_get_legacy_dpid_from_field($view->sort[$sortkey]['id'])) {
136 $view->sort[$sortkey]['field']='radioactivity_node_'.$dpid.'_s.energy';
137 $view->sort[$sortkey]['options']='radioactive';
138 $upgraded=TRUE;
139 }
140 }
141
142 // upgrade tablefields when necessary
143 foreach (array_keys($view->field) as $fieldkey) {
144 if ($dpid=_radioactivity_upgrade_view_get_legacy_dpid_from_tablename($view->field[$fieldkey]['tablename'])) {
145 $view->field[$fieldkey]['tablename']='radioactivity_node_'.$dpid.'_f';
146 $upgraded=TRUE;
147 }
148 }
149
150 // upgrade filters when necessary
151 foreach (array_keys($view->filter) as $filterkey) {
152 if ($dpid=_radioactivity_upgrade_view_get_legacy_dpid_from_field($view->filter[$filterkey]['field'])) {
153 $view->filter[$filterkey]['field']='radioactivity_node_'.$dpid.'_c.energy';
154 $upgraded=TRUE;
155 }
156 }
157
158 if ($upgraded) {
159 return $view;
160 } else {
161 return FALSE;
162 }
163 }
164
165 function radioactivity_update_2() {
166 $ret=array();
167
168 // views update
169 if (module_exists('views')) {
170 views_invalidate_cache();
171 $ret[]=array('success' => TRUE, 'query' => t('Views cache cleared'));
172 $view_upgraded=FALSE;
173 // list views
174 $result=db_query("SELECT vid, name FROM {view_view} ORDER BY NAME");
175 while ($row = db_fetch_object($result)) {
176 // get the view object
177 $view=views_load_view($row->vid);
178
179 $view=_radioactivity_upgrade_view($view);
180
181 if ($view) {
182 $success= _views_save_view($view) == $row->vid;
183 $ret[]=array('success' => $success, 'query' => t('Upgraded view %name(%vid)',
184 array('%name' => $row->name, '%vid' => $row->vid)));
185 $view_upgraded=TRUE;
186 }
187 }
188
189 if (!$view_upgraded) {
190 $ret[]=array('success' => TRUE, 'query' => t('No views needed upgrading'));
191 }
192 } else {
193 $ret[]=array('success' => TRUE, 'query' => t('Views not enabled, so skipping views upgrade'));
194 }
195
196 return $ret;
197 }

  ViewVC Help
Powered by ViewVC 1.1.2