Update 01/201311
Transkrypt
Update 01/201311
Update 01/201311 Poniższe poprawki wprowadzają następujące zmiany/funkcje: 1. Poprawka błędu w PA powodującego pojawienie się białej poświaty po kliknięciu na zdjęcie w menu [ZDJĘCIA W TOPIE] 2. Aktualizacja modułu użytkownicy dodająca wyszukiwarkę 3. Dodanie w PA bezpośredniego linku do abonamentu wyświetlania, oraz abonamentu promocji na podstronie zawierającej listę obiektów w PA 4. Rozbudowa funkcji w PA wysyłania wiadomości do użytkowników o nową opcję filtrowania. W celu wykonania aktualizacji zalecamy skorzystanie z edytora zawierającego kodowanie składni. Osoby nie mające podstawowej wiedzy z zakresu PHP, HTML, CSS, JAVASCRIPT nie powinny wykonywać poniższych modyfikacji, bez uprzedniego wykonania kopii zapasowej edytowanych plików. Autor oprogramowania, nie bierze odpowiedzialności za błędy wynikłe w błędnym wykonaniu niniejszej aktualizacji. 1. Poprawka błędu w PA powodującego pojawienie się białej poświaty po kliknięciu na zdjęcie w menu. Po kliknięciu na obrazek topu, następnie kliknięciu na [X] w celu jego zamknięcia, pozostaje białe podświetlenie na stronie. Edycja pliku: /modules/system/templates/admin/banner/list.smarty Wyszukujemy ciąg: <a title="{$item.description}" href="{$smarty.const.APP_URL}userfiles/banner/{$item.banner_file}" rel="lightbox" class="noloading"><img height="100" src="{$smarty.const.APP_URL}userfiles/banner/{$item.banner_file}" /></a> i zamieniamy całość na: <a title="{$item.description}" href="{$smarty.const.APP_URL}userfiles/banner/{$item.banner_file}" rel="lightbox" class="loading"><img height="100" src="{$smarty.const.APP_URL}userfiles/banner/{$item.banner_file}" /></a> 2. Aktualizacja modułu użytkownicy dodająca wyszukiwarkę Aktualizacja wprowadza wyszukiwarkę w liście dostępnych użytkowników Edycja pliku: /modules/users/templates/admin/list.smarty Wyszukujemy ciąg: <p>W tym miejscu można zarządzać użytkownikami serwisu. System oferuje 2 typy kont: konto użytkownika, oraz konto administratora.</p> Kod do wprowadzenia, zaraz pod powyższym ciągiem: <form action="{$smarty.const.APP_URL}admin/users/list/" method="get"> <input type="hidden" name="searchEngine" value="TRUE" /> <table><tr class="header"> <td colspan="4">Wyszukiwarka</td> </tr><tr> <td class="left">Login</td> <td class="right"><input type="text" name="search_login" value="{$smarty.get.search_login}" /></td> <td class="left">E-Mail</td> <td class="right"><input type="text" name="search_email" value="{$smarty.get.search_email}" /></td> </tr><tr> <td class="left">Status</td> <td class="right"><input type="radio" name="search_status" value="TRUE" {if $smarty.get.search_status=="TRUE"}checked{/if} /> potwierdzony, <input type="radio" name="search_status" value="FALSE" {if $smarty.get.search_status=="FALSE"}checked{/if} /> niepotwierdzony</td> <td class="left">Data dodania</td> <td class="right"><input type="text" name="search_create_date_from" value="{$smarty.get.search_create_date_from}" {jsCalendar} size="8"/> <input type="text" name="search_create_date_to" value="{$smarty.get.search_create_date_to}" {jsCalendar} size="8" /></td> </tr><tr class="footer"> <td colspan="4"><input type="submit" value="wyszukaj »" /></td> </tr></table> </form> Edycja pliku: /modules/users/admin.php Wyszukujemy warunek case: case "list": $kernel->isAdmin(); $kernel->template("list.smarty"); $smarty->assign("lista" , $user->adminGetUsers()); break; zamieniamy cały warunek, na poniższy kod: case "list": $kernel->isAdmin(); $kernel->template("list.smarty"); if(empty($_GET['searchEngine'])) { $smarty->assign("lista" , $user->adminGetUsers()); } else { $smarty->assign("lista" , $users->adminSearchUsers()); } break; Edycja pliku: /modules/users/users.class.php Wyszukujemy funkcję: public function adminGetUsers() { if($_SESSION['admin_user']['type']=="SUPPORT"): $this->perpage = 50; $this->type = "basic"; $this->sqlFullQuery = "SELECT * FROM " . SQLTABLE_USERS . " ORDER BY id"; return $this->paginate(); endif; if($_SESSION['admin_user']['type']=="ADMIN"): $this->perpage = 50; $this->type = "basic"; $this->sqlFullQuery = "SELECT * FROM " . SQLTABLE_USERS . " WHERE type != 'SUPPORT' ORDER BY id"; return $this->paginate(); endif; } Poniżej tej funkcji ( po znaku } od nowej lini) wprowadzmy poniższy kod: /** Obsługa wyszukiwarki użytkowników ``````````````````````````````````````````````````````````````````````````` **/ public function adminSearchUsers() { if(!empty($_GET['search_login'])) { $query[] = " AND login='".$_GET['search_login']."' "; } if(!empty($_GET['search_email'])) { $query[] = " AND email='".$_GET['search_email']."' "; } if(!empty($_GET['search_status'])) { $query[] = " AND status='".$_GET['search_status']."' "; } if((!empty($_GET['search_create_date_from'])) AND (!empty($_GET['search_create_date_to']))) { $query[] = " AND create_date BETWEEN '".$_GET['search_create_date_from']."' AND '".$_GET['search_create_date_to']."' "; } if((!empty($_GET['search_create_date_from'])) AND (empty($_GET['search_create_date_to']))) { $query[] = " AND create_date >= '".$_GET['search_create_date_from']."' "; } if((empty($_GET['search_create_date_from'])) AND (!empty($_GET['search_create_date_to']))) { $query[] = " AND create_date <= '".$_GET['search_create_date_to']."' "; } $this->perpage = 50; $this->type = "basic2"; if($_SESSION['admin_user']['type']=="SUPPORT") { $this->sqlFullQuery = "SELECT * FROM ". SQLTABLE_USERS . " WHERE id is not null ".implode($query)." ORDER BY id"; } if($_SESSION['admin_user']['type']=="ADMIN") { $this->sqlFullQuery = "SELECT * FROM ". SQLTABLE_USERS . " WHERE type != 'SUPPORT' ".implode($query)." ORDER BY id"; } return $this->paginate(); } 3. Dodanie bezpośredniego linku do abonamentu wyświetlania, oraz abonamentu promocji na podstronie zawierającej listę obiektów w PA Edycja pliku: /modules/objects/templates/admin/objects/list.smarty Wyszukujemy ciąg znaków: {else} wyświetlany {/if} Zamieniamy na: {else} wyświetlany {/if} <p><a href="{$smarty.const.APP_URL}admin/payments/abonamenty-aktywacja/?filter=true&search_name={$item.name}&search_status=all" class="button noloading">abonament wyświetlania »</a><br/><a href="{$smarty.const.APP_URL}admin/payments/abonamenty-promocja/? filter=true&search_name={$item.name}&search_status=all" class="button noloading">abonament promocji »</a></p> 4. Wysyłanie wiadomości do użytkowników z poziomu PA Wprowadzenie dodatkowych opcji filtrowania jak: • wszyscy użytkownicy • z aktywnym obiektem • z nieaktywnym obiektem • bez dodanego obiektu Edycja pliku: /modules/users/templates/admin/message-create.smarty Wyszukujemy ciąg znaków: <table><tr class="header"> <td colspan="2">Tytuł wiadomości</td> </tr><tr> Zamieniamy na: <table><tr class="header"> <td colspan="2">Filtrowanie odbiorców</td> </tr><tr> <td colspan="2"><select name="filter"> <option value="0" {if $smarty.get.filter=="0"}selected{/if}>wszyscy użytkownicy</option> <option value="1" {if $smarty.get.filter=="1"}selected{/if}>użytkownicy z aktywnym obiektem</option> <option value="2" {if $smarty.get.filter=="2"}selected{/if}>użytkownicy z nieaktywnym obiektem</option> <option value="3" {if $smarty.get.filter=="3"}selected{/if}>użytkownicy bez dodanego obiektu</option> </select></td> </tr><tr class="header"> <td colspan="2">Tytuł wiadomości</td> </tr><tr> Edycja pliku: /modules/users/users.class.php Wyszukujemy funkcję: public function prepareMessage() { if(empty($_POST['message_subject'])) $error[] = "Musisz podać nazwę wiadomości"; if(empty($_POST['message_text'])) $error[] = "Musisz podać tekst wiadomości"; if(is_array($error)): return $error; endif; $emails = $this->sqlExec("*" , SQLTABLE_USERS , "WHERE type = 'USER' ORDER BY id"); if(isset($emails)): foreach($emails as $item): $this->sqlInsert(SQLTABLE_MESSAGES , "null, '".$_POST['message_subject']."', '".$_POST['message_text']."', '".$item['first_name']." ".$item['last_name']."', '".$item['email']."', 'WAITING', NOW(), NULL"); endforeach; return true; else: $error[] = "W bazie danych nie ma użytkowników do których można wysłać powyższą wiadomość"; endif; return $error; } Zamieniamy ją na poniższą: public function prepareMessage() { if(empty($_POST['message_subject'])) { $Error[] = "Musisz podać nazwę wiadomości"; } if(empty($_POST['message_text'])) { $Error[] = "Musisz podać tekst wiadomości"; } if(is_array($error)) { return $Error; } // Uses filters switch($_POST['filter']) { case "0": // wszyscy użytkownicy $emails = $this->sqlExec("*" , SQLTABLE_USERS , "WHERE type = 'USER' ORDER BY id"); break; case "1": // użytkownicy z aktywnym obiektem $emails = $this->sqlQuery("SELECT * FROM ". SQLTABLE_USERS ." AS Users, ".SQLTABLE_OBJECTS." AS Objects WHERE Users.type = 'USER' AND (Users.id=Objects.uid) GROUP BY (Users.id) ORDER BY Users.id"); break; case "2": // użytkownicy z nieaktywnym obiektem $emails = $this->sqlQuery("SELECT Users.*, Objects.uid, Objects.status FROM ". SQLTABLE_USERS ." AS Users, ".SQLTABLE_OBJECTS." AS Objects WHERE Users.type = 'USER' AND (Users.id=Objects.uid AND Objects.status=0) GROUP BY (Users.id) ORDER BY Users.id"); break; case "3": $emails = $this->sqlQuery("SELECT Users.*, Objects.uid FROM ". SQLTABLE_USERS ." AS Users, ".SQLTABLE_OBJECTS." AS Objects WHERE Users.type = 'USER' AND (Users.id!=Objects.uid) GROUP BY (Users.id) ORDER BY Users.id"); break; } if(is_array($emails)) { foreach($emails as $item) { $this->sqlInsert(SQLTABLE_MESSAGES , "null, '".$_POST['message_subject']."', '".$_POST['message_text']."', '".$item['first_name']." ".$item['last_name']."', '".$item['email']."', 'WAITING', NOW(), NULL"); } return true; } else { $Error[] = "W bazie danych nie ma użytkowników do których można wysłać powyższą wiadomość"; return $Error; } }