asta e codul complet
<?php
##########################################################################
/*
@ Rol fiºier: definirea functiilor utilizate global in aplicatie
* Puncte de stop: alocate - 1 - 50
definite - 1 - 18
*/
##########################################################################
###########################################################################
// DEFINIREA FUNCTIILOR
// user defined error handling function
function userErrorHandler ($errno, $errmsg, $filename, $linenum, $vars) {
global $depanare, $template;
$errortype = array (
1=> "Error",
2=> "Warning",
4=> "Parsing Error",
8=> "Notice",
16 => "Core Error",
32 => "Core Warning",
64 => "Compile Error",
128 => "Compile Warning",
256 => "Eroare",
512 => "Atenþionare",
1024=> "Notificare"
);
$eroare = $errortype[$errno]."<br>$errmsg";
if ($depanare)
$eroare .= "<br> în fiºierul <tt>$filename</tt> la linia <tt>$linenum</tt> <br> $vars <br> ".mysql_error();
$reusita_include = @include("templates/$template/stop.php");
if ($reusita_include !== true)
print "($nr_eroare) ".$eroare;
die();
// timestamp for the error entry
$dt = date("Y-m-d H:i:s (T)");
// define an assoc array of error string
// in reality the only entries we should
// consider are 2,8,256,512 and 1024
$errortype = array (
1=> "Error",
2=> "Warning",
4=> "Parsing Error",
8=> "Notice",
16 => "Core Error",
32 => "Core Warning",
64 => "Compile Error",
128 => "Compile Warning",
256 => "User Error",
512 => "User Warning",
1024=> "User Notice"
);
// set of errors for which a var trace will be saved
$user_errors = array(E_USER_ERROR, E_USER_WARNING, E_USER_NOTICE);
$err = "<errorentry>
";
$err .= " <datetime>".$dt."</datetime>
";
$err .= " <errornum>".$errno."</errornum>
";
$err .= " <errortype>".$errortype[$errno]."</errortype>
";
$err .= " <errormsg>".$errmsg."</errormsg>
";
$err .= " <scriptname>".$filename."</scriptname>
";
$err .= " <scriptlinenum>".$linenum."</scriptlinenum>
";
if (in_array($errno, $user_errors))
$err .= " <vartrace>".wddx_serialize_value($vars,"Variables")."</vartrace>
";
$err .= "</errorentry>
";
// for testing
echo "<pre>";
echo $err;
echo "</pre>";
die();
}
$old_error_handler = set_error_handler("userErrorHandler");
/**
opreste scriptul si afiseaza un mesaj de eroare
@argument string - mesajul de eroare care se afiseaza
string - interogarea (eventual)
@return -
*/
function stop($nr_eroare = 0, $mesaj = "", $query = "")
{
global $depanare, $template;
if ($depanare)
$eroare = "($nr_eroare) $mesaj <br> $query <br> ".mysql_error();
else
$eroare = $mesaj;
$reusita_include = @include("templates/$template/stop.php");
if ($reusita_include !== true)
print "($nr_eroare) ".$eroare;
die();
} // end func stop
/**
realizeaza conectarea la serverul de baze de date si selectarea bazei de date aferente aplicatiei
@argument -
@return resouce - indicatorul de conectare
*/
function conect()
{
global $server, $username, $pass, $db;
$conectare = mysql_connect($server, $username, $pass) or stop(1, "Nu se poate realiza conectarea la server");
mysql_select_db($db) or stop(2, "Nu se poate selecta baza de date");
return $conectare;
} // end func conect
/**
verifica daca un utilizator are acces la o anumita categorie
@argument integer - id utilizator
integer - id categorie
@return bool - true - are acces / false - nu are acces
*/
function vf_acces($ut, $categ_vf)
{
global $tabel_autori, $tabel_categorii;
$ut = intval($ut);
$categ_vf = intval($categ_vf);
$query = "SELECT t2.stg as stg, t2.dr as dr FROM $tabel_autori as t1, $tabel_categorii as t2 WHERE t1.categoria=t2.id AND t1.id=$ut LIMIT 1";
$result = mysql_query($query) or stop(3, "Eroare la verificarea accesului la categorie", $query);
$arr = mysql_fetch_array($result);
extract($arr);
$query = "SELECT id FROM $tabel_categorii WHERE id=$categ_vf AND stg>=$stg AND dr<=$dr";
$result = mysql_query($query) or stop(4, "Eroare la verificarea accesului la categorie", $query);
if( mysql_num_rows($result) == 1 )
return true;
else
return false;
} // end func vf_acces
/**
parcurgerea categoriilor, cu afisarea superioarelor ierarhice si a subordonatelor nemijlocit
@argument integer - categoria selectata
@return array:
- $categorii['sup_id'][0] = false; - nu exista superiori
sau
$categorii['sup_id'][$i] - id superior - ordinea e data de nivelul ierarhic
$categorii['sup_den'][$i] - denumire superior
- $categorii['selectat']
- $categorii['sub_id'][0] = false; - nu exista subordonati
sau
$categorii['sub_id'][$i] - id subordonat
$categorii['sub_den'][$i] - denumire subordonat
*/
function browse($categoria=1)
{
global $tabel_categorii;
if (!is_numeric($categoria)) $categoria = 1;
//aflu valorile stg si dreapta a categoriei selectate
$query = "SELECT id, stg, dr, nivel, denumire FROM $tabel_categorii WHERE id=$categoria";
$result = mysql_query($query) or stop(5, "", $query);
if (mysql_num_rows($result)!=1)
{
//daca nu exista categoria dorita, se selecteaza categoria radacina
$query = "SELECT stg, dr, nivel, denumire FROM $tabel_categorii WHERE nivel=0 LIMIT 1";
$result = mysql_query($query) or stop(6, "", $query);
}
$arr = mysql_fetch_array($result);
$stg = $arr['stg'];
$dr = $arr['dr'];
$nivel = $arr['nivel'];
$categorii['selectat'] = $arr['denumire'];
//aflu categoriile superioare ierarhic, le ordonez de la general la particular
$query = "SELECT id, denumire FROM $tabel_categorii WHERE stg<$stg AND dr>$dr ORDER BY nivel ASC";
$result = mysql_query($query) or stop(7, "", $query);
if (mysql_num_rows($result)!=0)
{
$i = 0;
while ($arr = mysql_fetch_array($result))
{
$categorii['sup_id'][$i] = $arr['id'];
$categorii['sup_den'][$i] = $arr['denumire'];
$i ;
}
}
else
$categorii['sup_id'][0] = false;//nu exista superiori
//aflu categoriile subordonate nemijlocit
$query = "SELECT id, denumire FROM $tabel_categorii WHERE nivel=$nivel 1 AND stg>$stg AND dr<$dr";
$result = mysql_query($query) or stop(8, "", $query);
if (mysql_num_rows($result)!=0)
{
$i = 0;
while ($arr = mysql_fetch_array($result))
{
$categorii['sub_id'][$i] = $arr['id'];
$categorii['sub_den'][$i] = $arr['denumire'];
$i ;
}
}
else
$categorii['sub_id'][0] = false;//nu exista subordonati
//ascund id-urile categoriilor superioare celei la care are acces utilizatorul
if ( isset($_SESSION['id']) and (isset($categorii['sup_id'][0])) and ($categorii['sup_id'][0]!==false) )
{
foreach ($categorii['sup_id'] as $k=>$v)
{
if (vf_acces($_SESSION['id'], $v)==true)
{
break;
}
else
$categorii['sup_id'][$k] = 0;
}
}
return $categorii;
} // end func browse
/**
adaugarea unei subcategorii cu denumirea '$denumire' in categoria cu id-ul '$superior'
@argument string - denumirea categoriei de adaugat
@argument integer - id-ul categoriei in care se face adaugarea
@return bool - succesul functiei (TRUE) sau insuccesul (FALSE)
*/
function adauga($denumire, $superior)
{
global $tabel_categorii;
$query = "SELECT stg, dr, nivel FROM $tabel_categorii WHERE id=$superior";
$result = mysql_query($query) or stop(9, "", $query);
if (!is_string($denumire))
return false;
elseif (mysql_num_rows($result) == 1)
{
$arr = mysql_fetch_array($result);
$stg = $arr['stg'];
$dr = $arr['dr'];
$nivel = $arr['nivel'];
//fac loc
$query = "UPDATE $tabel_categorii SET dr=(IF(dr>=$dr, dr 2, dr)), stg=(IF(stg>$dr, stg 2, stg))";
$result = mysql_query($query) or stop(9, "", $query);
//inserez
$query = "INSERT INTO $tabel_categorii VALUES('', $nivel 1, $dr, $dr 1, '$denumire')";//inserare la dreapta
$result = mysql_query($query) or stop(10, "", $query);
return true;
}
else return false;
} // end func
/**
stergerea subcategoriei goale cu id-ul '$categoria'
@argument integer - id-ul categoriei de sters
@return bool - succesul functiei(TRUE) sau insuccesul (FALSE)
*/
function sterge($categoria)
{
global $tabel_categorii;
$query = "SELECT stg, dr, nivel FROM $tabel_categorii WHERE id=$categoria AND nivel>0 LIMIT 1";
$result = mysql_query($query) or stop(11, "", $query);
if (mysql_num_rows($result)==1)
{
$arr = mysql_fetch_array($result);
$stg = $arr['stg'];
$dr = $arr['dr'];
$nivel = $arr['nivel'];
//sterg inreg
$query = "SELECT id FROM $tabel_categorii WHERE stg<$stg AND dr>$dr AND nivel=$nivel-1";
$result = mysql_query($query) or stop(12, "", $query);
$id_superior = mysql_result($result, 0);
$query = "DELETE FROM $tabel_categorii WHERE id=$categoria AND stg=dr-1 AND nivel>0 LIMIT 1";
$result = mysql_query($query) or stop(13, "", $query);
if (mysql_affected_rows() == 1)
{
$query = "UPDATE $tabel_categorii SET stg=stg-2 WHERE stg>$stg";
$result = mysql_query($query) or stop(14, "", $query);
$query = "UPDATE $tabel_categorii SET dr=dr-2 WHERE dr>$dr";
$result = mysql_query($query) or stop(15, "", $query);
return $id_superior;
}
else
return false;
}
else
return false;
} // end func sterge
/**
@argument -
@return integer: 0 - nelogat / -1 - date de autentificare incorecte (tot nelogat) / 1 - logat
*/
function login()
{
global $tabel_autori, $valabilitate_login;
session_start();
if ( isset( $_REQUEST['logout'] ) )
{
//se distruge eventuala sesiune, utilizatorul nu mai este logat
$_SESSION = array();
}
else
{
$ses_valabila = false;
if ( isset( $_SESSION['id'] ) ) //verific valabilitatea sesiunii
{
$ses_valabila = true;
if( !isset( $_SESSION['rang'] ) ) $ses_valabila = false;
elseif( !isset( $_SESSION['nume'] ) ) $ses_valabila = false;
elseif( !isset( $_SESSION['utilizator'] ) ) $ses_valabila = false;
elseif( !isset( $_SESSION['rand'] ) ) $ses_valabila = false;//contine ora, in forma date("Hz")
elseif( !isset( $_SESSION['parola'] ) ) $ses_valabila = false;
elseif( !isset( $_SESSION['time'] ) or ( $_SESSION['time'] < time()) ) $ses_valabila = false;
else
{
//am verificat integritatea datelor sesiunii
//verific autenticitatea sesiunii
$query = "SELECT parola FROM $tabel_autori WHERE id=".$_SESSION['id'];
$result = mysql_query($query) or stop(16, "Nu se poate extrage parola pentru verificarea sesiunii", $query);
$pass = mysql_result($result, 0);
if( md5($pass.date("Hz")) != $_SESSION['parola'])
{
$ses_valabila = false;
//verific valabilitatea sesiunii - $_SESSION['rand'] tb sa fie cu maxim o ora in urma fata de timpul curent
if ( $_SESSION['rand'] != date("Hz") ) //ora (00-23) si ziua din an (0-366)
{
$timp = time()-3600;
if ( $_SESSION['rand'] == date("Hz", $timp) )
{
//indicatorul este cu o ora in urma, il actualizez si recalculez parola din sesiune in functie de noul indicator
$_SESSION['rand'] = date("Hz");
$_SESSION['parola'] = md5($pass.$_SESSION['rand']);
$ses_valabila = true;
}
}
}
}
}
if ($ses_valabila)
{
$_SESSION['time'] = time() $valabilitate_login * 60;//actualizez timpul sesiunii
return 1;
}
//return 1 - utilizatorul este logat
else
{
$_SESSION = array();//reinitializez sesiunea
if ( isset( $_REQUEST['auth_utilizator'] ) and isset( $_REQUEST['auth_parola'] ) )
{
$query = "SELECT * FROM $tabel_autori WHERE utilizator='".$_REQUEST['auth_utilizator']."' AND parola=PASSWORD('".$_REQUEST['auth_parola']."')";
$result = mysql_query($query) or stop(17, "Nu se poate verifica parola în baza de date", $query);
if ( mysql_num_rows($result) != 1 )
return -1;
//return -1 - date de autentificare incorecte (utilizatorul nu este logat)
else
{
$arr = mysql_fetch_array($result);
$_SESSION['id'] = $arr['id'];
$_SESSION['rang'] = $arr['rang'];
$_SESSION['categoria'] = $arr['categoria'];
$_SESSION['nume'] = $arr['nume'];
$_SESSION['utilizator'] = $arr['utilizator'];
$_SESSION['rand'] = date("Hz");
$_SESSION['time'] = time() $valabilitate_login * 60;//timpul sesiunii
$query = "SELECT PASSWORD('".$_REQUEST['auth_parola']."')";
$result = mysql_query($query) or stop(18, "", $query);
$pass = mysql_result($result, 0);
$_SESSION['parola'] = md5($pass.$_SESSION['rand']);
return 1;
//return 1 - utilizatorul este logat
}
}
else
return 0;
//return 0 - utilizatorul nu este logat
}
}
} // end func login
/**
realizeaza stergerea unui item din baza de date
- modifica instantele intrebarii sa directioneze catre un item gol
- sterge itemul si raspunsurile
@argument - $id - id-ul itemului
@return -
*/
function sterg_item($id)
{
global $tabel_itemi,
$tabel_inst_itemi,
$tabel_itemi_teste,
$tabel_raspunsuri,
$tabel_rezolvare,
$tabel_testare;
//caut instantele intrebarii corespunzatoare rezolvarii online a unui test
$query = "";
$result = mysql_query($query) or stop(19, "", $query);
} // end func sterg_item
$conectare = conect();
$login = login();
?>