<?

error_reporting(7);

$debug = 0;

require "./inc.php3";
require "./vars.php3";

if (isset($buscar_x)) $buscar = 1;

function fi($text = '') { 
   global $debug;
   if ($debug) {
      while (list($k, $v) = each($GLOBALS)) {
         echo "$k = $v", br;
         if (is_array($v)) {
            while(list($k1, $v1) = each($v)) {
               echo "&nbsp;&nbsp;&nbsp;$k1 = $v1", br;
            }
         }
      }
   }
   if ($e = mysql_error()) die('MySQL error : ' . mysql_errno() . " $e\n$text");
   die($text);
}

mysql_connect($mysqlhost, $usuari, $clau) or fi('Error al conectar amb el servidor MySQL');
mysql_select_db($database) or fi("No trobo la base de dades `efesta' del MySQL");

if ($show_foto) {
         
   $query =  "select foto_nom, unix_timestamp(alta) as alta, directe from forum where id=$show_foto";
   $result = mysql_query($query) or die();
   $foto = mysql_result($result, 0, "foto_nom");
   $alta = mysql_result($result, 0, "alta");
   $directe = mysql_result($result, 0, "directe");
   
   $escriure = 0;
   $llegit = -1;
   
   
   if ($foto and file_exists($foto)) {
      $h = fopen($foto, 'r');
   }
   else {
      $h = fopen("$fotophp3?alta=$alta&directe=$directe&time=" . time(),'r');
      if ($h) {
         $status = fgets($h, 1024);
         //echo "status = $status<br>";
         if (substr($status, 0, 1) == '+') {
            $foto = substr($status, 2, -1);
            $size = substr(fgets($h, 1024), 0, -1);
            //echo "size = $size<br>";
            $escriure = 1;
            $llegit = 0;
         }
         else {
            fclose($h);
            $h = 0;
         }
      }
   }
   
   if (! $h) {
      if ($directe) {
         $foto = ($act_dosmil ? './grafics/cara2.jpg' : './grafics/cara1.jpg');
      }
      else {
         $foto = ($act_dosmil ? './grafics/calisay2.jpg' : './grafics/calisay1.jpg');
      }
      $h = fopen($foto, 'r');
   }
      
   $type =  strtolower(substr(strrchr($foto,'.'), 1));
      header("Content-type: image/$type");
   
   if ($escriure) {
      //$mini = "./fotos/mini$show_foto.gif";
      $foto = "./fotos/foto$show_foto.$type";
      if (! $wh = fopen($foto, 'w+')) {
         $escriure = 0;
      }
   }
   else {
      $size = filesize($foto);
   }
   
   if ($escriure) {
      while (! feof($h)) {
         $read = fread($h, 1024);
         echo $read;
         fwrite($wh, $read);
         $llegit += strlen($read);
      }
      fclose($h);
      fclose($wh);
   }
   else {
      fpassthru($h);
   }
   
   if ($escriure) {
      if ($llegit == $size) {
         $query = "update forum set foto_nom='$foto' where id=$show_foto";
         $result = mysql_query($query);
         /* if ($gran = imagecreatefromgif($foto)) {
            $act = getimagesize($foto);
            $alt = round($act[1] / ($act[0] / 50), 0);
            $peti = imagecreate(50, $alt);
            imagecopyresized($peti, $gran, 0,0,0,0, 50, $alt, $act[0], $act[1]);
            imagegif($peti, $mini);
            $query = "update forum set mini_nom = $mini";
            $result = mysql_query($query);
         } */
      }
   }
   exit;
}

function crea_radio($opt, $nom) {
   global $$nom;
   $set = $$nom;
   while (list($k1, $o) = each($opt)) {
      $check = ($o == $set ? 'checked' : '' );
      global $$o;
      $$o = "<input type=\"radio\" name=\"$nom\" value=\"$o\" $check>";
   }
}

function crea_checkbox($opt, $nom) {
   global $$nom;
   $set = $$nom;
   while (list($k1, $o) = each($opt)) {
      $check = (in_array($o, $set) ? 'checked' : '' );
      global $$o;
      $$o = "<input type=\"checkbox\" name=\"$nom" . "[]\" value=\"$o\" $check>";
   }
}

function urlmes($list) {
   $ret = '';
   while (list($k, $v) = each($list)) {
      if (is_array($GLOBALS[$v])) {
         while (list($k2, $v2) = each($GLOBALS[$v])) {
            $ret .= "&$v" . "[]=" . urlencode($v2) ;
         }
      }
      else {
         $ret .= "&$v=" . urlencode($GLOBALS[$v]);
      }
   }
   return $ret;
}

