Completed
Pull Request — master (#32)
by Matt
07:28
created

data::build_avatar_select()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 18
Code Lines 10

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 11
CRAP Score 2

Importance

Changes 1
Bugs 0 Features 0
Metric Value
c 1
b 0
f 0
dl 0
loc 18
ccs 11
cts 11
cp 1
rs 9.4285
cc 2
eloc 10
nc 2
nop 1
crap 2
1
<?php
2
/**
3
*
4
* Topic Preview
5
*
6
* @copyright (c) 2013 Matt Friedman
7
* @license GNU General Public License, version 2 (GPL-2.0)
8
*
9
*/
10
11
namespace vse\topicpreview\core;
12
13
class data extends base
14
{
15
	/**
16
	 * Update an SQL SELECT statement to get data needed for topic previews
17
	 *
18
	 * @return string SQL SELECT appendage
19
	 */
20 3
	public function tp_sql_select()
21
	{
22 2
		$sql = ', fp.post_text AS first_post_text';
23
24 2
		if ($this->last_post_enabled())
25 2
		{
26 2
			$sql .= ', lp.post_text AS last_post_text';
27 2
		}
28
29 2
		if ($this->avatars_enabled())
30 2
		{
31 2
			$sql .= $this->build_avatar_select('fp');
32
33 2
			if ($this->last_post_enabled())
34 2
			{
35 2
				$sql .= $this->build_avatar_select('lp');
36 2
			}
37 2
		}
38
39 2
		return $sql;
40 3
	}
41
42
	/**
43
	 * Update an SQL JOIN statement to get data needed for topic previews
44
	 *
45
	 * @return array SQL JOIN params
46
	 */
47 2
	public function tp_sql_join()
48
	{
49 2
		$sql_array = array();
50
51 2
		$sql_array['LEFT_JOIN'][] = array(
52 2
			'FROM'	=> array(POSTS_TABLE => 'fp'),
53
			'ON'	=> 'fp.post_id = t.topic_first_post_id'
54 2
		);
55
56 2
		if ($this->avatars_enabled())
57 2
		{
58 2
			$sql_array['LEFT_JOIN'][] = array(
59 2
				'FROM'	=> array(USERS_TABLE => 'fpu'),
60 2
				'ON'	=> 'fpu.user_id = t.topic_poster'
61 2
			);
62 2
		}
63
64 2
		if ($this->last_post_enabled())
65 2
		{
66 2
			$sql_array['LEFT_JOIN'][] = array(
67 2
				'FROM'	=> array(POSTS_TABLE => 'lp'),
68
				'ON'	=> 'lp.post_id = t.topic_last_post_id'
69 2
			);
70
71 2
			if ($this->avatars_enabled())
72 2
			{
73 2
				$sql_array['LEFT_JOIN'][] = array(
74 2
					'FROM'	=> array(USERS_TABLE => 'lpu'),
75
					'ON'	=> 'lpu.user_id = t.topic_last_poster_id'
76 2
				);
77 2
			}
78 2
		}
79
80 2
		return $sql_array;
81
	}
82
83
	/**
84
	 * Modify SQL string|array to get post text
85
	 *
86
	 * @param string|array $sql_stmt SQL string or array to be modified
87
	 * @param string       $type     Type of SQL statement SELECT|JOIN
88
	 * @return string|array SQL statement string or array
89
	 */
90 3
	public function modify_sql($sql_stmt, $type = 'SELECT')
91
	{
92 3
		if (!$this->is_enabled())
93 3
		{
94 1
			return $sql_stmt;
95
		}
96
97 2
		if (is_array($sql_stmt))
98 2
		{
99 1
			$sql_stmt = $this->build_join_array($sql_stmt);
100 1
			$sql_stmt['SELECT'] .= $this->tp_sql_select();
101 1
			return $sql_stmt;
102
		}
103
104 1
		if ($type == 'SELECT')
105 1
		{
106 1
			$sql_stmt .= $this->tp_sql_select();
107 1
			return $sql_stmt;
108
		}
109
110 1
		return $this->build_join_statement($sql_stmt);
111
	}
112
113
	/**
114
	 * Build select statement for user avatar fields, e.g.:
115
	 * ', fpu.user_avatar AS fp_avatar
116
	 *  , fpu.user_avatar_type AS fp_avatar_type
117
	 *  , fpu.user_avatar_width AS fp_avatar_width
118
	 *  , fpu.user_avatar_height AS fp_avatar_height'
119
	 *
120
	 * @param string $prefix First or last post (fp|lp)
121
	 * @return string Partial sql statement
122
	 */
123 2
	protected function build_avatar_select($prefix)
124
	{
125 2
		$sql = '';
126
127
		$avatar_ary = array(
128 2
			'user_avatar'        => 'avatar',
129 2
			'user_avatar_type'   => 'avatar_type',
130 2
			'user_avatar_width'  => 'avatar_width',
131 2
			'user_avatar_height' => 'avatar_height',
132 2
		);
133
134 2
		foreach ($avatar_ary as $key => $var)
135
		{
136 2
			$sql .= ", {$prefix}u.{$key} AS {$prefix}_$var";
137 2
		}
138
139 2
		return $sql;
140
	}
141
142
	/**
143
	 * Add LEFT_JOIN statements to an sql array
144
	 *
145
	 * @param array $sql_stmt An sql array
146
	 * @return array Updated sql array
147
	 */
148 1
	protected function build_join_array($sql_stmt)
149
	{
150 1
		$array = $this->tp_sql_join();
151
152 1
		foreach ($array['LEFT_JOIN'] as $join)
153
		{
154 1
			$sql_stmt['LEFT_JOIN'][] = $join;
155 1
		}
156
157 1
		return $sql_stmt;
158
	}
159
160
	/**
161
	 * Add LEFT_JOIN statements to an sql statement
162
	 *
163
	 * @param string $sql_stmt An sql statement
164
	 * @return string Updated sql statement
165
	 */
166 1
	protected function build_join_statement($sql_stmt)
167
	{
168 1
		$array = $this->tp_sql_join();
169
170 1
		foreach ($array['LEFT_JOIN'] as $join)
171
		{
172 1
			$sql_stmt .= ' LEFT JOIN ' . key($join['FROM']) . ' ' . current($join['FROM']) . ' ON (' . $join['ON'] . ')';
173 1
		}
174
175 1
		return $sql_stmt;
176
	}
177
}
178