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: 167:
<?php
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 .= '/';
if ( substr($path_ics,0,1) != '/' ) $path_ics = '/'.$path_ics;
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;
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");