Completed
Push — master ( a93112...75382e )
by Daniel
16:13
created

custom::_show_editor()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 8
Code Lines 4

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 6

Importance

Changes 1
Bugs 1 Features 0
Metric Value
c 1
b 1
f 0
dl 0
loc 8
ccs 0
cts 5
cp 0
rs 9.4286
cc 2
eloc 4
nc 2
nop 3
crap 6
1
<?php
2
/**
3
 *
4
 * @package sitemaker
5
 * @copyright (c) 2013 Daniel A. (blitze)
6
 * @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2
7
 *
8
 */
9
10
namespace blitze\sitemaker\blocks;
11
12
/**
13
 * Custom Block
14
 */
15
class custom extends \blitze\sitemaker\services\blocks\driver\block
16
{
17
	/** @var \phpbb\cache\driver\driver_interface */
18
	protected $cache;
19
20
	/** @var \phpbb\db\driver\driver_interface */
21
	protected $db;
22
23
	/** @var \phpbb\request\request_interface */
24
	protected $request;
25
26
	/** @var \phpbb\user */
27
	protected $user;
28
29
	/** @var string */
30
	protected $cblocks_table;
31
32
	/**
33
	 * Constructor
34
	 *
35
	 * @param \phpbb\cache\driver\driver_interface	$cache				Cache driver interface
36
	 * @param \phpbb\db\driver\driver_interface		$db					Database object
37
	 * @param \phpbb\request\request_interface		$request			Request object
38
	 * @param \phpbb\user							$user				User object
39
	 * @param string								$cblocks_table		Name of custom blocks database table
40
	 */
41
	public function __construct(\phpbb\cache\driver\driver_interface $cache, \phpbb\db\driver\driver_interface $db, \phpbb\request\request_interface $request, \phpbb\user $user, $cblocks_table)
42
	{
43
		$this->cache = $cache;
44
		$this->db = $db;
45
		$this->request = $request;
46
		$this->user = $user;
47
		$this->cblocks_table = $cblocks_table;
48
	}
49
50
	/**
51
	 * {@inheritdoc}
52
	 */
53
	public function display(array $bdata, $edit_mode = false)
54
	{
55
		$cblock = $this->_get_custom_blocks();
56
57
		$content = '';
58
		if (isset($cblock[$bdata['bid']]))
59
		{
60
			$cblock = $cblock[$bdata['bid']];
61
			$content = $this->_get_content($cblock);
62
		}
63
		else
64
		{
65
			$cblock = array(
66
				'block_id'		=> $bdata['bid'],
67
				'block_content'	=> '',
68
				'bbcode_uid'	=> '',
69
			);
70
		}
71
72
		$this->_show_editor($cblock, $content, $edit_mode);
73
74
		return array(
75
			'title'		=> 'BLOCK_TITLE',
76
			'content'	=> $content,
77
		);
78
	}
79
80
	/**
81
	 * @param int $block_id
82
	 * @return array
83
	 */
84
	public function save($block_id)
85
	{
86
		$content = $this->request->variable('content', '', true);
87
		$cblocks = $this->_get_custom_blocks();
88
89
		$sql_data =	array(
90
			'block_id'			=> $block_id,
91
			'block_content'		=> $content,
92
			'bbcode_bitfield'	=> '',
93
			'bbcode_options'	=> 7,
94
			'bbcode_uid'		=> '',
95
		);
96
97
		generate_text_for_storage($sql_data['block_content'], $sql_data['bbcode_uid'], $sql_data['bbcode_bitfield'], $sql_data['bbcode_options'], true, true, true);
98
99
		$sql = (!isset($cblocks[$block_id])) ? 'INSERT INTO ' . $this->cblocks_table . ' ' . $this->db->sql_build_array('INSERT', $sql_data) : 'UPDATE ' . $this->cblocks_table . ' SET ' . $this->db->sql_build_array('UPDATE', $sql_data) . ' WHERE block_id = ' . (int) $block_id;
100
		$this->db->sql_query($sql);
101
		$this->cache->destroy('pt_cblocks');
102
103
		return array(
104
			'id'		=> $block_id,
105
			'content'	=> $this->_get_content($sql_data),
106
			'callback'	=> 'previewCustomBlock',
107
		);
108
	}
109
110
	/**
111
	 * @param array $data
112
	 * @return string
113
	 */
114
	private function _get_content(array $data)
115
	{
116
		$content = generate_text_for_display($data['block_content'], $data['bbcode_uid'], $data['bbcode_bitfield'], $data['bbcode_options']);
117
		return html_entity_decode($content);
118
	}
119
120
	/**
121
	 * @param array $cblock
122
	 * @param string $content
123
	 * @param bool $edit_mode
124
	 * @return string
125
	 */
126
	private function _show_editor(array $cblock, &$content, $edit_mode)
127
	{
128
		if ($edit_mode !== false)
129
		{
130
			decode_message($cblock['block_content'], $cblock['bbcode_uid']);
131
			$content = '<div id="block-editor-' . $cblock['block_id'] . '" class="editable editable-block" data-service="blitze.sitemaker.block.custom" data-method="save" data-raw="' . $cblock['block_content'] . '">' . $content . '</div>';
132
		}
133
	}
134
135
	/**
136
	 * @return array
137
	 */
138
	private function _get_custom_blocks()
139
	{
140
		if (($cblocks = $this->cache->get('pt_cblocks')) === false)
141
		{
142
			$sql = 'SELECT *
143
				FROM ' . $this->cblocks_table;
144
			$result = $this->db->sql_query($sql);
145
146
			$cblocks = array();
147
			while ($row = $this->db->sql_fetchrow($result))
148
			{
149
				$cblocks[$row['block_id']] = $row;
150
			}
151
			$this->db->sql_freeresult($result);
152
153
			$this->cache->put('pt_cblocks', $cblocks);
154
		}
155
156
		return $cblocks;
157
	}
158
}
159