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
|
// Dans emissionTable.class.php :
public function findEmission($slug, $userIp) // Fonction appelée par l'executeShow
{
...
if($result = $q->fetchOne())
{
$this->rankEmission($result->getId(), $request->getRemoteAddress());
}
}
// Le principe est de n'incrémenter pour le même visiteur que s'il revient plus de 5 mn après sa précédente visite.
// 5 mn après, on peut considérer comme une nouvelle visite. Un pur postulat:D
// Y a une table pour enregistrer les visites dont voici la définition en yaml
// rankemission:
// columns:
// ip:
// type: integer
// temps:
// type: timestamp
// emission:
// type: integer
public function rankEmission($id, $uip)
{
$ip = ip2long($uip); // Recuperer l ip de l utilisateur
$timestamp5mn = time() - (60*5);
// Verifier que l utilisateur a deja consulter la page une fois
$rk = Doctrine::getTable('rankemission')
->createQuery('r')
->where('r.ip = ?', $ip)
->andWhere('r.emission = ?', $id);
// sinon on enregistre sa visite
if($rk->count() < 1)
{
$newrank = new rankemission();
$newrank->setIp($ip);
$newrank->setEmission($id);
$newrank->setTemps(date('Y-m-d H:i:s'));
$newrank->save();
// Et j incremente l emission et le programme associe
// programme est en relation 1:n avec emission
$this->rankIt($id, $timestamp5mn);
}
else // Il a deja visite la page
{
$w = $rk->fetchOne();
// Y a t il plus de 5 mn
if(myFunctions::datetime2timestamp($w->getTemps()) < $timestamp5mn)
{
// J incremente l emission et le programme associe
$this->rankIt($id, $timestamp5mn);
}
}
}
public function rankIt($id, $timestamp5mn)
{
// J incremente l emission et le programme associe
// Mise a jour du champ rank de l emission
$q = Doctrine_Query::create()
->update('emission e')
->where('e.id = ?', $id)
->set('rank', '?', 'e.rank'+1)
->execute();
// Recuperation du programme associe a l emission
$prog = Doctrine_Core::getTable('emission')->find($id);
// Mise a jour du programme associe a l emission
$m = Doctrine_Query::create()
->update('programme p')
->where('p.id = ?', $prog->getProgrammeId())
->set('rank', '?', 'p.rank'+1)
->execute();
// Je Supprime les entrees vieilles de plus de 5 mn
// dans la table rankemission
/*$d = Doctrine_Query::create()
->delete('rankemission r')
->where('r.temps < ?', date('Y-m-d H:i:s') - date('Y-m-d H:i:s', $timestamp5mn))
->execute();*/
} |