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 
<?php
/* --------------------------------------------------------------
   PersonalDataSelection.inc.php 2018-05-14
   Gambio GmbH
   http://www.gambio.de
   Copyright (c) 2018 Gambio GmbH
   Released under the GNU General Public License (Version 2)
   [http://www.gnu.org/licenses/gpl-2.0.html]
   --------------------------------------------------------------
*/

/**
 * Class representing the personal data selection value object
 */
class PersonalDataSelection {
    /**
     * Selection values
     * @var array
     */
    private $selection = [];

    /**
     * Valid selection keys
     * @var array
     */
    private $validKeys = [
        PersonalDataSelectionItem::BASE_DATA,
        PersonalDataSelectionItem::ORDERS,
        PersonalDataSelectionItem::WITHDRAWALS,
        PersonalDataSelectionItem::AGREEMENTS,
        PersonalDataSelectionItem::EMAILS,
        PersonalDataSelectionItem::CARTS,
        PersonalDataSelectionItem::REVIEWS,
        PersonalDataSelectionItem::NEWSLETTER_SUBSCRIPTIONS
    ];

    /**
     * Create an instance
     * @param array $selection Selection key-value pairs
     */
    public function __construct(array $selection) {
        foreach ($selection as $key => $value) {
            if (!in_array($key, $this->validKeys)) {
                throw new InvalidArgumentException("Invalid key '${key}'");
            }

            if (!is_bool($value)) {
                throw new InvalidArgumentException("Invalid value '${value}' in key '${key}'");
            }
        }

        $this->selection = $selection;
    }

    /**
     * Return whether the provided item is selected
     * @param string $item Selection item
     * @return bool Selection value
     */
    public function isSelected($item)
    {
        if (!in_array($item, $this->validKeys)) {
            throw new InvalidArgumentException("Invalid '${item}' key");
        }

        return $this->selection[$item];
    }
}