1<?php
2/**
3 * Copyright 2017 Facebook, Inc.
4 *
5 * You are hereby granted a non-exclusive, worldwide, royalty-free license to
6 * use, copy, modify, and distribute this software in source code or binary
7 * form for use in connection with the web services and APIs provided by
8 * Facebook.
9 *
10 * As with any software that integrates with the Facebook platform, your use
11 * of this software is subject to the Facebook Developer Principles and
12 * Policies [http://developers.facebook.com/policy/]. This copyright notice
13 * shall be included in all copies or substantial portions of the software.
14 *
15 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
18 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
20 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
21 * DEALINGS IN THE SOFTWARE.
22 *
23 */
24namespace Facebook\GraphNodes;
25
26use DateTime;
27
28/**
29 * Birthday object to handle various Graph return formats
30 *
31 * @package Facebook
32 */
33class Birthday extends DateTime
34{
35    /**
36     * @var bool
37     */
38    private $hasDate = false;
39
40    /**
41     * @var bool
42     */
43    private $hasYear = false;
44
45    /**
46     * Parses Graph birthday format to set indication flags, possible values:
47     *
48     *  MM/DD/YYYY
49     *  MM/DD
50     *  YYYY
51     *
52     * @link https://developers.facebook.com/docs/graph-api/reference/user
53     *
54     * @param string $date
55     */
56    public function __construct($date)
57    {
58        $parts = explode('/', $date);
59
60        $this->hasYear = count($parts) === 3 || count($parts) === 1;
61        $this->hasDate = count($parts) === 3 || count($parts) === 2;
62
63        parent::__construct($date);
64    }
65
66    /**
67     * Returns whether date object contains birth day and month
68     *
69     * @return bool
70     */
71    public function hasDate()
72    {
73        return $this->hasDate;
74    }
75
76    /**
77     * Returns whether date object contains birth year
78     *
79     * @return bool
80     */
81    public function hasYear()
82    {
83        return $this->hasYear;
84    }
85}
86