Nous sommes le Mer 25 Juin, 2025 21:08
Supprimer les cookies

Page 1 sur 21, 2 Suivantphpicalendar + Mozilla Calendar

Sur le logiciel libre en général ou un logiciel libre en particulier

Dim 09 Juil, 2006 13:16

J'ai un petit réseau local (3 machines sous windows) dont je me sers pour mon activité professionnelle. J'ai mis EasyPhp sur l'une des machines, et ça marche bien, j'ai un mini site spip qui tourne, les deux autres machines le voient très bien ;
Là, je voudrais avoir un calendrier partagé : j'ai installé l'extension Mozilla-calendar sur les trois machines, et Phpicalendar sur le serveur. Les trois machines le voient très bien ; mais aucune machine ne peut mettre à jour son calendrier sur le serveur ; voici un peu plus de détails ;

je n'ai pas mis de sécurité ( pas de .htaccess ) parce que ce petit réseau n'est pas connecté à internet.
chaque machine a son fichier .ics sur le serveur, dans phpicalendar/calendars ;

dans chaque mozilla-calendar j'ai mis le même fichier que sur le serveur et j'ai paramétré l'url de fichier distant,
j'ai coché "publier automatiquement les fichiers distants".

Malheureusement quand je fais une modif, le fichier distant n'est pas mis à jour. Et si je clique "actualiser les fichiers distants" le fichier distant (sans la modif) est rechargé, et la modif, perdue.

Il y a sûrement quelque chose que j'ai raté, mais quoi ? merci de votre aide !
plou

Messages : 18

Sam 20 Oct, 2007 10:39

bonjour
je rencontre le meme soucis avec un agenda sur un serveur internet chez hosteur.
j'utilise sunbird 0.5 et phpicalendar 2.24
est-ce que vous avez trouvé une solution à ce pb?
merci
stephane
sdesrousseaux

Messages : 9

Sam 20 Oct, 2007 17:20

Utilisez 0.3.1 de Sunbird - http://www.mozilla.org/projects/calendar/releases/sunbird0.3.1.html

Configurer le fichier config.inc.php, présent dans le dossier phpicalendar :shock:
Il faut nommer explicitement l'adresse du dossier phpicalendar dans la variable:
- $default_path = 'http://adresse ip de la machine serveur/phpicalendar'

Si vous n'avez pas besoin de "sécuriser" je vous conseille de mettre 'none' à la ligne suivante:
- $auth_method = 'none';

Maintenant 2 Etapes:

Etape 1 :
Fichier -> Nouvel agenda...
choisissez sur le réseau, puis sélectionné iCalendar (ICS),
donnez l'emplacement:

'http://adresse_ip_du_serveur/phpicalendar/calendars/nom_du_fichier.ics'

Puis, nommez votre agenda du même nom que le fichier nom_du_fichier.ics (sans .ics à la fin...)
Choisissez une couleur :D, puis Suivant ->Terminer

A ce stade l'agenda est créé dans Sunbird, mais le fichier n'est pas encore créé sur le serveur...

Etape 2 :
Faites un clic-droit sur l'agenda dans la liste, puis choisissez 'Publier l'agenda...'
Dans l'url de publication, donnez l'emplacement du fichier en passant par le fichier php de publication:

http://adresse_ip_du_serveur/phpicalendar/calendars/publish.php/nom_du_fichier.ics

A ce momment là le fichier est créé !!! :o YES !!!

Insérer maintenant un RDV TEST pour tester.

Depuis un autre poste vous pouvez maintenant vous abonner à cet agenda fraichement créé:

Fichier -> S'abonner à un agenda distant...

Suivre simplement l'étape 1.

Et voilà, le RDV TEST positionné apparait après 1 à 2 secondes.
Le lecteur ne pourra pas intervenir sur ce fichier. Si vous le souhaitez vous pouvez en suivant simplement l'étape2, lui permettre également de modifier votre agenda.

Voilà cela fonctionne très bien dans ma 'petite entreprise' avec n plus un accès externe depuis le .NET

Bon courrage,

darkan.
darkan

Messages : 3

Dim 21 Oct, 2007 12:37

bon, je viens de télécharger sunbird 0.3.1 et j'ai effectué un test en suivant exactement etape par etape vos explications... ce que j'avais deja fait avant!

le pb reste le meme, mon nouvel evenement n'apparait jamais en ligne apres avoir publié l'agenda et donc forcement quand j'actualise l'agenda le nouvel evenment disparait

