summaryrefslogtreecommitdiff
path: root/src/Message/Base.php
blob: 2b7b0e4040be19bb04bed60d75282dab660e7ec2 (plain)
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
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
<?php

namespace App\Message;

use Mustache_Engine;
use App\Config\Config;
use App\Message\Handler;

/**
* Base class for a message
*
* @author Phil Burton <phil@pgburton.com>
*/
class Base
{
    /**
     * Message name to load
     *
     * @var string
     */
    protected $message_name;

    /**
     * Cache of the loaded config array
     *
     * @var string
     */
    protected $config;

    /**
     * The raw message string loaded from config
     *
     * @var string
     */
    protected $message;

    /**
     * The list of vars we need to inject
     *
     * @var array
     */
    protected $injects = [];

    /**
     * The array of important vars
     *
     * @var string
     */
    protected $important;

    /**
    * Load the message from the config
    *
    * @author Phil Burton <phil@pgburton.com>
    */
    protected function loadMessage()
    {
        if (!array_key_exists($this->message_name, $this->config)) {
            throw new Exception('Could not load messge from config (' . $this->message_name . ')');
        }

        $this->message = $this->config[$this->message_name];
    }

    /**
    * Load the config
    */
    protected function loadConfig()
    {
        $config =Config::getConfig();

        if (!$config) {
            throw new \Exception('Could not load config');
        }

        $this->config = $config;
    }

    /**
    * Construct, load config and message
    *
    * @author Phil Burton <phil@pgburton.com>
    */
    public function __construct()
    {
        $this->loadConfig();

        $this->loadMessage();
    }

    /**
    * Render the message, injecting any values into the message using mustache
    *
    * @author Phil Burton <phil@pgburton.com>
    */
    public function renderMessage()
    {
        $m = new Mustache_Engine;
        return $m->render($this->message, $this->getInjectValues());
    }


    /**
    * Return the injected values
    *
    * @author Phil Burton <phil@pgburton.com>
    */
    public function getInjectValues()
    {
        $out = [];
        foreach ($this->injects as $inject) {
            $out[$inject] = $this->$inject;
        }

        return $out;
    }

    /**
    * Get the important injected values
    *
    * @author Phil Burton <phil@pgburton.com>
    */
    public function getImportantValues()
    {
        $out = [];
        foreach ($this->important as $important) {
            $out[$important] = $this->$important;
        }

        return $out;
    }

    /**
    * Set-up this message's inject values based on an input array
    *
    * @author Phil Burton <phil@pgburton.com>
    */
    public function setFromArray(array $array)
    {
        foreach ($array as $key => $value) {
            if (in_array($key, $this->injects)) {
                $this->$key = (string) $value;
            }
        }
    }
}