Completed
Push — master ( db7709...24ebcc )
by Daniel
10:24
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 7
CRAP Score 2

Importance

Changes 1
Bugs 1 Features 0
Metric Value
c 1
b 1
f 0
dl 0
loc 8
ccs 7
cts 7
cp 1
rs 9.4286
cc 2
eloc 4
nc 2
nop 3
crap 2
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 8
	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 8
		$this->cache = $cache;
44 8
		$this->db = $db;
45 8
		$this->request = $request;
46 8
		$this->user = $user;
47 8
		$this->cblocks_table = $cblocks_table;
48 8
	}
49
50
	/**
51
	 * {@inheritdoc}
52
	 */
53 4
	public function display(array $bdata, $edit_mode = false)
54
	{
55 4
		$cblock = $this->_get_custom_blocks();
56
57 4
		$content = '';
58 4
		if (isset($cblock[$bdata['bid']]))
59 4
		{
60 2
			$cblock = $cblock[$bdata['bid']];
61 2
			$content = $this->_get_content($cblock);
62 2
		}
63
		else
64
		{
65
			$cblock = array(
66 2
				'block_id'		=> $bdata['bid'],
67 2
				'block_content'	=> '',
68 2
				'bbcode_uid'	=> '',
69 2
			);
70
		}
71
72 4
		$this->_show_editor($cblock, $content, $edit_mode);
73
74
		return array(
75 4
			'title'		=> 'BLOCK_TITLE',
76 4
			'content'	=> $content,
77 4
		);
78
	}
79
80
	/**
81
	 * @param int $block_id
82
	 * @return array
83
	 */
84 3
	public function save($block_id)
85
	{
86 3
		$content = $this->request->variable('content', '', true);
87 3
		$cblocks = $this->_get_custom_blocks();
88
89
		$sql_data =	array(
90 3
			'block_id'			=> $block_id,
91 3
			'block_content'		=> $content,
92 3
			'bbcode_bitfield'	=> '',
93 3
			'bbcode_options'	=> 7,
94 3
			'bbcode_uid'		=> '',
95 3
		);
96
97 3
		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 3
		$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 3
		$this->db->sql_query($sql);
101 3
		$this->cache->destroy('pt_cblocks');
102
103
		return array(
104 3
			'id'		=> $block_id,
105 3
			'content'	=> $this->_get_content($sql_data),
106 3
			'callback'	=> 'previewCustomBlock',
107 3
		);
108
	}
109
110
	/**
111
	 * @param array $data
112
	 * @return string
113
	 */
114 5
	private function _get_content(array $data)
115
	{
116 5
		$content = generate_text_for_display($data['block_content'], $data['bbcode_uid'], $data['bbcode_bitfield'], $data['bbcode_options']);
117 5
		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 4
	private function _show_editor(array $cblock, &$content, $edit_mode)
127
	{
128 4
		if ($edit_mode !== false)
129 4
		{
130 2
			decode_message($cblock['block_content'], $cblock['bbcode_uid']);
131 2
			$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 2
		}
133 4
	}
134
135
	/**
136
	 * @return array
137
	 */
138 7
	private function _get_custom_blocks()
139
	{
140 7
		if (($cblocks = $this->cache->get('pt_cblocks')) === false)
141 7
		{
142
			$sql = 'SELECT *
143 7
				FROM ' . $this->cblocks_table;
144 7
			$result = $this->db->sql_query($sql);
145
146 7
			$cblocks = array();
147 7
			while ($row = $this->db->sql_fetchrow($result))
148
			{
149 7
				$cblocks[$row['block_id']] = $row;
150 7
			}
151 7
			$this->db->sql_freeresult($result);
152
153 7
			$this->cache->put('pt_cblocks', $cblocks);
154 7
		}
155
156 7
		return $cblocks;
157
	}
158
}
159