00001 <?php
00002
00003
00004
00005
00006
00007
00008 function panels_install() {
00009 switch ($GLOBALS['db_type']) {
00010 case 'pgsql':
00011 db_query(<<<EOT
00012 CREATE TABLE {panels_page} (
00013 pid integer NOT NULL DEFAULT 0,
00014 name varchar(255) UNIQUE,
00015 did integer,
00016 title varchar(128),
00017 access varchar(128),
00018 path varchar(128),
00019 css_id varchar(128),
00020 css text,
00021 arguments text,
00022 displays text,
00023 contexts text,
00024 relationships text,
00025 no_blocks smallint DEFAULT 0,
00026 switcher_type varchar(128),
00027 switcher_name varchar(128),
00028 switcher_options text,
00029 -- menu fields
00030 menu smallint DEFAULT 0,
00031 menu_tab smallint,
00032 menu_tab_weight smallint,
00033 menu_title varchar(255),
00034 menu_tab_default smallint,
00035 menu_tab_default_parent_type varchar(10),
00036 menu_parent_title varchar(255),
00037 menu_parent_tab_weight smallint,
00038 PRIMARY KEY (pid)
00039 );
00040 EOT
00041 );
00042 db_query("CREATE SEQUENCE {panels_page}_pid_seq;");
00043 db_query("CREATE INDEX {panels_page}_path_idx ON {panels_page} (path);");
00044 db_query("CREATE INDEX {panels_page}_name_idx ON {panels_page} (name);");
00045
00046 db_query(<<<EOT
00047 CREATE TABLE {panels_display} (
00048 did integer NOT NULL DEFAULT 0,
00049 layout varchar(32),
00050 layout_settings text,
00051 panel_settings text,
00052 cache text,
00053 title varchar(128),
00054 hide_title smallint DEFAULT 0,
00055 PRIMARY KEY (did)
00056 );
00057 EOT
00058 );
00059 db_query("CREATE SEQUENCE {panels_display}_did_seq;");
00060 db_query("CREATE INDEX {panels_display}_name_idx ON {panels_page} (name);");
00061
00062 db_query(<<<EOT
00063 CREATE TABLE {panels_pane} (
00064 pid integer NOT NULL DEFAULT 0,
00065 did integer NOT NULL DEFAULT 0,
00066 panel varchar(32),
00067 type varchar(32),
00068 subtype varchar(64),
00069 shown smallint DEFAULT 1,
00070 access varchar(128),
00071 visibility text,
00072 configuration text,
00073 cache text,
00074 position smallint,
00075 PRIMARY KEY (pid)
00076 );
00077 EOT
00078 );
00079 db_query("CREATE SEQUENCE {panels_pane}_pid_seq;");
00080 db_query("CREATE INDEX {panels_pane}_did_idx ON {panels_pane} (did);");
00081 db_query(<<<EOT
00082 CREATE TABLE {panels_object_cache} (
00083 sid varchar(64),
00084 did integer,
00085 obj varchar(255),
00086 timestamp integer,
00087 data text
00088 );
00089 EOT
00090 );
00091 db_query("CREATE INDEX {panels_object_cache}_idx ON {panels_object_cache} (sid, obj, did);");
00092 db_query("CREATE INDEX {panels_object_cache}_time_idx ON {panels_object_cache} (timestamp);");
00093 break;
00094
00095 case 'mysql':
00096 case 'mysqli':
00097 db_query(<<<EOT
00098 CREATE TABLE {panels_page} (
00099 pid int(10) NOT NULL DEFAULT 0 PRIMARY KEY,
00100 name varchar(255) UNIQUE,
00101 did int(10),
00102 title varchar(128),
00103 access varchar(128),
00104 path varchar(128),
00105 css_id varchar(128),
00106 css longtext,
00107 arguments longtext,
00108 displays longtext,
00109 contexts longtext,
00110 relationships longtext,
00111 no_blocks int(1) DEFAULT 0,
00112 switcher_type varchar(128),
00113 switcher_name varchar(128),
00114 switcher_options longtext,
00115 -- menu fields
00116 menu int(1) DEFAULT 0,
00117 menu_tab int(1),
00118 menu_tab_weight int(4),
00119 menu_title varchar(255),
00120 menu_tab_default int(1),
00121 menu_tab_default_parent_type varchar(10),
00122 menu_parent_title varchar(255),
00123 menu_parent_tab_weight int(4),
00124 KEY path (path)
00125 )
00126 EOT
00127 );
00128
00129 db_query(<<<EOT
00130 CREATE TABLE {panels_display} (
00131 did INT(10) NOT NULL DEFAULT 0 PRIMARY KEY,
00132 layout varchar(32),
00133 layout_settings longtext,
00134 panel_settings longtext,
00135 cache text,
00136 title varchar(128),
00137 hide_title int(1) DEFAULT 0
00138 )
00139 EOT
00140 );
00141
00142 db_query(<<<EOT
00143 CREATE TABLE {panels_pane} (
00144 pid int(10) NOT NULL DEFAULT 0 PRIMARY KEY,
00145 did int(10) NOT NULL DEFAULT 0,
00146 panel varchar(32),
00147 type varchar(32),
00148 subtype varchar(64),
00149 shown int(1) DEFAULT 1,
00150 access varchar(128),
00151 visibility text,
00152 configuration longtext,
00153 cache longtext,
00154 position int(5),
00155 KEY (did)
00156 )
00157 EOT
00158 );
00159 db_query(<<<EOT
00160 CREATE TABLE {panels_object_cache} (
00161 sid varchar(64),
00162 did integer,
00163 obj varchar(255),
00164 data longtext,
00165 timestamp integer,
00166 KEY (sid, obj, did),
00167 KEY (timestamp)
00168 )
00169 EOT
00170 );
00171 }
00172 db_query("UPDATE {system} SET weight = 10 WHERE name = 'panels'");
00173
00174 if (!module_exists('panels_page')) {
00175 $panels_path = base_path() . drupal_get_path('module', 'panels');
00176 drupal_set_message(t('If you have not already enabled the Panel pages module, you are encouraged to do so.'));
00177 }
00178 }
00179
00180 function panels_uninstall() {
00181 switch ($GLOBALS['db_type']) {
00182 case 'pgsql':
00183 db_query("DROP SEQUENCE {panels_page}_pid_seq");
00184 db_query("DROP SEQUENCE {panels_pane}_pid_seq");
00185 db_query("DROP SEQUENCE {panels_display}_did_seq");
00186 db_query("DROP TABLE {panels_display}");
00187 db_query("DROP TABLE {panels_pane}");
00188 db_query("DROP TABLE {panels_page}");
00189 db_query("DROP TABLE {panels_object_cache}");
00190 break;
00191
00192 case 'mysql':
00193 case 'mysqli':
00194 db_query("DROP TABLE IF EXISTS {panels_display}");
00195 db_query("DROP TABLE IF EXISTS {panels_pane}");
00196 db_query("DROP TABLE IF EXISTS {panels_page}");
00197 db_query("DROP TABLE IF EXISTS {panels_object_cache}");
00198 break;
00199 }
00200 }
00201
00202
00203
00204
00205 function panels_update_1() {
00206 return _system_update_utf8(array('panels_info', 'panels_area'));
00207 }
00208
00209 function panels_update_1000() {
00210 $ret = array();
00211 $ret[] = update_sql("ALTER TABLE {panels_info} RENAME {panels_page}");
00212 $ret[] = update_sql("ALTER TABLE {panels_page} CHANGE COLUMN did pid int(10) NOT NULL DEFAULT 0;");
00213 $ret[] = update_sql("ALTER TABLE {panels_page} ADD COLUMN did int(10) NOT NULL DEFAULT 0 AFTER pid");
00214 $ret[] = update_sql("UPDATE {panels_page} SET did = pid");
00215
00216 $max_pid = db_result(db_query("SELECT MAX(pid) FROM {panels_page}"));
00217 if ($max_pid) {
00218 $ret[] = update_sql("INSERT INTO {sequences} (name, id) VALUES ('{panels_page}_pid', $max_pid)");
00219 }
00220
00221 $ret[] = update_sql("ALTER TABLE {panels_area} RENAME {panels_pane}");
00222 $ret[] = update_sql("ALTER TABLE {panels_pane} ADD COLUMN pid int(10) NOT NULL DEFAULT 0 FIRST");
00223 $ret[] = update_sql("ALTER TABLE {panels_pane} CHANGE area panel varchar(32)");
00224 $result = db_query("SELECT * FROM {panels_pane}");
00225 while ($pane = db_fetch_object($result)) {
00226 $count++;
00227 $ret[] = update_sql("UPDATE {panels_pane} SET pid = $count WHERE did = $pane->did AND panel = '$pane->panel' AND position = $pane->position");
00228 }
00229 if ($count) {
00230 $ret[] = update_sql("INSERT INTO {sequences} (name, id) VALUES ('{panels_pane}_pid', $count)");
00231 }
00232
00233 $ret[] = update_sql(<<<EOT
00234 CREATE TABLE {panels_display} (
00235 did INT(10) NOT NULL DEFAULT 0 PRIMARY KEY,
00236 layout VARCHAR(32)
00237 )
00238 EOT
00239 );
00240 $result = db_query("SELECT did, layout FROM {panels_page}");
00241 $max_did = 0;
00242 while ($display = db_fetch_object($result)) {
00243 $ret[] = update_sql("INSERT INTO {panels_display} VALUES ($display->did, '$display->layout')");
00244 if ($display->did > $max_did) {
00245 $max_did = $display->did;
00246 }
00247 }
00248 $ret[] = update_sql("ALTER TABLE {panels_page} DROP COLUMN layout");
00249 if ($max_did) {
00250 $ret[] = update_sql("INSERT INTO {sequences} (name, id) VALUES ('{panels_display}_did', $max_did)");
00251 }
00252 return $ret;
00253 }
00254
00255 function panels_update_1001() {
00256 $ret = array();
00257 $ret[] = update_sql("ALTER TABLE {panels_page} ADD COLUMN no_blocks int(1)");
00258 $ret[] = update_sql("ALTER TABLE {panels_page} ADD COLUMN menu int(1) DEFAULT 0");
00259 $ret[] = update_sql("ALTER TABLE {panels_page} ADD COLUMN menu_tab int(1)");
00260 $ret[] = update_sql("ALTER TABLE {panels_page} ADD COLUMN menu_tab_weight int(4)");
00261 $ret[] = update_sql("ALTER TABLE {panels_page} ADD COLUMN menu_title varchar(255)");
00262 $ret[] = update_sql("ALTER TABLE {panels_page} ADD COLUMN menu_tab_default int(1)");
00263 $ret[] = update_sql("ALTER TABLE {panels_page} ADD COLUMN menu_tab_default_parent_type varchar(10)");
00264 $ret[] = update_sql("ALTER TABLE {panels_page} ADD COLUMN menu_parent_title varchar(255)");
00265 $ret[] = update_sql("ALTER TABLE {panels_page} ADD COLUMN menu_parent_tab_weight int(4)");
00266 return $ret;
00267 }
00268
00269
00270 function panels_update_1002() {
00271 $ret = array();
00272 $ret[] = update_sql("ALTER TABLE {panels_display} ADD COLUMN layout_settings longtext");
00273 $ret[] = update_sql("ALTER TABLE {panels_pane} ADD COLUMN access varchar(128) AFTER type");
00274 $ret[] = update_sql("ALTER TABLE {panels_page} ADD COLUMN css longtext AFTER css_id");
00275 return $ret;
00276 }
00277
00278
00279 function panels_update_1003() {
00280 $ret = array();
00281 $ret[] = update_sql("ALTER TABLE {panels_display} ADD COLUMN panel_settings longtext");
00282 return $ret;
00283 }
00284
00285
00286
00287 function panels_update_5204() {
00288 $ret = array();
00289 $ret[] = update_sql("ALTER TABLE {panels_page} ADD COLUMN name varchar(255) UNIQUE");
00290 $ret[] = update_sql("ALTER TABLE {panels_display} ADD COLUMN name varchar(255) UNIQUE");
00291
00292 $ret[] = update_sql("UPDATE {panels_page} SET name = CONCAT('panel_page_', pid)");
00293 $ret[] = update_sql("UPDATE {panels_display} SET name = CONCAT('display_', did)");
00294 return $ret;
00295 }
00296
00297
00298 function panels_update_5205() {
00299 $ret = array();
00300 $ret[] = update_sql("ALTER TABLE {panels_page} ADD COLUMN arguments longtext");
00301 return $ret;
00302 }
00303
00304
00305
00306 function panels_update_5206() {
00307 $ret = array();
00308 $ret[] = update_sql("ALTER TABLE {panels_pane} ADD COLUMN subtype varchar(64)");
00309 return $ret;
00310 }
00311
00312
00313 function panels_update_5207() {
00314 $ret = array();
00315 $ret[] = update_sql("ALTER TABLE {panels_page} ADD COLUMN displays longtext");
00316 $ret[] = update_sql("ALTER TABLE {panels_page} ADD COLUMN contexts longtext");
00317 return $ret;
00318 }
00319
00320
00321 function panels_update_5208() {
00322 $ret = array();
00323 $count = db_result(db_query("SELECT MAX(did) FROM {panels_display}"));
00324 $ret[] = update_sql("DELETE FROM {sequences} WHERE name = '{panels_display}_did'");
00325 $ret[] = update_sql("DELETE FROM {sequences} WHERE name = '{panels_display}_id'");
00326 if ($count) {
00327 $ret[] = update_sql("INSERT INTO {sequences} (name, id) VALUES ('{panels_display}_did',
00328 $count)");
00329 }
00330
00331 return $ret;
00332 }
00333
00334
00335 function panels_update_5209() {
00336 $ret = array();
00337 $ret[] = update_sql("ALTER TABLE {panels_page} ADD COLUMN relationships longtext");
00338 $result = db_query("SELECT * FROM {panels_page}");
00339 panels_load_include('plugins');
00340
00341 while ($page = db_fetch_object($result)) {
00342 $args = unserialize($page->arguments);
00343 $arguments = $ids = $keywords = array();
00344 if (!empty($args)) {
00345
00346 foreach ($args as $id => $argument) {
00347 $name = $argument['name'];
00348 $info = panels_get_argument($name);
00349 if (!$info) {
00350 continue;
00351 }
00352
00353 if (empty($argument['id'])) {
00354 if (empty($ids[$name])) {
00355 $ids[$name] = 1;
00356 }
00357 else {
00358 $ids[$name]++;
00359 }
00360
00361 $argument['id'] = $ids[$name];
00362 }
00363
00364
00365 if (empty($argument['identifier'])) {
00366 $argument['identifier'] = $info['title'] . ($id > 1 ? ' ' . $id : '');
00367 error_log($argument['identifier']);
00368 }
00369
00370
00371 if (empty($argument['keyword'])) {
00372 $keyword = $base = $info['keyword'];
00373 $count = 0;
00374 while (!empty($keywords[$keyword])) {
00375 $keyword = $base . '_' . ++$count;
00376 }
00377 $keywords[$keyword] = TRUE;
00378 $argument['keyword'] = $keyword;
00379 error_log($argument['keyword']);
00380 }
00381 $arguments[$id] = $argument;
00382 }
00383 }
00384
00385
00386 $rels = unserialize($page->contexts);
00387
00388 $relationships = $ids = array();
00389 if (!empty($rels)) {
00390 foreach ($rels as $id => $relationship) {
00391 $name = $relationship['name'];
00392 $info = panels_get_relationship($name);
00393 if (!$info) {
00394 continue;
00395 }
00396
00397 if (empty($relationship['id'])) {
00398 if (empty($ids[$name])) {
00399 $ids[$name] = 1;
00400 }
00401 else {
00402 $ids[$name]++;
00403 }
00404
00405 $relationship['id'] = $ids[$name];
00406 }
00407
00408
00409 if (empty($relationship['identifier'])) {
00410 $relationship['identifier'] = $info['title'] . ($id > 1 ? ' ' . $id : '');
00411 }
00412
00413
00414 if (empty($relationship['keyword'])) {
00415 $keyword = $base = $info['keyword'];
00416 $count = 0;
00417 while (!empty($keywords[$keyword])) {
00418 $keyword = $base . '_' . ++$count;
00419 }
00420 $keywords[$keyword] = TRUE;
00421 $relationship['keyword'] = $keyword;
00422 }
00423 $relationships[$id] = $relationship;
00424 }
00425 }
00426 db_query("UPDATE {panels_page} " .
00427 "SET arguments = '%s', " .
00428 "relationships = '%s', " .
00429 "contexts = '%s' " .
00430 "WHERE pid = $page->pid", serialize($arguments), serialize($relationships), serialize(array()), $page->pid
00431 );
00432 }
00433 return $ret;
00434 }
00435
00436 function panels_update_5210() {
00437 $ret = array();
00438 $ret[] = update_sql("UPDATE {system} SET weight = 10 WHERE name = 'panels'");
00439 return $ret;
00440 }
00441
00442
00443
00444
00445 function panels_update_5211() {
00446 menu_rebuild();
00447 return array();
00448 }
00449
00450
00451
00452
00453 function panels_update_5212() {
00454 $ret = array();
00455 $ret[] = update_sql("CREATE INDEX {panels_page}_name_idx ON {panels_page} (name)");
00456 return $ret;
00457 }
00458
00459
00460
00461
00462 function panels_update_5213() {
00463 $ret = array();
00464 switch ($GLOBALS['db_type']) {
00465 case 'mysql':
00466 case 'mysqli':
00467 $ret[] = update_sql("ALTER TABLE {panels_pane} ADD COLUMN cache longtext AFTER configuration");
00468 $ret[] = update_sql("ALTER TABLE {panels_display} ADD COLUMN cache longtext AFTER panel_settings");
00469 break;
00470
00471 case 'pgsql':
00472 db_add_column($ret, 'panels_pane', 'cache', 'text');
00473 db_add_column($ret, 'panels_display', 'cache', 'text');
00474 }
00475 return $ret;
00476 }
00477
00478
00479
00480
00481
00482 function panels_update_5214() {
00483 $ret = array();
00484 switch ($GLOBALS['db_type']) {
00485 case 'mysql':
00486 case 'mysqli':
00487 $ret[] = update_sql(<<<EOT
00488 CREATE TABLE {panels_object_cache} (
00489 sid varchar(64),
00490 did integer,
00491 obj varchar(255),
00492 timestamp integer,
00493 data text,
00494 KEY (sid, obj, did),
00495 KEY (timestamp)
00496 )
00497 EOT
00498 );
00499 case 'pgsql':
00500 }
00501 return !empty($ret) ? $ret : $ret;
00502 }
00503
00504
00505
00506
00507
00508
00509
00510
00511 function panels_update_5215() {
00512 $ret = array();
00513 switch ($GLOBALS['db_type']) {
00514 case 'mysql':
00515 case 'mysqli':
00516 $ret[] = update_sql("ALTER TABLE {panels_object_cache} CHANGE COLUMN data data longtext");
00517 $ret[] = update_sql("ALTER TABLE {panels_page} DROP INDEX name_2");
00518 $ret[] = update_sql("ALTER TABLE {panels_object_cache} DROP INDEX {panels_object_cache}_idx");
00519 $ret[] = update_sql("ALTER TABLE {panels_pane} ADD PRIMARY KEY (pid)");
00520 break;
00521
00522 case 'pgsql':
00523 $ret[] = update_sql("ALTER TABLE {panels_pane} ADD PRIMARY KEY (pid)");
00524 }
00525 return $ret;
00526 }
00527
00528
00529
00530
00531
00532 function panels_update_5216() {
00533 $ret = array();
00534 switch ($GLOBALS['db_type']) {
00535 case 'mysql':
00536 case 'mysqli':
00537 $ret[] = update_sql("ALTER TABLE {panels_pane} ADD COLUMN shown int(1) DEFAULT 1 AFTER subtype");
00538 $ret[] = update_sql("ALTER TABLE {panels_display} ADD COLUMN title varchar(128) AFTER cache");
00539 $ret[] = update_sql("ALTER TABLE {panels_display} ADD COLUMN hide_title int(1) AFTER title");
00540 $ret[] = update_sql("ALTER TABLE {panels_display} DROP COLUMN name");
00541 $ret[] = update_sql("ALTER TABLE {panels_pane} ADD COLUMN visibility text AFTER access");
00542 break;
00543
00544 case 'pgsql':
00545 db_add_column($ret, 'panels_pane', 'shown', 'tinyint', array('default' => 1));
00546 db_add_column($ret, 'panels_display', 'title', 'varchar(128)');
00547 db_add_column($ret, 'panels_display', 'hide_title', 'tinyint', array('default' => 0));
00548 $ret = update_sql("ALTER TABLE {panels_display} DROP name");
00549 db_add_column($ret, 'panels_pane', 'visibility', 'text');
00550 }
00551 return $ret;
00552 }
00553
00554
00555
00556
00557 function panels_update_5217() {
00558 $ret = array();
00559 switch ($GLOBALS['db_type']) {
00560 case 'mysql':
00561 case 'mysqli':
00562 $ret[] = update_sql("ALTER TABLE {panels_page} ADD COLUMN switcher_type varchar(128) AFTER no_blocks");
00563 $ret[] = update_sql("ALTER TABLE {panels_page} ADD COLUMN switcher_name varchar(128) AFTER no_blocks");
00564 $ret[] = update_sql("ALTER TABLE {panels_page} ADD COLUMN switcher_options longtext AFTER switcher_type");
00565 break;
00566
00567 case 'pgsql':
00568 db_add_column($ret, 'panels_page', 'switcher_type', 'varchar(128)');
00569 db_add_column($ret, 'panels_page', 'switcher_name', 'varchar(128)');
00570 db_add_column($ret, 'panels_page', 'switcher_options', 'text');
00571 }
00572 return $ret;
00573 }
00574
00575
00576
00577
00578
00579
00580 function panels_update_5218() {
00581 $ret = array();
00582 switch ($GLOBALS['db_type']) {
00583 case 'mysql':
00584 case 'mysqli':
00585 $ret[] = array('success' => TRUE, 'query' => t('Update #5218 only has changes for PostgreSQL. There are no updates for MySQL databases - since you\'re running MySQL, you should consider this update successful.'));
00586 break;
00587
00588 case 'pgsql':
00589 db_add_column($ret, 'panels_pane', 'shown', 'smallint', array('default' => 1));
00590 db_add_column($ret, 'panels_display', 'hide_title', 'smallint', array('default' => 0));
00591 $ret[] = array('success' => TRUE, 'query' => t('You can disregard failed attempts to add new columns in update #5216 as long as the two queries preceding this text were successful.'));
00592 }
00593 return $ret;
00594 }
00595
00596
00597
00598
00599
00600
00601 function panels_update_5219() {
00602 $ret = array();
00603 $ret[] = array('success' => TRUE, 'query' => t('You are strongly encouraged to re-export any panels generated with a version of Panels prior to Release Candidate 2, as several fields were (incorrectly) being ommitted from all exports, and this updater is unable to update any panels already exported with missing fields.'));
00604 return $ret;
00605 }