| <?php |
| /******************************************************************************* |
| * Copyright (c) 2015, 2016 Eclipse Foundation and others. |
| * All rights reserved. This program and the accompanying materials |
| * are made available under the terms of the Eclipse Public License v1.0 |
| * which accompanies this distribution, and is available at |
| * http://www.eclipse.org/legal/epl-v10.html |
| * |
| * Contributors: |
| * Eric Poirier (Eclipse Foundation) - initial API and implementation |
| * Christopher Guindon (Eclipse Foundation) |
| *******************************************************************************/ |
| require_once("webmaster.class.php"); |
| |
| class MailingLists extends Webmaster{ |
| |
| private $default_search_table_and_name = array(); |
| |
| private $default_search_options = array(); |
| |
| private $newsgroups = NULL; |
| |
| private $mailing_lists = NULL; |
| |
| private $search_results = NULL; |
| |
| private $date_range = "5"; |
| |
| public function __construct(App $App){ |
| parent::__construct($App); |
| if ($this->getFormName() === 'webmaster-mailinglists') { |
| switch ($this->getState()) { |
| case 'create': |
| $this->_createMailingLists(); |
| break; |
| case 'delete': |
| $this->_deleteItem(); |
| break; |
| case 'search': |
| $this->getSearchResults(); |
| break; |
| case 'date-range': |
| $this->_setDateRange(); |
| break; |
| } |
| } |
| } |
| |
| private function _setDateRange() { |
| $range = filter_var($this->App->getHTTPParameter('date-range', 'POST'), FILTER_SANITIZE_STRING); |
| if (!empty($range)) { |
| $this->date_range = $range; |
| } |
| } |
| |
| /** |
| * This function returns the word selected wheter or not |
| * an option is selected. |
| * This helps adding the Selected parameter to <option> tags |
| * @return string |
| * */ |
| public function checkSelectedOption($title, $value) { |
| if (!empty($title) && !empty($value)) { |
| foreach ($this->default_search_options as $option){ |
| if ($option['title'] == $title && $option['value'] == $value) { |
| return "selected"; |
| } |
| } |
| } |
| } |
| |
| /** |
| * Get Newsgroups |
| */ |
| public function getNewsgroups() { |
| if (is_null($this->newsgroups)) { |
| $this->_fetchMailingListsOrNewsgroups('newsgroups', $this->date_range); |
| } |
| return $this->newsgroups; |
| } |
| |
| /** |
| * Get HTML for mailing list table |
| * |
| * @param array $list |
| * @param string $table |
| */ |
| public function getMailingListTable($list = array(), $table = '') { |
| $html = ''; |
| if ($this->_isValidTable($table) && !empty($list)) { |
| ob_start(); |
| include('tpl/mailinglists/mailinglists-table.tpl.php'); |
| $html = ob_get_clean(); |
| } |
| return $html; |
| } |
| |
| /** |
| * Get Mailing lists. |
| */ |
| public function getMailingLists(){ |
| if (is_null($this->mailing_lists)) { |
| $this->_fetchMailingListsOrNewsgroups('mailing_lists', $this->date_range); |
| } |
| return $this->mailing_lists; |
| } |
| |
| /** |
| * This function returns the search results |
| * |
| * @return array |
| * */ |
| public function getSearchResults() { |
| if (is_null($this->search_results)) { |
| $this->_searchForItems(); |
| } |
| return $this->search_results; |
| } |
| |
| /** |
| * This function return a list of status |
| * @return array |
| * */ |
| public function getStatusList() { |
| return array( |
| 'approve', |
| 'wait', |
| 'active', |
| 'completed', |
| 'pending' |
| ); |
| } |
| |
| /** |
| * This function returns the appropriate column title for the specified table |
| * |
| * @param $table - either mailing_lists or newgroups |
| * |
| * @return string |
| * */ |
| public function getTableTitleName($table) { |
| $name = 'group_name'; |
| if ($table == 'mailing_lists') { |
| $name = 'list_name'; |
| } |
| return $name; |
| } |
| |
| /** |
| * Get default_search_table_and_name value |
| */ |
| public function getDefaultSearchTableAndName(){ |
| return $this->default_search_table_and_name; |
| } |
| |
| /** |
| * This function adds new mailing lists or newsgroups |
| * */ |
| private function _createMailingLists() { |
| $table = filter_var($this->App->getHTTPParameter('create_table', 'POST'), FILTER_SANITIZE_STRING); |
| if ($this->_isValidTable($table)) { |
| $project = filter_var($this->App->getHTTPParameter('create_project', 'POST'), FILTER_SANITIZE_STRING); |
| $name = filter_var($this->App->getHTTPParameter('create_name', 'POST'), FILTER_SANITIZE_STRING); |
| $description = filter_var($this->App->getHTTPParameter('create_description', 'POST'), FILTER_SANITIZE_STRING); |
| |
| // Default Message type |
| $msg_type = "success"; |
| |
| // Check for any empty values |
| |
| if (empty($project) || empty($name) || empty($description) || $this->_itemInTable($table, $name) === TRUE || !in_array(array('ProjectID' => $project), $this->getProjects())) { |
| $msg_type = 'danger'; |
| } |
| if (empty($project)) { |
| $this->App->setSystemMessage('create_mailinglist','You must select a project.', $msg_type); |
| } |
| if (!empty($project) && !in_array(array('ProjectID' => $project), $this->getProjects())) { |
| $this->App->setSystemMessage('create_mailinglist','The selected project is not part of the projects list.', $msg_type); |
| } |
| if (empty($name)) { |
| $this->App->setSystemMessage('create_mailinglist','You must enter a name.', $msg_type); |
| } |
| if (empty($description)) { |
| $this->App->setSystemMessage('create_mailinglist','You must enter a description.', $msg_type); |
| } |
| if (!empty($name) && $this->_itemInTable($table, $name) === TRUE) { |
| $this->App->setSystemMessage('create_mailinglist',$name.' already exists in the '.$table.' table.', $msg_type); |
| } |
| |
| if ($msg_type != 'danger') { |
| $sql = ""; |
| switch ($table) { |
| case "mailing_lists": |
| $sql = "INSERT INTO mailing_lists |
| (list_name,list_description,is_private,project_id,list_short_description,create_date,created_by) |
| VALUES ( |
| ".$this->App->returnQuotedString($this->App->sqlSanitize($name)).", |
| ".$this->App->returnQuotedString($this->App->sqlSanitize($description)).", |
| 0, |
| ".$this->App->returnQuotedString($this->App->sqlSanitize($project)).", |
| ".$this->App->returnQuotedString($this->App->sqlSanitize($description)).", |
| NOW(), |
| ".$this->App->returnQuotedString("PORTAL")." |
| )"; |
| break; |
| case "newsgroups": |
| $sql = "INSERT INTO newsgroups |
| (group_name,project_id,group_description,create_date,created_by) |
| VALUES ( |
| ".$this->App->returnQuotedString($this->App->sqlSanitize($name)).", |
| ".$this->App->returnQuotedString($this->App->sqlSanitize($project)).", |
| ".$this->App->returnQuotedString($this->App->sqlSanitize($description)).", |
| NOW(), |
| ".$this->App->returnQuotedString("PORTAL")." |
| )"; |
| break; |
| } |
| |
| $result = $this->App->eclipse_sql($sql); |
| |
| $msg = "You have successfully created a new <strong>" . |
| ($table == 'mailing_lists' ? "Mailing List" : "Newsgroup") . |
| "</strong> called <strong>" . $name . "</strong>."; |
| $this->App->setSystemMessage('create_mailinglist',$msg, $msg_type); |
| } |
| } |
| } |
| |
| /** |
| * This function deletes an item from a specific table |
| * */ |
| private function _deleteItem() { |
| $item = filter_var($this->App->getHTTPParameter('item_to_delete', 'POST'), FILTER_SANITIZE_STRING); |
| $table = filter_var($this->App->getHTTPParameter('item_type', 'POST'), FILTER_SANITIZE_STRING); |
| |
| if ($this->_isValidTable($table) && $this->_itemInTable($table, $item) === TRUE) { |
| $item_name = $this->getTableTitleName($table); |
| |
| $sql = "DELETE FROM " . $table . " |
| WHERE ". $item_name ." = " . $this->App->returnQuotedString($this->App->sqlSanitize($item)); |
| $delete = $this->App->eclipse_sql($sql); |
| $msg = 'You have successfully deleted <strong>' . |
| $item . '</strong> from the <strong>'. $table .'</strong> table.'; |
| $this->App->setSystemMessage('delete_item', $msg, 'success'); |
| } |
| } |
| |
| |
| /** |
| * This function fetches mailing lists of newsgroups |
| * |
| * @param $table - This is the table name |
| * @param $date - Number of days to limit the query |
| * |
| * @return array |
| * */ |
| private function _fetchMailingListsOrNewsgroups($table, $range) { |
| $lists = array(); |
| if ($this->_isValidTable($table)) { |
| $name = $this->getTableTitleName($table); |
| $sql = "SELECT ". $this->App->sqlSanitize($name) ." as name, create_date, project_id, provision_status |
| FROM " . $this->App->sqlSanitize($table) . " |
| WHERE is_deleted = 0 |
| AND create_date BETWEEN NOW() - INTERVAL ". $this->App->sqlSanitize($range) ." DAY AND NOW() |
| ORDER BY create_date DESC LIMIT 2000"; |
| |
| $result = $this->App->eclipse_sql($sql); |
| while ($row = mysql_fetch_array($result)) { |
| if (is_null($row['provision_status'])){ |
| $row['provision_status'] = 'NULL'; |
| } |
| $lists[$row['provision_status']][] = $row; |
| } |
| } |
| $this->{$table} = $lists; |
| return $lists; |
| } |
| |
| /** |
| * This function validates a new entry by checking for any duplicates |
| * |
| * @param $table - string containing the name of the table |
| * @param $entry_name - string containing the name of the new group / mailing list |
| * |
| * @return bool |
| * */ |
| private function _itemInTable($table, $item_name) { |
| $sql = "SELECT * FROM " . $table; |
| $result = $this->App->eclipse_sql($sql); |
| while ($row = mysql_fetch_array($result)) { |
| if (in_array($item_name, $row)) { |
| return TRUE; |
| } |
| } |
| return FALSE; |
| } |
| |
| /** |
| * This function searches through a specified table for items |
| * @return array |
| * */ |
| private function _searchForItems() { |
| $table = filter_var($this->App->getHTTPParameter('search_table', 'POST'), FILTER_SANITIZE_STRING); |
| $search_results = array(); |
| |
| if (!empty($table) && $this->_isValidTable($table)) { |
| |
| $name = $this->getTableTitleName($table); |
| $search_options = array(); |
| $array_item = 0; |
| |
| // Building the $search_options array using a loop depending on the options inserted in the search |
| for ($i = 1; $i <= 3; $i++) { |
| $value = filter_var($this->App->getHTTPParameter('search_'.$i, 'POST'), FILTER_SANITIZE_STRING); |
| if (!empty($value)) { |
| switch ($i) { |
| case 1: |
| $title = "project_id"; |
| break; |
| case 2: |
| $title = "provision_status"; |
| break; |
| case 3: |
| $title = $name; |
| break; |
| } |
| $search_options[$array_item] = array( |
| "title" => $title, |
| "value" => filter_var($this->App->getHTTPParameter('search_'.$i, 'POST'), FILTER_SANITIZE_STRING) |
| ); |
| $array_item++; |
| } |
| } |
| |
| $this->_setDefaultSearchFields($table, $search_options); |
| |
| // Build the SQL query depending on what options were inserted in the search |
| $sql = "SELECT ". $name ." as name, create_date, project_id, provision_status |
| FROM " . $table; |
| foreach ($search_options as $key => $option) { |
| if ($key == 0) { |
| $sql_where = " WHERE "; |
| } |
| if ($key >= 1) { |
| $sql_where = " AND "; |
| } |
| $sql .= $sql_where . $search_options[$key]['title'] . " = " . $this->App->returnQuotedString($this->App->sqlSanitize($search_options[$key]['value'])); |
| } |
| $sql .= " ORDER BY create_date DESC"; |
| $result = $this->App->eclipse_sql($sql); |
| |
| while ($row = mysql_fetch_array($result)) { |
| $row['table'] = $table; |
| $search_results[] = $row; |
| } |
| |
| if (empty($search_results)) { |
| $search_results[0]['no_results'] = "No results were found."; |
| } |
| } |
| $this->search_results = $search_results; |
| return $search_results; |
| } |
| |
| /** |
| * This function sets the default search fields |
| * */ |
| private function _setDefaultSearchFields($table, $search_options) { |
| $this->default_search_table_and_name = array('table' => $table); |
| foreach ($search_options as $option) { |
| if ($option['title'] == 'list_name' || $option['title'] == 'group_name') { |
| $this->default_search_table_and_name['name'] = $option['value']; |
| } |
| } |
| $this->default_search_options = $search_options; |
| } |
| |
| /** |
| * This function verifies if a certain tables is part of the accepted tables |
| * @param $table - Specified table name |
| * @return bool |
| * */ |
| private function _isValidTable($table) { |
| $accepted_tables = array( |
| 'mailing_lists', |
| 'newsgroups' |
| ); |
| if (!empty($table) && in_array($table, $accepted_tables)) { |
| return TRUE; |
| } |
| if (empty($table)) { |
| $this->App->setSystemMessage('create_mailinglist','You must select a table between Mailing lists or a Newsgroups.', 'danger'); |
| } |
| return FALSE; |
| } |
| } |