| 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 |  |  |  |