コード例 #1
0
ファイル: mrbs_sql.php プロジェクト: rtsfc/moodle-block_mrbs
/** mrbsGetRepeatEntryList
 * 
 * Returns a list of the repeating entrys
 * 
 * $time     - The start time
 * $enddate  - When the repeat ends
 * $rep_type - What type of repeat is it
 * $rep_opt  - The repeat entrys
 * $max_ittr - After going through this many entrys assume an error has occured
 * $_initial_weeknumber - Save initial week number for use in 'monthly repeat same week number' case
 * 
 * Returns:
 *   empty     - The entry does not repeat
 *   an array  - This is a list of start times of each of the repeat entrys
 */
function mrbsGetRepeatEntryList($time, $enddate, $rep_type, $rep_opt, $max_ittr, $rep_num_weeks)
{
    $sec = date("s", $time);
    $min = date("i", $time);
    $hour = date("G", $time);
    $day = date("d", $time);
    $month = date("m", $time);
    $year = date("Y", $time);
    global $_initial_weeknumber;
    $_initial_weeknumber = (int) (($day - 1) / 7) + 1;
    $week_num = 0;
    $start_day = date('w', mktime($hour, $min, $sec, $month, $day, $year));
    $cur_day = $start_day;
    $entrys = "";
    for ($i = 0; $i < $max_ittr; $i++) {
        $time = mktime($hour, $min, $sec, $month, $day, $year);
        if ($time > $enddate) {
            break;
        }
        $entrys[$i] = $time;
        switch ($rep_type) {
            // Daily repeat
            case 1:
                $day += 1;
                break;
                // Weekly repeat
            // Weekly repeat
            case 2:
                $j = $cur_day = date("w", $entrys[$i]);
                // Skip over days of the week which are not enabled:
                while (($j = ($j + 1) % 7) != $cur_day && !$rep_opt[$j]) {
                    $day += 1;
                }
                $day += 1;
                break;
                // Monthly repeat
            // Monthly repeat
            case 3:
                $month += 1;
                break;
                // Yearly repeat
            // Yearly repeat
            case 4:
                $year += 1;
                break;
                // Monthly repeat on same week number and day of week
            // Monthly repeat on same week number and day of week
            case 5:
                $day += same_day_next_month($time);
                break;
                // n Weekly repeat
            // n Weekly repeat
            case 6:
                while (1) {
                    $day++;
                    $cur_day = ($cur_day + 1) % 7;
                    if ($cur_day % 7 == $start_day) {
                        $week_num++;
                    }
                    if ($week_num % $rep_num_weeks == 0 && $rep_opt[$cur_day] == 1) {
                        break;
                    }
                }
                break;
                // Unknown repeat option
            // Unknown repeat option
            default:
                return;
        }
    }
    return $entrys;
}
コード例 #2
0
ファイル: mrbs_sql.inc.php プロジェクト: rhertzog/lcs
/** mrbsGetRepeatEntryList
 *
 * Returns a list of the repeating entrys
 *
 * $time     - The start time
 * $enddate  - When the repeat ends
 * $rep_type - What type of repeat is it
 * $rep_opt  - The repeat entrys
 * $max_ittr - After going through this many entrys assume an error has occured
 * *$rep_jour_c - Le jour cycle d'une réservation, si aucun 0
 *
 * Returns:
 *   empty     - The entry does not repeat
 *   an array  - This is a list of start times of each of the repeat entrys
 */
function mrbsGetRepeatEntryList($time, $enddate, $rep_type, $rep_opt, $max_ittr, $rep_num_weeks, $rep_jour_c,$area)
{
    $sec   = date("s", $time);
    $min   = date("i", $time);
    $hour  = date("G", $time);
    $day   = date("d", $time);
    $month = date("m", $time);
    $year  = date("Y", $time);

    $entrys = "";
    $entrys_return = "";
    $k=0;
    for($i = 0; $i < $max_ittr; $i++)
    {
        $time = mktime($hour, $min, $sec, $month, $day, $year);
        if ($time > $enddate)
            break;
        $time2 = mktime(0, 0, 0, $month, $day, $year);

        if (!(est_hors_reservation($time2,$area))) {
            $entrys_return[$k] = $time;
            $k++;
        }
        $entrys[$i] = $time;
        switch($rep_type)
        {
            // Daily repeat
            case 1:
                $day += 1;
                break;

            // Weekly repeat
            case 2:
                $j = $cur_day = date("w", $entrys[$i]);
                // Skip over days of the week which are not enabled:
                while ((($j = ($j + 1) % (7*$rep_num_weeks)) != $cur_day && $j<7 &&!$rep_opt[$j]) or ($j>=7))
                {
                    $day += 1;
                }

                $day += 1;
                break;

            // Monthly repeat
            case 3:
                $month += 1;
                break;

            // Yearly repeat
            case 4:
                $year += 1;
                break;

            // Monthly repeat on same week number and day of week
            case 5:
                $day += same_day_next_month($time);
                break;

            // Si la périodicité est par Jours/Cycle
            case 6:
                $sql = "SELECT * FROM ".TABLE_PREFIX."_calendrier_jours_cycle WHERE DAY >= '".$time2."' AND DAY <= '".$enddate."' AND Jours = '".$rep_jour_c."'";
                $result = mysql_query($sql);
                $kk = 0;
                $tableFinale = array();
                while($table = mysql_fetch_array($result)){
                    $day   = date("d", $table['DAY']);
                    $month = date("m", $table['DAY']);
                    $year  = date("Y", $table['DAY']);
                    $tableFinale[$kk] = mktime($hour, $min, $sec, $month, $day, $year);
                    $kk++;
                }
                return $tableFinale;
                break;

            // Unknown repeat option
            default:
                return;
        }
    }

    return $entrys_return;
}