source: spip-zone/_plugins_/ab_testing/ab_options.php

Last change on this file was 32393, checked in by fil@…, 11 years ago

un plugin pour des split tests A/B

File size: 1.7 KB
Line 
1<?php
2
3#
4# Definitions
5#
6
7# fonction de control : indique la valeur de ab (0 ou 1)
8function ab_control() {
9        static $ab;
10        if (isset($ab)) return $ab;
11
12        # n = nombre de scenarios
13        $cfg = @unserialize($GLOBALS['meta']['ab']);
14        if (!isset($cfg['n']))
15                return;
16
17        if (!is_null(_request('var_ab'))) {
18                include_spip('inc/cookie');
19                spip_setcookie('var_ab', $ab = _request('var_ab'));
20        } else if (isset($_COOKIE['var_ab']))
21                $ab = $_COOKIE['var_ab'];
22        else
23                $ab = ord(substr(md5($GLOBALS['ip']), -1)); # bien melanger les bits
24
25        $ab = intval($ab)%intval($cfg['n']);
26
27        $GLOBALS['marqueur'] .= 'ab:'.$ab;
28        return $ab;
29}
30
31# silo de stockage
32function ab_silo($page, $ab) {
33        # n = nombre de scenarios
34        $cfg = @unserialize($GLOBALS['meta']['ab']);
35        if (!isset($cfg['n']))
36                return "ab:error";
37        return "ab$ab:".$cfg['n'].":".$_SERVER['HTTP_HOST']."$page";
38}
39
40# fonction de memorisation de la page vue
41function ab_memo($page) {
42        # on ne memorise jamais les bots ni les admins
43        if (isset($_COOKIE['spip_admin'])) {
44                #echo ab_control();
45                return;
46        }
47        if (strstr(strtolower($_SERVER['HTTP_USER_AGENT']), 'bot'))
48                return;
49
50        if (function_exists('xcache_inc')) {
51                xcache_inc(ab_silo($page, ab_control()));
52
53                # log a la rache pour ne rien perdre si le serveur se relance
54                if ($page !== '/') {
55                        $cfg = @unserialize($GLOBALS['meta']['ab']);
56                        foreach (array_filter(preg_split(',[\r\n]+,', $cfg['urls'])) as $p)
57                                spip_log("$p 0=".xcache_get(ab_silo($p, 0))." 1=".xcache_get(ab_silo($p,1)), 'ab');
58                }
59        }
60}
61
62
63#
64# Action
65#
66
67# memoriser si l'URL est suivie
68if ($cfg = @unserialize($GLOBALS['meta']['ab'])
69AND in_array($_SERVER['REQUEST_URI'], preg_split(",[\r\n]+,", $cfg['urls'])))
70        ab_memo($_SERVER['REQUEST_URI']);
71
72# ajouter AB0 ou AB1 dans le chemin
73_chemin('AB'.ab_control());
74
75?>
Note: See TracBrowser for help on using the repository browser.