Changes for Version 3.0, a=chris
Changes for Version 3.0, a=chris
<?php
/**
* SeekQuarry/Yioop --
* Open Source Pure PHP Search Engine, Crawler, and Indexer
*
* Copyright (C) 2009 - 2014 Chris Pollett chris@pollett.org
*
* LICENSE:
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
* END LICENSE
*
* @author Chris Pollett chris@pollett.org
* @package seek_quarry
* @subpackage controller
* @license http://www.gnu.org/licenses/ GPL3
* @link http://www.seekquarry.com/
* @copyright 2009 - 2014
* @filesource
*/
if(!defined('BASE_DIR')) {echo "BAD REQUEST"; exit();}
/**Load base controller class, if needed. */
require_once BASE_DIR."/controllers/controller.php";
/**
* This is the default controller used by the seek_quarry site. It will
* set up the main view, which has mainly links to static pages describing the
* Yioop search engine.
*
* @author Chris Pollett
* @package seek_quarry
* @subpackage controller
*/
class MainController extends Controller
{
/**
* Says which models to load for this controller.
* @var array
*/
var $models = array();
/**
* Says which views to load for this controller.
* @var array
*/
var $views = array("download");
/**
* Says which activities (roughly methods invoke from the web)
* this controller will respond to
* @var array
*/
var $activities = array("download");
/**
* This is the main entry point for handling people arriving to the
* SeekQuarry site.
*/
function processRequest()
{
$data = array();
$view = "main";
if(isset($_SESSION['USER_ID'])) {
$user = $_SESSION['USER_ID'];
} else {
$user = $_SERVER['REMOTE_ADDR'];
}
if(isset($_REQUEST['a'])) {
if(in_array($_REQUEST['a'], $this->activities)) {
$activity = $_REQUEST['a'];
if($activity == "signout") {
unset($_SESSION['USER_ID']);
$user = $_SERVER['REMOTE_ADDR'];
$activity = "main";
$data['SCRIPT'] = "doMessage('<h1 class=\"red\" >".
tl('search_controller_logout_successful')."</h1>')";
}
} else {
$activity = "main";
}
} else {
$activity = "main";
}
$data['VIEW'] = $view;
$data = array_merge($data, $this->$activity());
$data['YIOOP_TOKEN'] = $this->generateCSRFToken($user);
$this->displayView($data['VIEW'], $data);
}
/**
* This activity handles downloads of Yioop from the seekquarry site.
* It collects user information and sends an email with the download
* link.
*
* @return array $data has which field variables from drawing download forms
*/
function download()
{
global $MAINTAINERS;
$data['VIEW'] = "download";
$data['page'] = tl('main_controller_download');
$data['SCRIPT'] = "";
$downloads = array(CURRENT_YIOOP_VERSION, PREVIOUS_YIOOP_VERSION);
$data['version'] = CURRENT_YIOOP_VERSION;
if(isset($_REQUEST['version']) &&
in_array($_REQUEST['version'], $downloads)) {
$data['version'] = $_REQUEST['version'];
}
if(isset($_REQUEST['arg'])) {
switch($_REQUEST['arg'])
{
case "step1":
$require_fields = array("full_name", "e_mail");
foreach($require_fields as $field) {
if(!isset($_REQUEST[$field])) {
$data['SCRIPT'] .=
"doMessage('<h1 class=\"red\" >".
tl('main_controller_missing_fields').
"</h1>')";
break 2;
}
}
$all_fields = array("full_name", "e_mail", "business",
"interest");
$hash_name = "";
foreach($all_fields as $field) {
$request[$field] = (isset($_REQUEST[$field])) ?
$this->clean($_REQUEST[$field], "string") : "";
$request[$field] = substr($request[$field], 0, 256);
$hash_name .= $request[$field];
}
$request["version"] = $data['version'];
$hash_name .= $request["version"];
$time = time();
$hash_name = md5($hash_name);
$email_dir = WORK_DIRECTORY."/data/emails";
if(!file_exists($email_dir)) {
mkdir($email_dir);
}
$save_data = serialize($request);
file_put_contents($email_dir."/$hash_name|$time.txt",
$save_data);
$pre_name = $email_dir."/$hash_name|".substr($time, 0, 4);
$save_time = substr($time, 4, 1);
for($i = 0; $i < 10; $i++) {
if($save_time != "$i") {
@array_map('unlink', glob($pre_name."$i*.txt"));
}
}
$headers = FROM_EMAIL_HEADER . "\r\n";
$link = BASE_URL."?c=main&a=download&name=".
"$hash_name|$time&arg=step2";
$title = tl('main_controller_yioop_download');
$body = tl('main_controller_click_download')."\n".$link;
mail($request['e_mail'], $title, $body, $headers);
$url = BASE_URL."?c=static&p=Download_Sent";
header("Location: ".$url);
exit();
break;
case "step2":
$email_dir = WORK_DIRECTORY."/data/emails";
if(!isset($_REQUEST['name'])) {
$data['VIEW'] = "main";
$data['page'] = "home";
$data['SCRIPT'] .=
"doMessage('<h1 class=\"red\" >".
tl('main_controller_url_error').
"</h1>')";
break;
}
$name = $email_dir."/".
$this->clean($_REQUEST['name'], "string").".txt";
if(!file_exists($name)) {
$data['SCRIPT'] .=
"doMessage('<h1 class=\"red\" >".
tl('main_controller_expired_url').
"</h1>')";
$data['VIEW'] = "download";
$data['version'] = CURRENT_YIOOP_VERSION;
break;
}
$request = array_values(unserialize(
file_get_contents($name)));
if(isset($_SERVER["REMOTE_ADDR"])) {
$request[] = $_SERVER["REMOTE_ADDR"];
}
$data_string = implode("\n", $request);
$time = time();
$day = date("d", $time);
$emails = array();
$email_filename = "$email_dir/$day.txt";
if(file_exists($email_filename)) {
$emails = unserialize(
file_get_contents($email_filename));
}
$emails[$request[1]] = $data_string;
file_put_contents($email_filename, serialize($emails));
@unlink($name);
$yesterday = date("d", $time - 86400);
$old_email_filename = "$email_dir/$yesterday.txt";
if(file_exists($old_email_filename)) {
$yester_mail = array_values(unserialize(
file_get_contents($old_email_filename)));
$yester_string = implode("\n======\n\n",
$yester_mail);
$headers = FROM_EMAIL_HEADER . "\r\n";
foreach($MAINTAINERS as $maintainer) {
mail($maintainer, "Leads ".date('Y-M-d', time()),
$yester_string, $headers);
}
$new_email_filename = "$email_dir/old_$yesterday.txt";
rename($old_email_filename, $new_email_filename);
}
if($data['version'] == CURRENT_YIOOP_VERSION) {
$url = CURRENT_VERSION_URL;
} else {
$url = PREVIOUS_VERSION_URL;
}
header("Location: ".$url);
exit();
break;
}
}
return $data;
}
}
?>