]> git.llucax.com Git - software/sercom-old.git/blobdiff - src/sc_fetch
Se usa una forma lambda para comparar por padron.
[software/sercom-old.git] / src / sc_fetch
index a1a9ef023c5201c92409bc9df191fe15499200ba..9f1431869d13b402af1db14f333fe66a275be636 100755 (executable)
@@ -1,10 +1,8 @@
 #!/usr/bin/php4
 <?php // vim: set binary noeol et sw=4 sts=4:
 
-// Si me pasan un directorio de bibliotecas, lo uso.
-if (@$argv[1]) {
-    set_include_path(get_include_path().':'.$argv[1]);
-}
+// Incluyo directorio del ejecutable como posible directorio de bibliotecas
+set_include_path(get_include_path().':'.dirname($argv[0]));
 
 require_once 'T/general.php';
 
@@ -92,7 +90,7 @@ while (1) {
     $mbox_errcount = 0;
     logs('Conectado como '.@$mconf['user']." a $mailbox", DEBUG);
     if (imap_num_msg($mbox) and $hdr = imap_headerinfo($mbox, 1)) {
-        logs("Nuevo mail '{$hdr->subject}' de {$hdr->fromaddress}");
+        logs(sprintf("Nuevo mail '%s' de %s", decode_header($hdr->subject), decode_header($hdr->subject)));
         @list($padron, $ej, $ent, $codigo) = validar_cabecera($hdr);
         if ($padron) {
             logs('Cabecera válida', DEBUG);
@@ -126,8 +124,8 @@ while (1) {
                     . "Recuerde que el formato del asunto es estricto:\n"
                     . "[padrón] [ejercicio].[entrega] [código]\n\n"
                     . "Donde [padrón] es su número de padrón, [ejercicio] es el número de\n"
-                    . "ejercicio (1 a 4), [entrega] el número de entrega (1 o 2) y [código]\n"
-                    . "es el código verificador que le fue asignado por la cátedra.\n"
+                    . "ejercicio (1 a 4), [entrega] el número de entrega (1 entrega, 2 reentrega)\n"
+                    . "y [código] es el código verificador que le fue asignado por la cátedra.\n"
             );
         }
         imap_delete($mbox, 1);
@@ -163,7 +161,7 @@ imap_close($mbox);
 
 function enviar_respuesta($tipo, $to, $mensaje = '', $intento = null) {
     global $mconf;
-    $subject = $mconf['prefijo'] . 'Entrega ';
+    $subject = '[' . $mconf['prefijo'] . '] Entrega ';
     if ($tipo == R_OK) $estado = 'ACEPTADA';
     else               $estado = 'RECHAZADA';
     $subject .= $estado;
@@ -178,7 +176,7 @@ Return-Path: {$mconf['admin']}
 X-Mailer: $NAME $VERSION
 X-Priority: 5
 EOT;
-    mail($to, $subject, $body, $headers);
+    mail(decode_header($to), $subject, $body, $headers);
     return true;
 }
 
@@ -187,7 +185,8 @@ EOT;
  */
 function validar_cabecera($hdr) {
     // Subject: padron nro_ej nro_entrega clave_alumno
-    if (preg_match('/^\s*(\d{5})\s+([1-4])\.([12])\s+(.*)$/', $hdr->subject, $m)) {
+    $subject = decode_header($hdr->subject);
+    if (preg_match('/^\s*(\d{5})\s+([1-4])\.([12])\s+(.*)$/', $subject, $m)) {
         return array_slice($m, 1, 5);
     }
     return false;
@@ -195,14 +194,14 @@ function validar_cabecera($hdr) {
 
 function preparar_entrega($intento, $mbox, $msgid, $dir) {
     logs('Acá debería verificar el cuerpo del mensaje', DEBUG);
+    $path = "$dir/" . $intento->path('intentos');
     $mail = imap_fetchstructure($mbox, $msgid);
+    if (!mkdir_p($path)) return 'No se pudo crear el directorio';
     foreach ($mail->parts as $id => $part) {
         $fname = part_filename($part);
         if ($fname) {
             logs("Escribiendo archivo '$fname' [enc={$part->encoding}]", DEBUG);
             $body = imap_fetchbody($mbox, $msgid, $id + 1);
-            $path = "$dir/" . $intento->path('intentos');
-            if (!mkdir_p($path)) return 'No se pudo crear el directorio';
             if (!file_put_contents("$path/$fname", decode_body($body, $part->encoding))) return "Error al guardar el archivo $fname";
         }
         //if (part_is_source($part) $has_sources = true;
@@ -295,4 +294,13 @@ function fix_eol($str) {
     return str_replace("\r\n", "\n", $str);
 }
 
+function decode_header($str) {
+    $elems = imap_mime_header_decode($str);
+    $result = '';
+    foreach ($elems as $elem) {
+        $result .= $elem->text;
+    }
+    return $result;
+}
+
 ?> 
\ No newline at end of file