function forum_dades($id_miss) {
   
   $query = "select * from forum where id=$id_miss";
   $result = mysql_query($query) or fi();
   $dades = mysql_fetch_array($result, MYSQL_ASSOC);
   
   global $url;
   global $id;
   global $nom, $titol, $missatge;
   global $directe, $extern, $correu, $mobil;
   global $foto_nom, $foto_url;
   global $alta; 
   global $any, $mes, $dia, $hora, $minut, $segon;
   global $data_dma, $hora_hm, $hora_hms;
   global $mis_dosmil, $mis_milnou;
   global $diad_horah;

   $id       = $dades[id];
   $nom      = stripslashes($dades[nom]);
   $titol    = stripslashes($dades[titol]);
   $missatge = ereg_replace("\n", "<br>", stripslashes($dades[missatge]));
   $directe  = $dades[directe];
   $extern   = $dades[extern];
   $correu   = $dades[correu];
   $mobil    = $dades[mobil];
   $foto_nom = $dades[foto_nom];
   $foto_url = "$url?show_foto=$id"; 
   $alta     = $dades[alta];
   list($any, $mes, $dia, $hora, $minut, $segon) = split('[: \-]', $alta);
   $data_dma = "$dia-$mes-$any";
   $hora_hm  = "$hora:$minut";
   $hora_hms = "$hora:$minut:$segon";
   $mis_dosmil = ("$any-$mes-$dia $hora:$minut:$segon" >= $diad_horah);
   $mis_milnou = ("$any-$mes-$dia $hora:$minut:$segon" < $diad_horah);
   return 1;
}

function loop_talatal() {
   
   global $lin_parell, $col_parell;
   $col_parell = ! $col_parell;
   
   global $arr_talatal, $pagina, $num_talatal;
   global $de_talatal, $a_talatal, $talatal, $act_talatal, $url_talatal;
   global $tr_talatal, $limit_talatal;
   global $url, $mes_buscar;
   
   if (! $talatal = next($arr_talatal)) {
      reset($arr_talatal);
      $num_talatal = 0;
      return 0;
   }
   
   if ($num_talatal % $tr_talatal == 0) {
      $limit_talatal = 1 ;
      $lin_parell = ! $lin_parell ;
   }
   else {
      $limit_talatal = 0;
   }
   $act_talatal = ($pagina == ++$num_talatal);
   $url_talatal = $url . "?pagina=$num_talatal" . $mes_buscar;
   $a_talatal   = a($url_talatal, $talatal);
   $bo_talatal  = submit('',$talatal) . hidden('pagina',$num_talatal) . $hid_buscar;
   return 1;
}

function loop_llistar() {
   
   global $llistarmax, $llistarcount, $result;

   if (++$llistarcount > $llistarmax) return 0;

   global $lin_parell;
   $lin_parell = ! $lin_parell;
   
   if (! $row = mysql_fetch_array($result)) return 0;
   forum_dades($row[id]);
   global $bo_borrarmissatge;
   global $url_veuremissatge, $bo_veuremissatge;
   global $id, $url;
   $bo_borrarmissatge  = start_form() . 
                         submit("", "Borrar") . 
                         hidden('borrarmissatge', $id) .
                         end_form();
   $url_veuremissatge  = "$url?veuremissatge=$id";
   $a_veuremissatge    = a($url_veuremissatge, 'Veure Missatge');
   $bo_veuremissatge   = start_form() . 
                         submit("", "Missatge") . 
                         hidden('veuremissatge', $id) .
                         end_form();
   return 1;
}

function quote($str) {
   return ($str = "'" . addslashes($str) . "'");
}

function str2time($str) {
   list($any, $mes, $dia, $hora, $minut, $segon) = split('[: \-]', $str);
   return mktime($hora, $minut, $segon, $mes, $dia, $any);
}   

function data2ascii($data, $hora = '') {
   $ts = data2ts($data, $hora);
   return date('Y-m-d H:i:s', $ts);
}

function data2ts($data, $hora = '') {
   if ($hora == '') {
      list($d, $m, $a, $h, $i, $s) = split('[^0-9]', $data);
   }
   else {
      list($d, $m, $a) = split('[^0-9]', $data);
      list($h, $i, $s) = split('[^0-9]', $hora);
   }
   
   if (checkdate($m, $d, $a)) {
      return mktime($h, $i, $s, $m, $d, $a);
   }
   else {
      return mktime(0,0,0,0,0,0);
   }
} 

function restadata($ts1, $ts2) {
   $s = abs($ts1 - $ts2);
   $d = floor($s / 86400);
   $s %= 86400;
   $h = floor($s / 3600);
   $s %= 3600;
   $m = floor($s / 60);
   $s %= 60;
   return array($d, $h, $m, $s);
}

/////////////////////////////////////////////////////////////////////////////

