1<?php
2
3/**
4 * Component of HTMLPurifier_AttrContext that accumulates IDs to prevent dupes
5 * @note In Slashdot-speak, dupe means duplicate.
6 * @note The default constructor does not accept $config or $context objects:
7 *       use must use the static build() factory method to perform initialization.
8 */
9class HTMLPurifier_IDAccumulator
10{
11
12    /**
13     * Lookup table of IDs we've accumulated.
14     * @public
15     */
16    public $ids = array();
17
18    /**
19     * Builds an IDAccumulator, also initializing the default blacklist
20     * @param HTMLPurifier_Config $config Instance of HTMLPurifier_Config
21     * @param HTMLPurifier_Context $context Instance of HTMLPurifier_Context
22     * @return HTMLPurifier_IDAccumulator Fully initialized HTMLPurifier_IDAccumulator
23     */
24    public static function build($config, $context)
25    {
26        $id_accumulator = new HTMLPurifier_IDAccumulator();
27        $id_accumulator->load($config->get('Attr.IDBlacklist'));
28        return $id_accumulator;
29    }
30
31    /**
32     * Add an ID to the lookup table.
33     * @param string $id ID to be added.
34     * @return bool status, true if success, false if there's a dupe
35     */
36    public function add($id)
37    {
38        if (isset($this->ids[$id])) {
39            return false;
40        }
41        return $this->ids[$id] = true;
42    }
43
44    /**
45     * Load a list of IDs into the lookup table
46     * @param $array_of_ids Array of IDs to load
47     * @note This function doesn't care about duplicates
48     */
49    public function load($array_of_ids)
50    {
51        foreach ($array_of_ids as $id) {
52            $this->ids[$id] = true;
53        }
54    }
55}
56
57// vim: et sw=4 sts=4
58