Completed
Push — master ( 3c150b...8668fc )
by Matt
05:49
created

data::build_join_array()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 11
Code Lines 5

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 2
CRAP Score 2

Importance

Changes 1
Bugs 0 Features 0
Metric Value
dl 0
loc 11
ccs 2
cts 2
cp 1
rs 9.4285
c 1
b 0
f 0
cc 2
eloc 5
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
			$sql .= ', fpu.user_avatar AS fp_avatar,
32
				fpu.user_avatar_type AS fp_avatar_type,
33
				fpu.user_avatar_width AS fp_avatar_width,
34 2
				fpu.user_avatar_height AS fp_avatar_height';
35
36 2
			if ($this->last_post_enabled())
37 2
			{
38
				$sql .= ', lpu.user_avatar AS lp_avatar,
39
					lpu.user_avatar_type AS lp_avatar_type,
40 3
					lpu.user_avatar_width AS lp_avatar_width,
41 2
					lpu.user_avatar_height AS lp_avatar_height';
42 2
			}
43 2
		}
44
45 2
		return $sql;
46
	}
47
48
	/**
49
	 * Update an SQL JOIN statement to get data needed for topic previews
50
	 *
51
	 * @return array SQL JOIN params
52
	 */
53 2
	public function tp_sql_join()
54
	{
55 2
		$sql_array = array();
56
57 2
		$sql_array['LEFT_JOIN'][] = array(
58 2
			'FROM'	=> array(POSTS_TABLE => 'fp'),
59
			'ON'	=> 'fp.post_id = t.topic_first_post_id'
60 2
		);
61
62 2
		if ($this->avatars_enabled())
63 2
		{
64 2
			$sql_array['LEFT_JOIN'][] = array(
65 2
				'FROM'	=> array(USERS_TABLE => 'fpu'),
66
				'ON'	=> 'fpu.user_id = t.topic_poster'
67 2
			);
68 2
		}
69
70 2
		if ($this->last_post_enabled())
71 2
		{
72 2
			$sql_array['LEFT_JOIN'][] = array(
73 2
				'FROM'	=> array(POSTS_TABLE => 'lp'),
74
				'ON'	=> 'lp.post_id = t.topic_last_post_id'
75 2
			);
76
77 2
			if ($this->avatars_enabled())
78 2
			{
79 2
				$sql_array['LEFT_JOIN'][] = array(
80 2
					'FROM'	=> array(USERS_TABLE => 'lpu'),
81
					'ON'	=> 'lpu.user_id = t.topic_last_poster_id'
82 2
				);
83 2
			}
84 2
		}
85
86 2
		return $sql_array;
87
	}
88
89
	/**
90
	 * Modify SQL string|array to get post text
91
	 *
92
	 * @param string|array $sql_stmt SQL string or array to be modified
93
	 * @param string       $type     Type of SQL statement SELECT|JOIN
94
	 * @return string|array SQL statement string or array
95
	 */
96 3
	public function modify_sql($sql_stmt, $type = 'SELECT')
97
	{
98 3
		if (!$this->is_enabled())
99 3
		{
100 1
			return $sql_stmt;
101
		}
102
103 2
		if (is_array($sql_stmt))
104 2
		{
105 1
			$sql_stmt = $this->build_join_array($sql_stmt);
106 1
			$sql_stmt['SELECT'] .= $this->tp_sql_select();
107
			return $sql_stmt;
108 1
		}
109 1
110
		if ($type == 'SELECT')
111 1
		{
112 1
			$sql_stmt .= $this->tp_sql_select();
113
			return $sql_stmt;
114
		}
115 1
116 1
		return $this->build_join_statement($sql_stmt);
117 1
	}
118 1
119
	/**
120
	 * Add LEFT_JOIN statements to an sql array
121 1
	 *
122 1
	 * @param array $sql_stmt An sql array
123
	 * @return array Updated sql array
124 1
	 */
125 1
	protected function build_join_array($sql_stmt)
126
	{
127
		$array = $this->tp_sql_join();
128
129 2
		foreach ($array['LEFT_JOIN'] as $join)
130
		{
131
			$sql_stmt['LEFT_JOIN'][] = $join;
132
		}
133
134
		return $sql_stmt;
135
	}
136
137
	/**
138
	 * Add LEFT_JOIN statements to an sql statement
139
	 *
140
	 * @param string $sql_stmt An sql statement
141
	 * @return string Updated sql statement
142
	 */
143
	protected function build_join_statement($sql_stmt)
144
	{
145
		$array = $this->tp_sql_join();
146
147
		foreach ($array['LEFT_JOIN'] as $join)
148
		{
149
			$sql_stmt .= ' LEFT JOIN ' . key($join['FROM']) . ' ' . current($join['FROM']) . ' ON (' . $join['ON'] . ')';
150
		}
151
152
		return $sql_stmt;
153
	}
154
}
155