main.php
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
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
<?php
/*
 * Класс работает с новостями каждой сауны
 * Основные задачи:
 *  - Запись новости
 *  - Редактирование одной новости
 *  - Выборка новостей по параметрам
 *  - Тестирование самого себя
 */
/**
 * Docs
 *  Методы для работы с Базой Данных
 *  Выбрать только одну строку
 *      Config::model()->db->setSql("SELECT * FROM table")->fetch();
 *  Выбрать массив строк
 *      Config::model()->db->setSql("SELECT * FROM table")->fetchAll();
 *  Выбрать строку таблицы в виде объекта
 *      Config::model()->db->setSql("SELECT * FROM table")->fetchObject();
 *  Исполняет SQL запрос и возвращает количество затронутых строк
 *      Config::model()->db->setSql("SELECT * FROM table")->exec();
 *  Обновление данных в таблице
 *      Config::model()->db->update("table_name", $arr = ['column'=>"val"], $where = "id = 10");
 *  Добавление новой строки
 *      Config::model()->db->insert("table_name", $arr = ['column'=>"val"]);
 *  Удаление
 *      Config::model()->db->delete("table_name", $where = "id = 10");
 *
 */

/**
 * Доступ к служебным значениям
 *  Получение массива доступных языков
 *      Config::model()->getLanguages();
 *  Получение текущего языка
 *      Config::model()->getCurrentLang();
 *  Установить значений по ключу
 *      Config::model()->set($place = "SESSION", $key = "something", $value = "something");
 *  Получение значений по ключу
 *      Config::model()->get($place = "SESSION", $key = "something");
 *  Получение URI
 *      Config::model()->getUri();
 *  Получение URL
 *      Config::model()->getUrl();
 *  Создание редиректа по заданому URL
 *      Config::model()->redirect($url);
 */

/**
 * Использование CACHE
 *  Установка значений
 *      Cache::model()->set($key = "something",$val = "something",$time = 300);
 *  Получение значений
 *      Cache::model()->get($key = "something");
 *  Удаление занчений
 *      Cache::model()->delete($key = "something");
 *  Удаление всего CACHE
 *      Cache::model()->cleanAll();
 */

/*
    Структура данных новости:
   1. id	int(11)
   2. sauna_id	int(11)
   3. date	date
   4. title	varchar(255)
   5. desc	varchar(255)
   6. text	text
   7. visible	enum("on", "off")
   8. lang	varchar(2)
*/

namespace site\phplibs;

/*
 * Особенности вывода новостей в интерфейсе iSaunaNews в том, что они выводяться в одном языке текущем выбранном пользователем.
 * В отличии от интерфейса редактирования, где новости редактируються на всех существующих на портале языках, которые храняться в переменной $allAvailableLang.
*/
use system\Config;

interface iSaunaNews
{
    public function getOneNews($newsID);

    public function getAllNewsCurrentLang();

    public function getAllNewsFilterLang($lang);

    public function getAllNewsAllLang();
}


/*
 * При редактировании новостей
*/

interface iSaunaNewsEdit
{
    public function createOneNews($newsParamArr);

    public function updateOneNews($newsID, $newsParamArr);

    public function deleteOneNews($newsID);

}

interface iSaunaNewsTest
{
    public function getSelfTest();
}


class SaunaNews implements iSaunaNews, iSaunaNewsEdit, iSaunaNewsTest
{
    public $NewsTable = "new_sauna_news";
    public $saunaID;
    public $currentLang;
    public $allAvailableLang;
    public $testOutput = "";


    public function __constructor($saunaId)
    {
        $this->saunaID = $saunaId;
        $this->currentLang = Config::model()->getCurrentLang();
        $this->allAvailableLang = Config::model()->getLanguages();
    }


    /**
     * Функции интерфейса iSaunaNewsEdit
     * @param $newsParamArr
     * @return mixed
     */
    public function createOneNews($newsParamArr)
    {
        $newsID = NULL;
        /**
         * Данный метод должен притять все параметры новости в $newsParamArr и создать новую строку в таблице $NewsTable
         * Вернуть должен newsID  - это id созданной новости
         * Его необходимо после создания выбрать из всех новостей по параметрам date, title, desc, text, visible, lang
         */
        return $newsID;
    }

    public function updateOneNews($newsID, $newsParamArr)
    {
        /**
         * Данный метод должен притять все параметры новости в $newsParamArr и сохранить данные в базу данных
         * Вернуть должен либо true либо falce в зависимости от результата выполнения действия
         */
    }