il y a donc un autre pb: l'agenda n'est pas publié
- il n'y a en effet aucune trace de la publication dans publish_log.txt
- j'ai essayé l'adresse de publication dans firefox, il y a bien une trace dans publish_log.txt

alors, d'où vient le pb:
- est-ce que la publication de sunbird ne fonctionne pas?
- est-ce il y a un pb dans le fichier publish.php qui recupere pas les infos et met pas le fichier ics à jour?

si vous avez la solution je suis preneur

merci
stéphane
sdesrousseaux

Messages : 9

Dim 21 Oct, 2007 13:15

J'ai répondu essentiellement à la 1ère question, ce qui implique donc une connexion en local.
Il semble que votre pb vient du fait que votre hébergement est chez un 'hosteur'. (lequel?)

Dans ce cas il faut s'assurer de la version & la configuration de php:
- PHP 4.3.0 ou suppérieur
- PHP doit retourner la variable Apache $_SERVER['PATH_INFO']

De plus, il est INDISPENSABLE que les droits d'écriture sur le dossier 'calendars' soit actif: CHMOD 744 minimum
car le serveur doit pouvoir écrire dans ce dossier!

Certain hébergeur ne permettent pas cela.

Donnez moi le nom de votre hébergeur, j'irai jetter un oeil...

darkan.
darkan

Messages : 3

Dim 21 Oct, 2007 13:50

mon hebergeur est hosteur.com

dans le fichier publish, c'est par la methode get que le script passe et il passe bien le test if (isset($_SERVER['PATH_INFO']))

et aussi j'ai tout mis en 777 pour etre sur que le pb ne vienne pas de là!

la version du php est 4.4.7

stéphane
sdesrousseaux

Messages : 9

Lun 22 Oct, 2007 18:21

bon, j'ai fait quelques test en essayant de me mettre dans vos conditions. C'est à dire avec un hébergeur.
Ayant plusieurs hébergement chez Online, j'ai donc testé sur ce dernier.

a la racine du site je crée un dossier agenda, dans lequel je crée un sous dossier calendars.
Dans le dossier agenda, je positionne le fichier config.inc.php de phpicalendar.
Ce dernier est configuré comme suit:

Code: Tout sélectionner
$template          = 'default';         
$default_view          = 'week';         
$minical_view          = 'current';         
$default_cal          = $ALL_CALENDARS_COMBINED;   
$language          = 'French';         
$week_start_day       = 'Monday';         
$week_length         = '7';            
$day_start          = '0700';         
$day_end         = '2359';         
$gridLength          = '15';            
$num_years          = '1';            
$month_event_lines       = '1';            
$tomorrows_events_lines    = '1';            
$allday_week_lines       = '1';            
$week_events_lines       = '1';            
$timezone          = '';            
$calendar_path          = '';         
$second_offset         = '';            
$bleed_time         = '-1';            
$cookie_uri         = '';             
$default_path         = 'http://www.mon_domaine.com/agenda';             
$charset         = 'UTF-8';         

$allow_webcals          = 'yes';      
$this_months_events       = 'yes';      
$enable_rss         = 'no';         
$show_search         = 'no';         
$allow_preferences      = 'no';         
$printview_default      = 'no';         
$show_todos         = 'no';         
$show_completed         = 'no';      
$allow_login         = 'no';         
$login_cookies         = 'no';         
$support_ical         = 'no';      
$recursive_path         = 'yes';      

$save_parsed_cals       = 'yes';      
$tmp_dir         = '/tmp';      
$webcal_hours         = '24';      

$phpicalendar_publishing    = '1';      

$allow_admin         = 'no';         
$auth_method         = 'none';      
$auth_internal_username      = '';         
$auth_internal_password      = '';         
$ftp_server         = 'localhost';         
$ftp_port         = '21';         
$ftp_calendar_path      = '';         
$unique_colors         = '7';      


:!: Dans le sous dossier calendars, je place le fichier publish.php que voici:

