/usr/share/davical/htdocs/tools.php is in davical 1.1.1-1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 | <?php
/**
* Tools for manipulating calendars
*
* @package davical
* @subpackage DAViCalSession
* @author Maxime Delorme <mdelorme@tennaxia.com>
* @copyright Maxime Delorme
* @license http://gnu.org/copyleft/gpl.html GNU GPL v2
*/
require_once("./always.php");
require_once("DAViCalSession.php");
$session->LoginRequired();
require_once("DataEntry.php");
require_once("interactive-page.php");
require_once("classBrowser.php");
require_once("caldav-PUT-functions.php");
include_once('check_UTF8.php');
if ( !$session->AllowedTo("Admin" ) ) {
@ob_flush(); exit(0);
}
if( function_exists("sync_LDAP") && isset($_POST['Sync_LDAP'])){
sync_LDAP();
}
if( function_exists("sync_LDAP_groups") && isset($_POST['Sync_LDAP_groups'])){
sync_LDAP_groups();
}
if(isset($_POST['import_from_directory'])){
Tools::importFromDirectory();
}
class Tools {
function render(){
global $c;
echo $this->renderImportFromDirectory();
if ( isset($c->authenticate_hook['call']) && $c->authenticate_hook['call'] == 'LDAP_check' && function_exists("sync_LDAP") ) {
echo $this->renderSyncLDAP();
}
}
static function renderSyncLDAP(){
$html = '<div id="entryform">';
$html .= '<h1>'.translate('Sync LDAP with DAViCal') .'</h1>';
$data = (object) array('directory_path' => '/path/to/your/ics/files','calendar_path' => 'home');
$ef = new EntryForm( $_SERVER['REQUEST_URI'],$data , true,true );
$html .= "<table width=\"100%\" class=\"data\">\n";
$html .= $ef->StartForm( array("autocomplete" => "off" ) );
$html .= sprintf( "<tr><td style=\"text-align:left\" colspan=\"2\" >%s</td></tr>\n",
translate("This operation does the following: <ul><li>check valid users in LDAP directory</li> <li>check users in DAViCal</li></ul> then <ul><li>if a user is present in DAViCal but not in LDAP set him as inactive in DAViCal</li> <li>if a user is present in LDAP but not in DAViCal create the user in DAViCal</li> <li>if a user in present in LDAP and DAViCal then update information in DAViCal</li> </ul>"));
$html .= "</table>\n";
$html .= $ef->SubmitButton( "Sync_LDAP", translate('Submit'));
$html .= '<h1>'.translate('Sync LDAP Groups with DAViCal') .'</h1>';
$html .= "<table width=\"100%\" class=\"data\">\n";
$html .= $ef->StartForm( array("autocomplete" => "off" ) );
$html .= sprintf( "<tr><td style=\"text-align:left\" colspan=\"2\" >%s</td></tr>\n",
translate("This operation does the following: <ul><li>check valid groups in LDAP directory</li> <li>check groups in DAViCal</li></ul> then <ul><li>if a group is present in DAViCal but not in LDAP set as inactive in DAViCal</li> <li>if a group is present in LDAP but not in DAViCal create the group in DAViCal</li> <li>if a group in present in LDAP and DAViCal then update information in DAViCal</li> </ul>"));
$html .= "</table>\n";
$html .= $ef->SubmitButton( "Sync_LDAP_groups", translate('Submit'));
$html .= $ef->EndForm();
$html .= "</div>";
return $html;
}
static function renderImportFromDirectory(){
$html = '<div id="entryform">';
$html .= '<h1>'.translate('Import all .ics files of a directory') .'</h1>';
$html .= '<p>'.translate('This process will import each file in a directory named "username.ics" and create a user and calendar for each file to import.') .'</p>';
$data = (object) array('directory_path' => '/path/to/your/ics/files','calendar_path' => 'calendar');
$ef = new EntryForm( $_SERVER['REQUEST_URI'],$data , true,true );
$html .= "<table width=\"100%\" class=\"data\">\n";
$html .= $ef->StartForm( array("autocomplete" => "off" ) );
$html .= $ef->DataEntryLine( translate("path to store your ics"), "%s", "text", "calendar_path",
array( "size" => 20,
"title" => translate("Set the path to store your ics e.g. 'calendar' will be referenced as /caldav.php/username/calendar/"),
"help" => translate("<b>WARNING: all events in this path will be deleted before inserting allof the ics file</b>")
)
, '' );
$html .= $ef->DataEntryLine( translate("Directory on the server"), "%s", "text", "directory_path",
array( "size" => 20, "title" => translate("The path on the server where your .ics files are.")));
$html .= "</table>\n";
$html .= $ef->SubmitButton( "import_from_directory", translate('Submit'));
$html .= $ef->EndForm();
$html .= "</div>";
return $html;
}
static function importFromDirectory(){
global $c;
if(empty($_POST["calendar_path"])){
dbg_error_log( "importFromDirectory", "calendar path not given");
return ;
}
$path_ics = $_POST["calendar_path"];
if ( substr($path_ics,-1,1) != '/' ) $path_ics .= '/'; // ensure that we target a collection
if ( substr($path_ics,0,1) != '/' ) $path_ics = '/'.$path_ics; // ensure that we target a collection
if(empty($_POST["directory_path"])){
dbg_error_log( "importFromDirectory", "directory path not given");
return ;
}
$dir = $_POST["directory_path"];
if(!is_readable($dir)){
$c->messages[] = sprintf(i18n('directory %s is not readable'),htmlspecialchars($dir));
dbg_error_log( "importFromDirectory", "directory is not readable");
return ;
}
if ($handle = opendir($dir)) {
$c->readonly_webdav_collections = false; // Override this setting so we can create collections/events on import.
while (false !== ($file = readdir($handle))) {
if ($file == "." || $file == ".." || substr($file,-4) != '.ics') continue;
if ( !is_readable($dir.'/'.$file) ) {
dbg_error_log( "importFromDirectory", "ics file '%s' is not readable",$dir .'/'.$file);
continue;
}
$ics = file_get_contents($dir.'/'.$file);
$ics = trim($ics);
if ( $ics != '' ) {
if ( ! check_string($ics) ) {
$c->messages[] = sprintf(translate('The file "%s" is not UTF-8 encoded, please check error for more details'),$dir.'/'.$file);
continue;
}
$username = substr($file,0,-4);
$principal = new Principal('username',$username);
if ( !$principal->Exists() ) {
$c->messages[] = sprintf(translate('The principal "%s" does not exist'),$username);
continue;
}
$path = "/".$username.$path_ics;
$user_no = $principal->user_no();
if ( controlRequestContainer($username, $user_no, $path, false) === -1)
continue;
dbg_error_log( "importFromDirectory", "importing to $path");
import_collection($ics,$user_no,$path,1);
$c->messages[] = sprintf(translate('All events of user "%s" were deleted and replaced by those from file %s'),substr($file,0,-4),$dir.'/'.$file);
}
}
closedir($handle);
}
}
}
$Tools = new Tools();
include("page-header.php");
$Tools->render();
include("page-footer.php");
|