$url = $PHP_SELF;

$lin_parell  = 0;
$col_parell  = 0;
$act_directe = (getenv('REMOTE_ADDR') == $ipdirecte);
$t           = time();
$act_dia     = date('d-m-Y', $t);
$act_hora    = date('H:i:s', $t);
$act_dosmil  = (date('Y-m-d H:i:s', $t) >= $diad_horah);
$act_milnou  = (date('Y-m-d H:i:s', $t) < $diad_horah);
$t2000       = str2time($diad_horah);
list($dif_d, $dif_h, $dif_m, $dif_s) = restadata($t, $t2000);
$arr = segons_text(abs($t - $t2000));
$dif_d_t = $arr['d'];
$dif_h_t = $arr['h'];
$dif_m_t = $arr['m'];
$dif_s_t = $arr['s'];
unset($arr);

$inici_form  = start_form();
$fi_form     = end_form();
$bo_reset    = reset_(); 

$url_llistar  = "$url?llistar=1"; 
$bo_llistar   = submit('llistar', 'Últims Missatges');
$a_llistar    = a($url_llistar, '<img src="./grafics/ultims.gif" border=0>'); 

$url_cercador = "$url?cercador=1"; 
$bo_cercador  = submit('cercador', 'Cercar Missatges');
$a_cercador   = a($url_cercador, '<img src="./grafics/buscar.gif" border=0>'); 

$url_feralta  = "$url?feralta=1"; 
$bo_feralta   = submit('feralta',"Escriu un Missatge !"); 
$a_feralta    = a($url_feralta,  '<img src="./grafics/afegir.gif" border=0>'); 

$url_aleatori = "$url?aleatori=1"; 
$bo_aleatori  = submit('aleatori',"Missatge Qualsevol"); 
$a_aleatori   = a($url_aleatori,  '<img src="./grafics/aleatori.gif" border=0>'); 

////////////////////
// autentificació //
////////////////////

function entrar_clau() {
   Header("WWW-Authenticate: Basic realm=\"eFesta2000\"");
   Header("HTTP/1.0 401 Unauthorized");
   echo "Autentificació cancel.lada\n<p>";
   echo "<a href=\"$PHP_SELF\">Tornar a l'efesta2000</a>";
   exit;
}

if (isset($buscar) and $bu_nom == 'fer') {
   if ($bu_titol == 'login') {
      $login = 1;
      unset($buscar);
   }elseif ($bu_titol == 'logout') {
      $logout = 1;
      unset($buscar);
   }
}

$es_pot_esborrar = false;

if (isset($PHP_AUTH_USER) and isset($PHP_AUTH_PW)) {
   if ($PHP_AUTH_USER == $usuari and $PHP_AUTH_PW == $clau) {
      if (isset($logout)) {
         entrar_clau();
      }else{
         $es_pot_esborrar = true;
      }
   } elseif (isset($login)) {
      entrar_clau();
   }
}elseif (isset($login)) {
   entrar_clau();
}

//////////////////////////////
// Dades pel cercaform.html //
//////////////////////////////

if ($bu_hora1 == '') $bu_hora1 = '00:00:00';
if ($bu_hora2 == '') $bu_hora2 = '23:59:59';
if ($bu_data1 == '') $bu_data1 = '01-01-1999';
if ($bu_data2 == '') $bu_data2 = '31-12-2000';

$f_bu_nom      = text_field('bu_nom',      $bu_nom,      21, 50);
$f_bu_titol    = text_field('bu_titol',    $bu_titol,    21, 50);
$f_bu_missatge = text_field('bu_missatge', $bu_missatge, 21, 50);
$f_bu_data1    = text_field('bu_data1',    $bu_data1,    11, 11);
$f_bu_data2    = text_field('bu_data2',    $bu_data2,    11, 11);

$f_bu_hora1    = text_field('bu_hora1',    $bu_hora1,    8, 8);
$f_bu_hora2    = text_field('bu_hora2',    $bu_hora2,    8, 8);

$opt_tipus = array('f_bu_directe','f_bu_extern','f_bu_correu','f_bu_mobil');
if (! isset($set_tipus)) $set_tipus = $opt_tipus;
crea_checkbox($opt_tipus, 'set_tipus');

$opt_ordre = array('f_or_alta','f_or_nom','f_or_titol');
if (! isset($set_ordre)) $set_ordre = 'f_or_alta';
crea_radio($opt_ordre, 'set_ordre');

$f_or_invers = '<input type="checkbox" name="ord_invers" value="desc" ' . 
               ($ord_invers ? 'checked>' : '>');

$bo_buscar = submit('buscar', 'Buscar'); 

///////////////////////////////////////////////////////////////////

