Example #1
0
}
/* ===== As of LuxCal 2.7.3 ===== */
//renumber category sequence (now starting at 1)
$rSet = dbQuery("SELECT category_id AS cid FROM " . $calID . "_categories WHERE status >= 0 ORDER BY sequence");
if ($rSet !== false) {
    $count = 1;
    while ($row = mysql_fetch_assoc($rSet)) {
        dbQuery("UPDATE " . $calID . "_categories SET `sequence`=" . $count++ . " WHERE `category_id` = " . $row['cid']);
    }
}
/* ===== As of LuxCal 3.1.0 ===== */
//Add table x_sessdata to database
$result = dbQuery("SHOW TABLES LIKE 'x_sessdata'");
if (mysql_num_rows($result) == 0) {
    //table sessdata not existing
    createDbTable("sessdata");
}
//get calendar IDs
$rSet = dbQuery("SHOW TABLES LIKE '%settings'");
//get table prefixes
$calIDs = array();
while ($row = mysql_fetch_row($rSet)) {
    if (substr($row[0], -9, 1) == '_') {
        //has prefix_
        $calIDs[] = substr($row[0], 0, -9);
    }
}
foreach ($calIDs as $calID) {
    //do for all calendars in this db
    //process calendar settings for this calendar
    echo "<li>Processing calendar '{$calID}'\n";
Example #2
0
function upgradeDb()
{
    //upgrade $calID database from 2.7.2+
    /* === tables pre-processing === */
    //if users.sedit: set privs to 9 for admin accounts (sedit == 1)
    $stH = dbQuery("SELECT `sedit` FROM `users` LIMIT 1", 0);
    if ($stH) {
        //column 'sedit' present (V2.7.2)
        $stH = null;
        dbQuery("UPDATE `users` SET `privs` = 9 WHERE `sedit` = 1");
    }
    //if users.privs: table groups not existing - create and populate
    $stH = dbQuery("SELECT `privs` FROM `users` LIMIT 1", 0);
    if ($stH !== false) {
        //column 'privs' present
        $stH = null;
        createDbTable("groups");
        initGroups();
    }
    //create tables with new schema
    createDbTable("usersNew");
    createDbTable("groupsNew");
    createDbTable("categoriesNew");
    createDbTable("eventsNew");
    createDbTable("settingsNew");
    /* === tables version-processing === */
    dbTransaction('begin');
    do {
        //test if version < 3.1
        $stH = dbQuery("SELECT `approve` FROM `categories` LIMIT 1", 0);
        if (!$stH) {
            //column 'approve' not present - version 2.7
            $lcVUpg = '2.7';
            dbQuery("INSERT INTO `eventsNew` (`ID`, `private`, `title`, `venue`, `text1`, `catID`, `userID`, `editor`, `checked`, `notify`, `notMail`, `sDate`, `eDate`, `xDates`, `sTime`, `eTime`, `rType`, `rInterval`, `rPeriod`, `rMonth`, `rUntil`, `aDateTime`, `mDateTime`, `status`) \n\t\t\t\tSELECT `event_id`, `private`, `title`, `venue`, `description`, `category_id`, `user_id`, `editor`, `checked`, `notify`, `not_mail`, `s_date`, `e_date`, `x_dates`, `s_time`, `e_time`, `r_type`, `r_interval`, `r_period`, `r_month`, `r_until`, `a_date`, `m_date`, `status` FROM `events`");
            //copy content events table
            dbQuery("INSERT INTO `usersNew` (`ID`, `name`, `password`, `tPassword`, `email`, `groupID`, `language`, `login0`, `login1`, `loginCnt`, `status`) \n\t\t\t\tSELECT `user_id`, `user_name`, `password`, `temp_password`, `email`, `privs`, `language`, `login_0`, `login_1`, `login_cnt`, `status` FROM `users`");
            //copy content users table
            dbQuery("INSERT INTO `groupsNew` SELECT * FROM `groups`");
            //new table, no change
            dbQuery("INSERT INTO `categoriesNew` (`ID`, `name`, `sequence`, `repeat`, `color`, `bgColor`, `checkBx`, `checkLb`, `checkMk`, `status`) \n\t\t\t\tSELECT `category_id`, `name`, `sequence`, `rpeat`, `color`, `background`, `check2`, `label2`, `mark2`, `status` FROM `categories`");
            //copy content categories table
            dbQuery("INSERT INTO `settingsNew` (`name`, `value`, `outline`) \n\t\t\t\tSELECT `name`, `value`, `description` FROM `settings`");
            //copy content settings table
            break;
            //done
        }
        //test if version = 3.1
        $stH = dbQuery("SELECT `a_date` FROM `events` LIMIT 1", 0);
        if ($stH !== false) {
            //column 'a_date' present - version 3.1
            $lcVUpg = '3.1';
            dbQuery("INSERT INTO `eventsNew` (`ID`, `private`, `title`, `venue`, `text1`, `catID`, `userID`, `editor`, `approved`, `checked`, `notify`, `notMail`, `sDate`, `eDate`, `xDates`, `sTime`, `eTime`, `rType`, `rInterval`, `rPeriod`, `rMonth`, `rUntil`, `aDateTime`, `mDateTime`, `status`) \n\t\t\t\tSELECT `event_id`, `private`, `title`, `venue`, `description`, `category_id`, `user_id`, `editor`, `approved`, `checked`, `notify`, `not_mail`, `s_date`, `e_date`, `x_dates`, `s_time`, `e_time`, `r_type`, `r_interval`, `r_period`, `r_month`, `r_until`, `a_date`, `m_date`, `status` FROM `events`");
            //copy content events table
            dbQuery("INSERT INTO `usersNew` (`ID`, `name`, `password`, `tPassword`, `email`, `groupID`, `language`, `login0`, `login1`, `loginCnt`, `status`) \n\t\t\t\tSELECT `user_id`, `user_name`, `password`, `temp_password`, `email`, `privs`, `language`, `login_0`, `login_1`, `login_cnt`, `status` FROM `users`");
            //copy content users table
            dbQuery("INSERT INTO `groupsNew` SELECT * FROM `groups`");
            //new table, no change
            dbQuery("INSERT INTO `categoriesNew` (`ID`, `name`, `sequence`, `repeat`, `approve`, `color`, `bgColor`, `checkBx`, `checkLb`, `checkMk`, `status`) \n\t\t\t\tSELECT `category_id`, `name`, `sequence`, `rpeat`, `approve`, `color`, `background`, `chbox`, `chlabel`, `chmark`, `status` FROM `categories`");
            //copy content categories table
            dbQuery("INSERT INTO `settingsNew` (`name`, `value`, `outline`) \n\t\t\t\tSELECT `name`, `value`, `description` FROM `settings`");
            //copy content settings table
            break;
            //done
        }
        //test if version = 3.2
        $stH = dbQuery("SELECT `ID` FROM `events` LIMIT 1", 0);
        if (!$stH) {
            //column 'ID' not present - version 3.2
            $lcVUpg = '3.2';
            dbQuery("INSERT INTO `eventsNew` (`ID`, `private`, `title`, `venue`, `text1`, `text2`, `text3`, `catID`, `userID`, `editor`, `approved`, `checked`, `notify`, `notMail`, `sDate`, `eDate`, `xDates`, `sTime`, `eTime`, `rType`, `rInterval`, `rPeriod`, `rMonth`, `rUntil`, `aDateTime`, `mDateTime`, `status`) \n\t\t\t\tSELECT `event_id`, `private`, `title`, `venue`, `description`, `xfield1`, `xfield2`, `category_id`, `user_id`, `editor`, `approved`, `checked`, `notify`, `not_mail`, `s_date`, `e_date`, `x_dates`, `s_time`, `e_time`, `r_type`, `r_interval`, `r_period`, `r_month`, `r_until`, `a_datetime`, `m_datetime`, `status` FROM `events`");
            //copy content events table
            dbQuery("INSERT INTO `usersNew` (`ID`, `name`, `password`, `tPassword`, `email`, `groupID`, `language`, `login0`, `login1`, `loginCnt`, `status`) \n\t\t\t\tSELECT `user_id`, `user_name`, `password`, `temp_password`, `email`, `privs`, `language`, `login_0`, `login_1`, `login_cnt`, `status` FROM `users`");
            //copy content users table
            dbQuery("INSERT INTO `groupsNew` SELECT * FROM `groups`");
            //new table, no change
            dbQuery("INSERT INTO `categoriesNew` (`ID`, `name`, `sequence`, `repeat`, `approve`, `color`, `bgColor`, `checkBx`, `checkLb`, `checkMk`, `status`) \n\t\t\t\tSELECT `category_id`, `name`, `sequence`, `rpeat`, `approve`, `color`, `background`, `chbox`, `chlabel`, `chmark`, `status` FROM `categories`");
            //copy content categories table
            dbQuery("INSERT INTO `settingsNew` (`name`, `value`, `outline`) \n\t\t\t\tSELECT `name`, `value`, `description` FROM `settings`");
            //copy content settings table
            break;
            //done
        }
        //test if version = 4.1
        $stH = dbQuery("SELECT `dayColor` FROM `categories` LIMIT 1", 0);
        if (!$stH) {
            //column 'dayColor' not present - version 4.1
            $lcVUpg = '4.1';
            dbQuery("INSERT INTO `eventsNew` (`ID`, `private`, `title`, `venue`, `text1`, `text2`, `text3`, `catID`, `userID`, `editor`, `approved`, `checked`, `notify`, `notMail`, `sDate`, `eDate`, `xDates`, `sTime`, `eTime`, `rType`, `rInterval`, `rPeriod`, `rMonth`, `rUntil`, `aDateTime`, `mDateTime`, `status`) \n\t\t\t\tSELECT `ID`, `private`, `title`, `venue`, `text1`, `text2`, `text3`, `catID`, `userID`, `editor`, `approved`, `checked`, `notify`, `notMail`, `sDate`, `eDate`, `xDates`, `sTime`, `eTime`, `rType`, `rInterval`, `rPeriod`, `rMonth`, `rUntil`, `aDateTime`, `mDateTime`, `status` FROM `events`");
            //copy content events table
            dbQuery("INSERT INTO `usersNew` (`ID`, `name`, `password`, `tPassword`, `email`, `groupID`, `language`, `login0`, `login1`, `loginCnt`, `status`) \n\t\t\t\tSELECT `ID`, `name`, `password`, `tPassword`, `email`, `groupID`, `language`, `login0`, `login1`, `loginCnt`, `status` FROM `users`");
            //copy content users table
            dbQuery("INSERT INTO `groupsNew` (`ID`, `name`, `privs`, `catIDs`, `color`, `status`) \n\t\t\t\tSELECT `ID`, `name`, `privs`, `catIDs`, `color`, `status` FROM `groups`");
            //copy content groups table
            dbQuery("INSERT INTO `categoriesNew` (`ID`, `name`, `sequence`, `repeat`, `approve`, `color`, `bgColor`, `checkBx`, `checkLb`, `checkMk`, `status`) \n\t\t\t\tSELECT `ID`, `name`, `sequence`, `repeat`, `approve`, `color`, `bgColor`, `checkBx`, `checkLb`, `checkMk`, `status` FROM `categories`");
            //copy content categories table
            dbQuery("INSERT INTO `settingsNew` SELECT * FROM `settings`");
            //copy content settings table
            break;
            //done
        }
        //test if version = 4.2
        $stH = dbQuery("SELECT `noverlap` FROM `categories` LIMIT 1", 0);
        if (!$stH) {
            //column 'overlay' not present - version 4.2
            $lcVUpg = '4.2';
            dbQuery("INSERT INTO `eventsNew` SELECT * FROM `events`");
            //copy content events table
            dbQuery("INSERT INTO `usersNew` SELECT * FROM `users`");
            //copy content users table
            dbQuery("INSERT INTO `groupsNew` (`ID`, `name`, `privs`, `catIDs`, `color`, `status`) \n\t\t\t\tSELECT `ID`, `name`, `privs`, `catIDs`, `color`, `status` FROM `groups`");
            //copy content groups table
            dbQuery("INSERT INTO `categoriesNew` (`ID`, `name`, `sequence`, `repeat`, `approve`, `dayColor`, `color`, `bgColor`, `checkBx`, `checkLb`, `checkMk`, `status`) \n\t\t\t\tSELECT `ID`, `name`, `sequence`, `repeat`, `approve`, `dayColor`, `color`, `bgColor`, `checkBx`, `checkLb`, `checkMk`, `status` FROM `categories`");
            //copy content categories table
            dbQuery("INSERT INTO `settingsNew` SELECT * FROM `settings`");
            //copy content settings table
            break;
            //done
        }
        //version = current version (no changes)
        $lcVUpg = '4.3';
        dbQuery("INSERT INTO `eventsNew` SELECT * FROM `events`");
        dbQuery("INSERT INTO `usersNew` SELECT * FROM `users`");
        dbQuery("INSERT INTO `groupsNew` SELECT * FROM `groups`");
        dbQuery("INSERT INTO `categoriesNew` SELECT * FROM `categories`");
        dbQuery("INSERT INTO `settingsNew` SELECT * FROM `settings`");
    } while (0);
    //end of: process calendar $calID
    /* === tables post-processing === */
    $stH = dbQuery("SELECT `privs` FROM `users` LIMIT 1", 0);
    if ($stH !== false) {
        //privs found, table groups is new
        $stH = null;
        //convert users.groupID (old privs) to new groupID
        $groups = array(0 => 1, 9 => 2, 1 => 3, 2 => 4, 3 => 5, 4 => 6);
        $stH = dbQuery("SELECT `ID`, `groupID` FROM `usersNew`");
        //get groupID (old privs)
        while ($row = $stH->fetch(PDO::FETCH_ASSOC)) {
            dbQuery("UPDATE `usersNew` SET `groupID` = {$groups[$row['groupID']]} WHERE `ID` = {$row['ID']}");
        }
    }
    //groups.ID and users.groupID: renumber ID starting from 1
    $stH = dbQuery("SELECT * FROM `groupsNew` WHERE `ID` = 0");
    if ($row = $stH->fetch(PDO::FETCH_NUM)) {
        //column 'ID' = 0 exists - renumber
        $stH = dbQuery("SELECT `ID` FROM `groupsNew` ORDER BY `ID` DESC");
        while ($row = $stH->fetch(PDO::FETCH_ASSOC)) {
            dbQuery("UPDATE `groupsNew` SET `ID` = `ID` + 1 WHERE `ID` = {$row['ID']}");
            //must be done in reverse order
        }
        dbQuery("UPDATE `usersNew` SET `groupID` = `groupID` + 1");
    }
    //correct groupIDs admin (3 -> 2) and read-access (2 -> 3)
    $stH = dbQuery("SELECT `ID`, `groupID` FROM `usersNew` WHERE `ID` = 2 and `groupID` = 3", 0);
    //admin in group 3
    if ($row = $stH->fetch(PDO::FETCH_NUM)) {
        dbQuery("UPDATE `groupsNew` SET `ID` = 100 WHERE `ID` = 2");
        //park read-only
        dbQuery("UPDATE `usersNew` SET `groupID` = 100 WHERE `groupID` = 2");
        //idem
        dbQuery("UPDATE `groupsNew` SET `ID` = 2 WHERE `ID` = 3");
        //set admin to 2
        dbQuery("UPDATE `usersNew` SET `groupID` = 2 WHERE `groupID` = 3");
        //idem
        dbQuery("UPDATE `groupsNew` SET `ID` = 3 WHERE `ID` = 100");
        //set parked to 3
        dbQuery("UPDATE `usersNew` SET `groupID` = 3 WHERE `groupID` = 100");
        //idem
    }
    //events.checked: ;dd-mm-yyyya -> ;dd-mm-yyyy and drop ;dd-mm-yyyyb
    $stH = dbQuery("SELECT `ID`,`checked` FROM `eventsNew` WHERE `checked` LIKE '%a%'");
    while ($row = $stH->fetch(PDO::FETCH_ASSOC)) {
        $chBoxed = preg_replace(array('~;\\d\\d\\d\\d-\\d\\d-\\d\\db~', '~(;\\d\\d\\d\\d-\\d\\d-\\d\\d)a~'), array('', '$1'), $row['checked']);
        //drop ;dd-mm-yyyyb and trim a in ;dd-mm-yyyya
        dbQuery("UPDATE `eventsNew` SET `checked`='{$chBoxed}' WHERE `ID` = {$row['ID']}");
    }
    //events.sTime/eTime: truncate time to 00:00
    $stH = dbQuery("SELECT `sTime` FROM `eventsNew` LIMIT 1");
    if ($row = $stH->fetch(PDO::FETCH_NUM)) {
        //column 'sTime' exists
        if (strlen($row[0]) > 5) {
            //truncate times
            dbQuery("UPDATE `eventsNew` SET `sTime` = substr(`sTime`,1,5),`eTime` = substr(`eTime`,1,5)");
        }
    }
    //events.aDateTime/mDateTime: truncate time to 00:00
    $stH = dbQuery("SELECT `aDateTime` FROM `eventsNew` LIMIT 1");
    if ($row = $stH->fetch(PDO::FETCH_NUM)) {
        //column 'aDateTime' exists
        if (strlen($row[0]) > 16) {
            //truncate time
            dbQuery("UPDATE `eventsNew` SET `aDateTime` = substr(`aDateTime`,1,16),`mDateTime` = substr(`mDateTime`,1,16)");
        }
        if (strlen($row[0]) < 16) {
            //pad to yyyy-mm-dd 00:00
            dbQuery("UPDATE `eventsNew` SET `aDateTime` = substr(`aDateTime`,1,10)||' 00:00',`mDateTime` = substr(`mDateTime`,1,10)||' 00:00'");
        }
    }
    $stH = null;
    //release statement handle
    //drop original tables and rename new upgraded tables
    dbQuery("DROP TABLE `users`");
    dbQuery("ALTER TABLE `usersNew` RENAME TO `users`");
    dbQuery("DROP TABLE `groups`");
    dbQuery("ALTER TABLE `groupsNew` RENAME TO `groups`");
    dbQuery("DROP TABLE `categories`");
    dbQuery("ALTER TABLE `categoriesNew` RENAME TO `categories`");
    dbQuery("DROP TABLE `events`");
    dbQuery("ALTER TABLE `eventsNew` RENAME TO `events`");
    dbQuery("DROP TABLE `settings`");
    dbQuery("ALTER TABLE `settingsNew` RENAME TO `settings`");
    dbTransaction('commit');
    return $lcVUpg;
}
Example #3
0
 }
 $resMsg[] = "<br>Target calendar {$calID}:";
 //prepare tables for INSERT
 if (in_array('categories', $selTabs)) {
     //categories table selected
     createDbTable("categories");
     //drop and recreate table
 }
 if (in_array('users', $selTabs)) {
     //users table selected
     createDbTable("users");
     //drop and recreate table
 }
 if (in_array('groups', $selTabs)) {
     //users table selected
     createDbTable("groups");
     //drop and recreate table
 }
 if (in_array('settings', $selTabs)) {
     //settings table selected
     $stH = dbQuery("DELETE FROM `settings` WHERE `name` NOT LIKE 'calendar%'");
     //empty table, except calendar values
 }
 $eveCnt = $catCnt = $useCnt = $groCnt = $setCnt = 0;
 //init counters
 dbTransaction('begin');
 foreach ($sqlInsArr as $query) {
     //insert records
     $stH = dbQuery($query);
     if (!$stH) {
         break;
Example #4
0
        }
        if (!$catSaved) {
            $errMsg[] = "Can not save init data to Categories table<br>Check your database permissions.\n";
            break;
        }
        if (!$usrSaved) {
            $errMsg[] = "Can not save init data to Users table<br>Check your database permissions.\n";
            break;
        }
        if (!$setSaved) {
            $errMsg[] = "Can not save default calendar settings in the Settings table. Check database permissions.</p>\n";
            break;
        }
    }
    //create session data table
    $tabSes = createDbTable('sessdata');
    if (!$tabSes) {
        $errMsg[] = "Can not create session data table<br>please check your database permissions\n";
    }
}
if ($save or $install and empty($errMsg)) {
    //Save LuxCal version and db credentials to lcconfig.php
    $lcconfig = '<?php
/*
= LuxCal event calendar configuration =

© Copyright 2009-2014 LuxSoft - www.LuxSoft.eu

This file is part of the LuxCal Web Calendar.
*/
$lcc="' . $lcVersion . '"; //current LuxCal version