You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
134 lines
4.6 KiB
134 lines
4.6 KiB
2 years ago
|
<?php
|
||
|
|
||
|
/**
|
||
|
* interface/main/holidays/Holidays_Storage.php holidays/clinic interaction with the database
|
||
|
*
|
||
|
* This class contains all the interaction with the database
|
||
|
* that are used by the holidays/clinic closed events.
|
||
|
*
|
||
|
* @package OpenEMR
|
||
|
* @link http://www.open-emr.org
|
||
|
* @author sharonco <sharonco@matrix.co.il>
|
||
|
* @copyright Copyright (c) 2016 Sharon Cohen <sharonco@matrix.co.il>
|
||
|
* @license https://github.com/openemr/openemr/blob/master/LICENSE GNU General Public License 3
|
||
|
*/
|
||
|
|
||
|
class Holidays_Storage
|
||
|
{
|
||
|
const TABLE_NAME = "calendar_external";
|
||
|
const CALENDAR_CATEGORY_HOLIDAY = "6";
|
||
|
const CALENDAR_CATEGORY_CLOSED = "7";
|
||
|
|
||
|
/**
|
||
|
* This function selects ALL the holidays from the table calendar_external and returns an array
|
||
|
* @return array
|
||
|
*/
|
||
|
public function get_holidays()
|
||
|
{
|
||
|
$holidays = array();
|
||
|
$sql = "SELECT * FROM " . escape_table_name(self::TABLE_NAME);
|
||
|
$res = sqlStatement($sql);
|
||
|
while ($row = sqlFetchArray($res)) {
|
||
|
$holidays[] = $row;
|
||
|
}
|
||
|
|
||
|
return $holidays;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Selects holidays/closed clinic events from the table events in a range of dates
|
||
|
* @param $star_date
|
||
|
* @param $end_date
|
||
|
* @return array [0=>"2016/06/16"]
|
||
|
*/
|
||
|
public static function get_holidays_by_dates($start_date, $end_date)
|
||
|
{
|
||
|
$holidays = array();
|
||
|
$sql = 'SELECT * FROM openemr_postcalendar_events WHERE (pc_catid = ? OR pc_catid = ?) AND pc_eventDate >= ? AND pc_eventDate <= ?';
|
||
|
$res = sqlStatement($sql, array(self::CALENDAR_CATEGORY_HOLIDAY,self::CALENDAR_CATEGORY_CLOSED,$start_date,$end_date));
|
||
|
while ($row = sqlFetchArray($res)) {
|
||
|
$holidays[] = $row['pc_eventDate'];
|
||
|
}
|
||
|
|
||
|
return $holidays;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* From an array of holidays creates a row that will be inserted as an event to be used in the calendar
|
||
|
* The holidays array must contai the date=>DD/MM/YYY, description=>"string"
|
||
|
* @param array $holidays
|
||
|
*/
|
||
|
public function create_events(array $holidays)
|
||
|
{
|
||
|
$deleted = false;
|
||
|
foreach ($holidays as $holiday) {
|
||
|
if (!$deleted) {
|
||
|
$this->delete_holiday_events();
|
||
|
$deleted = true;
|
||
|
}
|
||
|
|
||
|
$row = array(
|
||
|
self::CALENDAR_CATEGORY_HOLIDAY,//catgory
|
||
|
0,//authid
|
||
|
0,//pid
|
||
|
$holiday['description'],//title
|
||
|
$holiday['date'],//date
|
||
|
86400,//duration all day in seconds
|
||
|
"a:6:{s:17:\"event_repeat_freq\";s:1:\"0\";s:22:\"event_repeat_freq_type\";s:1:\"0\";s:19:\"event_repeat_on_num\";s:1:\"1\";s:19:\"event_repeat_on_day\";s:1:\"0\";s:20:\"event_repeat_on_freq\";s:1:\"0\";s:6:\"exdate\";s:0:\"\";}",
|
||
|
1,//allday
|
||
|
1,//status
|
||
|
isset($_SESSION['pc_facility']) ? $_SESSION['pc_facility'] : 0,//facility
|
||
|
2 //SHARING_PUBLIC
|
||
|
);
|
||
|
|
||
|
$pc_eid = sqlInsert(
|
||
|
"INSERT INTO openemr_postcalendar_events ( " .
|
||
|
"pc_catid, pc_aid, pc_pid, pc_title, pc_time, " .
|
||
|
"pc_eventDate, pc_duration, " . "pc_recurrspec, pc_alldayevent, " . " pc_eventstatus, pc_facility,pc_sharing" .
|
||
|
") VALUES (?,?,?,?,NOW(),?,?,?,?,?,?,?)",
|
||
|
$row
|
||
|
);
|
||
|
}
|
||
|
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* This function opend the $file(csv) and parses it to insert the values in the calendar_external so later they can be imported as events
|
||
|
* csv format -> date,description
|
||
|
* Example:
|
||
|
* 2016/12/24,Christmas
|
||
|
* @param $file (string containing the file name)
|
||
|
*/
|
||
|
public function import_holidays($file)
|
||
|
{
|
||
|
$data = array();
|
||
|
$handle = fopen($file, "r");
|
||
|
$deleted = false;
|
||
|
do {
|
||
|
if ($data[0]) {
|
||
|
if (!$deleted) {
|
||
|
$this->delete_calendar_external();
|
||
|
$deleted = true;
|
||
|
}
|
||
|
|
||
|
$row = array($data[0],$data[1]);
|
||
|
sqlStatement("INSERT INTO " . escape_table_name(self::TABLE_NAME) . "(date,description,source)" . " VALUES (?,?,'csv')", $row);
|
||
|
}
|
||
|
} while ($data = fgetcsv($handle, 1000, ",", "'"));
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
private function delete_calendar_external()
|
||
|
{
|
||
|
$sql = "TRUNCATE TABLE " . escape_table_name(self::TABLE_NAME);
|
||
|
$res = sqlStatement($sql);
|
||
|
}
|
||
|
|
||
|
private function delete_holiday_events()
|
||
|
{
|
||
|
$sql = "DELETE FROM openemr_postcalendar_events WHERE pc_catid = ?";
|
||
|
sqlStatement($sql, array(self::CALENDAR_CATEGORY_HOLIDAY));
|
||
|
}
|
||
|
}
|