Code: Tout sélectionner
// include PHP iCalendar configuration variables
include('../config.inc.php');
// set calendar path, or just use current directory...make sure there's a trailing slash
if (isset($calendar_path) && $calendar_path != '') {
   if (substr($calendar_path, -1, 1) !='/') $calendar_path = $calendar_path.'/';
} else {
   $calendar_path = '';
}
// allow/disallow publishing
$phpicalendar_publishing = isset($phpicalendar_publishing) ? $phpicalendar_publishing : 0;
define( 'PHPICALENDAR_PUBLISHING', $phpicalendar_publishing );
// toggle logging
define( 'PHPICALENDAR_LOG_PUBLISHING', 1 );
if(defined('PHPICALENDAR_LOG_PUBLISHING') && PHPICALENDAR_LOG_PUBLISHING == 1) {
   if( ! $logfile = fopen('publish_log.txt','a+') ) {
      header('HTTP/1.1 401 Unauthorized');
      header('WWW-Authenticate: Basic realm="ERROR: Unable to open log file"');
      echo 'Unable to open log file.';
      exit;
   }
}
// Require authentication
if (!isset($_SERVER['REMOTE_USER'])) {

   // Require authentication
   if (!isset($_SERVER['HTTP_AUTHORIZATION'])) {
      list($_SERVER['PHP_AUTH_USER'], $_SERVER['PHP_AUTH_PW'])
         = explode( ':', base64_decode( substr($_SERVER['HTTP_AUTHORIZATION'], 6) ) );
   }

   if (!isset($_SERVER['PHP_AUTH_USER'])) {
      header('WWW-Authenticate: Basic realm="phpICalendar"');
      header('HTTP/1.1 401 Unauthorized');
      echo 'You must be authorized!';
      exit;
   } else {
      if ($_SERVER['PHP_AUTH_USER'] != $auth_internal_username || $_SERVER['PHP_AUTH_PW'] != $auth_internal_password) {
         header('WWW-Authenticate: Basic realm="phpICalendar"');
         header('HTTP/1.1 401 Unauthorized');
         echo 'You must be authorized!';
         exit;
      }
   }
}
// only allow publishing if explicitly enabled
if(PHPICALENDAR_PUBLISHING != 1) {
   header('WWW-Authenticate: Basic realm="ERROR: Calendar Publishing is disabled on this server"');
   header('HTTP/1.1 401 Unauthorized');
   echo 'You must be authorized!';
   exit;
}
// unpublishing
if($_SERVER['REQUEST_METHOD'] == 'DELETE') {
   // get calendar filename
   $calendar_file = $calendar_path.substr($_SERVER['REQUEST_URI'] , ( strrpos($_SERVER['REQUEST_URI'], '/') + 1) ) ;

   $calendar_file = urldecode($calendar_file);
   
   logmsg('received request to delete '.$calendar_file);
   
   // remove calendar file
   if(!unlink($calendar_file))
   {
      logmsg('unable to delete the calendar file');
   }
   else
   {
      logmsg('deleted');
   }
   return;
}
// publishing
elseif($_SERVER['REQUEST_METHOD'] == 'PUT'){
   logmsg('PUT request');

   // get calendar data
   if($datain = fopen('php://input','r')){
      while(!@feof($datain)){
         $data .= fgets($datain,4096);
      }
      
      @fclose($datain);
   }else{
      logmsg('unable to read input data');
   }
   
   if(isset($data)){
      if (isset($_SERVER['PATH_INFO'])) {
         preg_match("/\/([\w\-\.\+ ]*).ics/i",$_SERVER['PATH_INFO'],$matches);
         $calendar_name = urldecode($matches[1]);
      }

      // If we don't have it from path info, use the supplied calendar name
      if( ! isset($calendar_name) ) {
      
         $cal_arr = explode("\n",$data);
      
         foreach($cal_arr as $k => $v){
            if(strstr($v,'X-WR-CALNAME:')){
               $arr = explode(':',$v);
               $calendar_name = trim($arr[1]);
               break;
            }
         }
      }

      logmsg('Received request to update: ' . $calendar_name);

      // Remove any invalid characters from the filename
      $calendar_name = preg_replace( "/[^\w\.\- ]/", '', $calendar_name );

      if( ( ! isset($calendar_name) ) || ( $calendar_name == '' ) ) {
         header('HTTP/1.1 401 Invalid calendar name');
         header('WWW-Authenticate: Basic realm="ERROR: Invalid calendar name."');
         echo 'Invalid calendar name.';
      }
      
      // If we don't have a name, assume default
      $calendar_name = isset($calendar_name) ? $calendar_name : 'default';

      logmsg('Updating calendar: ' . $calendar_name);

      // If this is Apple iCal, an event with a blank summary is private - mark as such
      if( preg_match( "/Apple.*iCal/", $_SERVER['HTTP_USER_AGENT'] ) ) {
         $data = preg_replace(
            "/^\s*SUMMARY:\s*$/m",
            "SUMMARY: **PRIVATE**\nCLASS:PRIVATE",
            $data
         );
      }

      // write to file
      if($dataout = fopen($calendar_path.$calendar_name.'.ics','w+')){
         fputs($dataout, $data, strlen($data) );
         @fclose($dataout);
      }else{
         logmsg( 'could not open file '.$calendar_path.$calendar_name.'.ics' );
      }
   }
   else {
      logmsg('PUT ERROR - No data supplied.');
   }
}
elseif ($_SERVER['REQUEST_METHOD'] == 'GET') {
   if (isset($_SERVER['PATH_INFO'])) {
      preg_match("/\/([ A-Za-z0-9._]*).ics/i",$_SERVER['PATH_INFO'],$matches);
      $icsfile = urldecode($matches[1]);

      // get calendar data
      if (file_exists($calendar_path . $icsfile . '.ics') &&
         is_readable($calendar_path . $icsfile . '.ics') &&
         is_file($calendar_path . $icsfile . '.ics')
      ) {
         echo file_get_contents($calendar_path . $icsfile . '.ics');
         logmsg('downloaded calendar ' . $icsfile);
      }
   }
}
if(defined('PHPICALENDAR_LOG_PUBLISHING') && PHPICALENDAR_LOG_PUBLISHING == 1) {
   fclose($logfile);
}