if (isset($buscar)) {
   $hid_buscar = hidden('buscar', 1);
   $mes_buscar = urlmes(array('buscar','ord_invers','set_ordre','set_tipus',
                              'bu_nom','bu_titol','bu_missatge',
                              'bu_data1','bu_data2','bu_hora1','bu_hora2'));
}
else {
   $mes_buscar = $hid_buscar = '';
}


if (isset($altafeta)) {
   
   $nom = htmlspecialchars(stripslashes($nom));
   $titol = htmlspecialchars(stripslashes($titol));
   $missatge = htmlspecialchars(stripslashes($missatge));
   
   if ($nom == '' or $titol == '' or $missatge == '') {
      $feralta = 1;
      $err_blanc = 1;
      $altafeta = 0;
   }
   else {
      $err_blanc = 0;
      quote(&$nom);
      quote(&$titol);
      quote(&$missatge);
      $query = "insert into forum set alta=now(),nom=$nom,titol=$titol,missatge=$missatge";
      $query .= ($act_directe ? ",directe=1" : ",extern=1");
      $result = mysql_query($query);
      $nom = $titol = $missatge = '';

      $veuremissatge = mysql_insert_id();
   }
}

if (isset($feralta) and $feralta) {
   
   echo "
   L'Alta de nous misstges no està disponible<br>
   <a href=forum.php3>Tornar a l'Efesta</a>
   ";
   fi();
   
   $bo_altafeta = submit('altafeta', 'Enviar'); 
   $f_nom       = text_field('nom', $nom, 45, 45);
   $f_titol     = text_field('titol', $titol, 45, 60);
   $f_missatge  = textarea('missatge', $missatge, 8, 50);
      
   include incl_tmpl("./alta.html");
   
   fi();
}

if (isset($borrarmissatge) and $es_pot_esborrar) {
   $query = "delete from forum where id=$borrarmissatge";
   $result = mysql_query($query) or fi();
   echo "<font color=\"yellow\"><h1><center>
        Missatge $borrarmissatge esborrat!</center></h1></font><hr>";
}

if (isset($aleatori)) {
   $query = "select id from forum";
   $result = mysql_query($query) or fi();
   $trobats = mysql_num_rows($result);
   srand(time());
   $veuremissatge = rand(1, $trobats);
}

if (isset($veuremissatge)) {
  
   forum_dades($veuremissatge);
   include incl_tmpl('./missatge.html');
   fi();
}

if (isset($cercador)) {
   include incl_tmpl("./buscar.html");
   fi();

}
      
if (isset($buscar)) {
   $where = ' where 1';
   if ($bu_nom)      $where .= " and nom like "      . quote("%$bu_nom%") ;
   if ($bu_titol)    $where .= " and titol like "    . quote("%$bu_titol%") ;
   if ($bu_missatge) $where .= " and missatge like " . quote("%$bu_missatge%") ;
   
   if ($bu_data1)    $where .= " and alta>='" . data2ascii($bu_data1, $bu_hora1) . "'";
   if ($bu_data2)    $where .= " and alta<='" . data2ascii($bu_data2, $bu_hora2) . "'";
   
   if (($s = sizeof($set_tipus)) != 4) {
      $n = 0;
      $or = '';
      $where .= ' and (' ;
      while ($v = $set_tipus[$n++]) {
         $where .= $or . substr($v, 5);
         $or = ' or ';
      }
      $where .= ')';
   }
   $where .= ' order by ' . substr($set_ordre , 5) . " $ord_invers";

   $query = "select * from forum $where" ;
}
else {
   $query = "select * from forum order by alta desc";
}

$result = mysql_query($query) or fi();
$trobats = mysql_num_rows($result);

if (! $pagina) {
   $pagina = 1;
}

$url_anteriors = $url_seguents = '';
$arr_talatal = array('');
$num_talatal = 0;

if ($trobats > $llistarmax) {
   $p = 0; 
   for ($n = 1; $n <= $trobats; $n += $llistarmax) {
      $rang = "$n-" . min($trobats, ($n + $llistarmax - 1));
      $arr_talatal[++$p] = $rang;
   }
   
   if ($pagina > 1) {
      $url_anteriors = $PHP_SELF . "?pagina=" . ($pagina - 1) . $mes_buscar ; 
   }
   if ($pagina < ceil($trobats / $llistarmax)) {
      $url_seguents = $PHP_SELF .  "?pagina=" . ($pagina + 1). $mes_buscar; 
   }
   mysql_data_seek($result, ($pagina - 1) * $llistarmax);
}

$llistarcount = 0;
$ant_o_seg = ($url_anteriors or $url_seguents);
$ant_y_seg = ($url_anteriors and $url_seguents);

include incl_tmpl("./llistar.html");

fi();

?>