    public function deleteOneNews($newsID)
    {
        $numberDelete = NULL;
        /**
         * $numberDelete - параметр  в котором указываеться количество удаленных строк. Эти данные возвращает MySQL при запросе удаления.
         * В данном случае он может быть либо 1, либо 0. Если 0, то ни одна строка удалена небыла.
         */
        return $numberDelete;
    }

    /**
     * Функции интерфейса iSaunaNews
     * @param $newsID
     * @return mixed
     */
    public function getOneNews($newsID)
    {
        $newsParamArr = NULL;
        /**
         * Данный метод возвращает весь масив новости в виде структуры $newsParamArr (описание см. выше)
         */
        return $newsParamArr;

    }

    /**
     * @return mixed
     */
    public function getAllNewsCurrentLang()
    {
        $newsParamArr = [];
        /*
         * Данный метод возвращает масив новостей
         * Где каждая новость в виде структуры $newsParamArr (описание см. выше)
         */

        return $newsParamArr;
    }

    public function getAllNewsFilterLang($lang)
    {
        $newsParamArr = [];
        /**
         * Данный метод возвращает масив новостей для одной сауны где параметр  $lang совпадает с параметром $lang в таблице новостей
         * Где каждая новость в виде структуры $newsParamArr (описание см. выше)
         */
        return $newsParamArr;
    }


    /**
     * @return mixed
     */
    public function getAllNewsAllLang()
    {
        $newsParamArr = [];
        /**
         * Данный метод возвращает масив новостей для одной сауны без учета языка, т.е. во всех языках
         * Где каждая новость в виде структуры $newsParamArr (описание см. выше)
         */
        return $newsParamArr;
    }

    /*
        Пример
        $newsParamArr = [
        ["id"] => 1;
        ["sauna_id"] = 1;
        ["date"] = "2017-08-12";
        ["title"] = "Title";
        ["desc"] = "Description";
        ["text"] = "News text";
        ["visible"] = "on"; // on, of
        ["lang"] = "ru"; // ua, ru, en
        ];
    */

    /**
     * Функции интерфейса iSaunaNewsTest
     */
    public function getSelfTest()
    {
        $this->newsParamArr = [
            [
                "sauna_id" => 4,
                "date" => "2017-08-12",
                "title" => "Title",
                "desc" => "Description",
                "text" => "News text",
                "visible" => "on", // on, of
                "lang" => "ru", // ua, ru, en
            ],
            [
                "sauna_id" => 4,
                "date" => "2017-08-11",
                "title" => "Title2",
                "desc" => "Description2",
                "text" => "News text2",
                "visible" => "on", // on, of
                "lang" => "ru", // ua, ru, en
            ]
        ];

        $this->createTest();
        $this->updateTest();
        $this->deleteTest();

        echo $this->testOutput;

    }


    private function createTest()
    {

        foreach ($this->newsParamArr as $keyNews => $itemNews) {
            $newsID = $this->createOneNews($this->newsParamArr[$keyNews]);
            $this->newsParamArr[$keyNews]["newsID"];
            $testNews = $this->getOneNews($newsID);


            foreach ($this->newsParamArr[$keyNews] as $key => $item) {
                if ($item = $testNews[$key]) {
                    $this->testOutput .= "Create test param " . $key . " news number " . $keyNews . ": <font color=green >Success</font><\br>";
                } else {
                    $this->testOutput .= "Create test param " . $key . " news number " . $keyNews . ": <font color=red >UnSuccess</font><\br>";
                }
            }
        }

    }


    private function updateTest()
    {
        $this->updateOneNews($this->newsParamArr[0]["newsID"], $this->newsParamArr[1]);
        $testNews = $this->getOneNews($this->newsParamArr[0]["newsID"]);

        foreach ($this->newsParamArr[1] as $key => $item) {
            if ($key <> "newsID" && $item = $testNews[$key]) {
                $this->testOutput .= "Update test param " . $key . " news number " . $key . ": <font color=green >Success</font><\br>";
            } else {
                $this->testOutput .= "Update test param " . $key . " news number " . $key . ": <font color=red >UnSuccess</font><\br>";
            }
        }
    }


    private function deleteTest()
    {
        foreach ($this->newsParamArr as $key => $item) {
            $testNews = $this->deleteOneNews($item["newsID"]);

            if ($testNews == 1) {
                $this->testOutput .= "Delete test news number " . $key . ": <font color=green >Success</font><\br>";
            } else {
                $this->testOutput .= "Delete test news number " . $key . ": <font color=red >UnSuccess</font><\br>";
            }
        }
    }


} 
PHP 7.0.8 (cli) (built: Jun 23 2016 23:39:14) ( NTS ) Copyright (c) 1997-2016 The PHP Group Zend Engine v3.0.0, Copyright (c) 1998-2016 Zend Technologies