header('HTTP/1.1 204 Successful.');
exit;
// for logging
function logmsg($str){
   global $logfile;

   if(defined('PHPICALENDAR_LOG_PUBLISHING') && PHPICALENDAR_LOG_PUBLISHING == 1) {
      if( $_SERVER['PHP_AUTH_USER'] )
         $user =  $_SERVER['PHP_AUTH_USER'];
      else
         $user =  $_SERVER['REMOTE_USER'];

      $logline = date('Y-m-d H:i:s ') . $_SERVER['REMOTE_ADDR'] . ' ' . $user . ' ' . ${str} . "\n";

      fputs($logfile, $logline, strlen($logline) );
   }
}




:!: Ensuite dans Sunbird version 0.5, je crée un agenda partagé ayant l'adresse:

http:/mon_domaine.com/agenda/calendars/publish.php/test.ics

ben voilà ça fonctionne.
Les droits sur les fichiers sont au minimum CHMOD 644
les droits sur les 2 dossiers sont CHMOD744

Je n'ai pas testé pour l'instant en "sécurisant" : $auth_method = 'none';

Voyons déjà si vous arrivez à qlq chose comme cela.

A+
darkan[b]
darkan

Messages : 3

Ven 02 Nov, 2007 11:04

bon, merci pour ces infos et excuse pour moi pour le delai de la reponse je m'etais un peu absenté
j'ai repris tes 2 fichiers, mis tout mon repertoire en 777 (pour etre sur) et créé un agenda sur le reseau mais ca ne fonctionne toujours pas...

soit je foire quelque part, soit il y a un pb chez mon hébergeur (fonctions php désactivées)....

stephane
sdesrousseaux

Messages : 9

Mar 11 Déc, 2007 13:52

Chez certains hébergeurs le chmod 777 est bridé. On peut le mettre mais il y a des erreurs au niveau des scripts PHP.
thierrybo

Messages : 3

Mer 05 Mai, 2010 14:43

Bonjour,
Je viens de lire avec intérêt ce fil de discussion. En espérant que quelqu'un sera averti qu'il y a un nouveau post (mais depuis 2 ans ...), j'ai une petite question à poser.
J'ai installé phpicalendar 2.31 sur un espace perso et ça marche fort bien à partir de Sunbird (maintenant en version 0.9 et de Thunderbird 3 / Lightning 1.0).
Par contre j'ai voulu accéder au menu administrateur sous mon navigateur (Firefox 3) mais j'obtiens le message d'erreur suivant : "The administration menu has been turned off.". L'aide indique qu'il faut positionner $allow_admin à 'yes'. Ce que j'ai fait mais ça ne marche toujours pas.
Ce n'est pas très important mais c'était juste "pour voir".
Cordialement,
Bernard R.
ribotb

Messages : 3

Qui est en ligne ?

Utilisateur(s) parcourant actuellement ce forum : Aucun utilisateur inscrit