From 07f5140771388c9e0c8a99b0dd2e5d950bdb173b Mon Sep 17 00:00:00 2001 From: Yuchen Pei Date: Thu, 14 Oct 2021 15:16:42 +1100 Subject: moving h-source subdir out. --- .../Controllers/AcquisitioncardsController.php | 131 +++ Application/Controllers/BaseController.php | 303 ++++++ Application/Controllers/BluetoothController.php | 131 +++ Application/Controllers/ClientController.php | 55 ++ Application/Controllers/ContactController.php | 43 + Application/Controllers/CreditsController.php | 43 + Application/Controllers/DownloadController.php | 275 ++++++ .../Controllers/EthernetcardsController.php | 131 +++ Application/Controllers/FaqController.php | 41 + .../Controllers/FingerprintreadersController.php | 131 +++ Application/Controllers/GenericController.php | 1001 ++++++++++++++++++++ Application/Controllers/HardwareController.php | 43 + Application/Controllers/HelpController.php | 41 + Application/Controllers/HistoryController.php | 650 +++++++++++++ Application/Controllers/HomeController.php | 47 + .../Controllers/HostcontrollersController.php | 137 +++ Application/Controllers/ImageController.php | 41 + Application/Controllers/IssuesController.php | 203 ++++ Application/Controllers/MeetController.php | 338 +++++++ Application/Controllers/ModemsController.php | 131 +++ Application/Controllers/MyController.php | 214 +++++ Application/Controllers/NewsController.php | 67 ++ Application/Controllers/NotebooksController.php | 159 ++++ Application/Controllers/PrintersController.php | 154 +++ Application/Controllers/ProjectController.php | 42 + Application/Controllers/RaidadaptersController.php | 131 +++ Application/Controllers/RssController.php | 64 ++ Application/Controllers/ScannersController.php | 127 +++ .../Controllers/SdcardreadersController.php | 131 +++ Application/Controllers/SearchController.php | 267 ++++++ Application/Controllers/SoundcardsController.php | 127 +++ Application/Controllers/SpecialController.php | 216 +++++ Application/Controllers/ThreegcardsController.php | 127 +++ Application/Controllers/UsersController.php | 352 +++++++ Application/Controllers/VideocardsController.php | 127 +++ Application/Controllers/WebcamsController.php | 127 +++ Application/Controllers/WifiController.php | 127 +++ Application/Controllers/WikiController.php | 644 +++++++++++++ 38 files changed, 7119 insertions(+) create mode 100644 Application/Controllers/AcquisitioncardsController.php create mode 100644 Application/Controllers/BaseController.php create mode 100644 Application/Controllers/BluetoothController.php create mode 100644 Application/Controllers/ClientController.php create mode 100644 Application/Controllers/ContactController.php create mode 100644 Application/Controllers/CreditsController.php create mode 100644 Application/Controllers/DownloadController.php create mode 100644 Application/Controllers/EthernetcardsController.php create mode 100644 Application/Controllers/FaqController.php create mode 100644 Application/Controllers/FingerprintreadersController.php create mode 100644 Application/Controllers/GenericController.php create mode 100644 Application/Controllers/HardwareController.php create mode 100644 Application/Controllers/HelpController.php create mode 100644 Application/Controllers/HistoryController.php create mode 100644 Application/Controllers/HomeController.php create mode 100644 Application/Controllers/HostcontrollersController.php create mode 100644 Application/Controllers/ImageController.php create mode 100644 Application/Controllers/IssuesController.php create mode 100644 Application/Controllers/MeetController.php create mode 100644 Application/Controllers/ModemsController.php create mode 100644 Application/Controllers/MyController.php create mode 100644 Application/Controllers/NewsController.php create mode 100644 Application/Controllers/NotebooksController.php create mode 100644 Application/Controllers/PrintersController.php create mode 100644 Application/Controllers/ProjectController.php create mode 100644 Application/Controllers/RaidadaptersController.php create mode 100644 Application/Controllers/RssController.php create mode 100644 Application/Controllers/ScannersController.php create mode 100644 Application/Controllers/SdcardreadersController.php create mode 100644 Application/Controllers/SearchController.php create mode 100644 Application/Controllers/SoundcardsController.php create mode 100644 Application/Controllers/SpecialController.php create mode 100644 Application/Controllers/ThreegcardsController.php create mode 100644 Application/Controllers/UsersController.php create mode 100644 Application/Controllers/VideocardsController.php create mode 100644 Application/Controllers/WebcamsController.php create mode 100644 Application/Controllers/WifiController.php create mode 100644 Application/Controllers/WikiController.php (limited to 'Application/Controllers') diff --git a/Application/Controllers/AcquisitioncardsController.php b/Application/Controllers/AcquisitioncardsController.php new file mode 100644 index 0000000..e373682 --- /dev/null +++ b/Application/Controllers/AcquisitioncardsController.php @@ -0,0 +1,131 @@ +. + +if (!defined('EG')) die('Direct access not allowed!'); + +class AcquisitioncardsController extends GenericController +{ + + public function __construct($model, $controller, $queryString) + { + + $worksOptions = Acquisitioncards::$select; + $worksField = 'compatibility'; + $interfaceOptions = Acquisitioncards::$interface; + + parent::__construct($model, $controller, $queryString); + + //load the model + $this->model('HardwareModel'); + $this->model('RevisionsModel'); + $this->model('AcquisitioncardsModel'); + $this->model('TalkModel'); + + $this->mod = $this->m['AcquisitioncardsModel']; + + $this->m['HardwareModel']->id_user = $this->s['registered']->status['id_user']; + $this->m['HardwareModel']->type = 'acquisition-card'; + + $this->m['HardwareModel']->setConditions($worksOptions,$worksField,$interfaceOptions); + + $this->m['HardwareModel']->setFields('model,kernel,description,distribution,comm_year,compatibility,pci_id,interface,driver,other_names','sanitizeAll'); + + $argKeys = array( + 'page:forceNat' => 1, + 'history_page:forceNat' => 1, + 'vendor:sanitizeString' => 'undef', + 'comm_year:sanitizeString' => 'undef', + 'compatibility:sanitizeString' => 'undef', + 'interface:sanitizeString' => 'undef', + 'sort-by:sanitizeString' => 'compatibility-desc', + 'search_string:sanitizeString' => 'undef' + ); + + $this->setArgKeys($argKeys); + + $data['title'] = 'Acquisition cards'; + + $data['intefaceOptions'] = $interfaceOptions; + $data['worksOptions'] = $worksOptions; + $data['worksField'] = $worksField; + + $data['notFoundString'] = "No acquisition card found"; + + $this->append($data); + } + + public function catalogue($lang = 'en') + { + $this->shift(1); + + $whereArray = array( + 'type' => $this->mod->type, + 'vendor' => $this->viewArgs['vendor'], + 'comm_year' => $this->viewArgs['comm_year'], + 'compatibility' => $this->viewArgs['compatibility'], + 'interface' => $this->viewArgs['interface'], + ); + + $this->mod->setWhereQueryClause($whereArray); + + parent::catalogue($lang); + } + + public function view($lang = 'en', $id = 0, $name = null) + { + parent::view($lang, $id, $name); + } + + public function history($lang = 'en', $id = 0) + { + parent::history($lang, $id); + } + + public function revision($lang = 'en', $id_rev = 0) + { + parent::revision($lang, $id_rev); + } + + public function insert($lang = 'en', $token = '') + { + parent::insert($lang, $token); + } + + public function update($lang = 'en', $token = '') + { + parent::update($lang, $token); + } + + public function differences($lang = 'en', $id_hard = 0, $id_rev = 0) + { + parent::differences($lang, $id_hard, $id_rev); + } + + public function climb($lang = 'en', $id_rev = 0, $token = '') + { + parent::climb($lang, $id_rev, $token); + } + + public function talk($lang = 'en', $id_hard = 0, $token = '') + { + parent::talk($lang, $id_hard, $token); + } + +} diff --git a/Application/Controllers/BaseController.php b/Application/Controllers/BaseController.php new file mode 100644 index 0000000..ac2be1f --- /dev/null +++ b/Application/Controllers/BaseController.php @@ -0,0 +1,303 @@ +. + +if (!defined('EG')) die('Direct access not allowed!'); + +class BaseController extends Controller +{ + + protected $lang; + protected $islogged = 'no'; + protected $ismoderator = false; + protected $isadmin = false; + protected $querySanitized = true; + protected $token = 'token'; + protected $_updating = 'no'; + + protected $_configXml = null; + + protected $_topMenuClasses = array( + "home" => null, + "hardware" => null, + "credits" => null, + "issues" => null, + "contact" => null, + "search" => null, + "news" => null, + "download" => null, + "help" => null, + "wiki" => null, + "faq" => null, + "project" => null, + ); + + public function __construct($model, $controller, $queryString) { + parent::__construct($model, $controller, $queryString); + + header("Cache-Control: no-cache"); + + $this->model('BoxesModel'); + $this->model('HistoryModel'); + $this->model('ParamsModel'); + $this->model('UsersModel'); + + $this->load('header'); + $this->load('footer','last'); + + $this->session('registered'); + $this->s['registered']->checkStatus(); + + $data['username'] = null; + $data['user_groups'] = null; + $data['islogged'] = 'no'; + $data['token'] = 'token'; + $data['ismoderator'] = false; + $data['isadmin'] = false; + + if ($this->s['registered']->status['status'] === 'logged') + { + $data['username'] = $this->s['registered']->status['user']; + $groups = $this->s['registered']->status['groups']; + $groups[] = 'registered'; + $data['user_groups'] = implode(',',$groups); + + $data['islogged'] = 'yes'; + $this->islogged = $data['islogged']; + + $data['token'] = $this->s['registered']->status['token']; + $this->token = $data['token']; + + $data['ismoderator'] = in_array('moderator',$this->s['registered']->status['groups']) ? true : false; + $this->ismoderator = $data['ismoderator']; + + $data['isadmin'] = in_array('admin',$this->s['registered']->status['groups']) ? true : false; + $this->isadmin = $data['isadmin']; + } + + $data['lang'] = 'en'; + $this->lang = 'en'; + + if (isset($this->_queryString[0])) + { + $lang = (strcmp($this->_queryString[0],'') !== 0) ? $this->_queryString[0] : 'en'; + $data['lang'] = Lang::sanitize($lang); + $this->lang = $data['lang']; + Lang::$current = $data['lang']; + } + + $data['langIcon'] = Lang::getIcon(Lang::$current); + $data['langLabel'] = Lang::getLabel(Lang::$current); + + //set desktop or mobile version + Version::set(); + //subfolder of the Views folder where to look for view files + Params::$viewSubfolder = Version::getViewSubfolder(); + + $data['tm'] = $this->_topMenuClasses; + + $this->_queryString = $this->sanitizeQueryString($this->_queryString); + + $data['querySanitized'] = $this->querySanitized; + $data['queryString'] = Url::createUrl($this->_queryString); + + //check ft they are updating the website + $updating = $this->m['ParamsModel']->select('updating')->where(array('id_par'=>1))->toList('updating')->send(); + + $data['updating_flag'] = 'no'; + if (count($updating)>0) + { + $data['updating_flag'] = $updating[0]; + $this->_updating = $data['updating_flag']; + } + + //get the configuration xml + $xmlRes = $this->m['ParamsModel']->select('boxes_xml')->where(array('id_par'=>1))->toList('boxes_xml')->send(); + if (count($xmlRes)>0) + { + $configXml = htmlspecialchars_decode($xmlRes[0],ENT_QUOTES); + + if (Website::$useXmlConfigFile) + { + $xmlConfigFile = rtrim(Website::$xmlConfigFileFolder,'/') . '/config.xml'; + if (@simplexml_load_file($xmlConfigFile)) + { + $this->_configXml = simplexml_load_file($xmlConfigFile); + } + } + else + { + if (@simplexml_load_string($configXml)) + { + $this->_configXml = simplexml_load_string($configXml); + } + } + } + + //elements of the top menu from the config.xml file + //help link + $mod = new BoxParser($this->getBox(array("top_menu","help_page_link"))); + $data["topMenuHelpLink"] = $mod->modules[0]->render($this->_topMenuClasses["help"]); + //faq link + $mod = new BoxParser($this->getBox(array("top_menu","faq_link"))); + $data["topMenuFaqLink"] = $mod->modules[0]->render($this->_topMenuClasses["faq"]); + + //link to the "discover your hardware" wiki page + $data['discoverYourHardwareLink'] = $this->getModule(array('right_column','discover_your_hardware')); + + Distributions::setAllowedList(); + + $this->append($data); + } + + //get the right box from the configuration xml + protected function getBox($xmlPath,$xmlString = null) + { + if (!isset($xmlString)) + { + $xmlString = $this->_configXml; + } + + if (is_array($xmlPath)) + { + if (isset($xmlString)) + { + $tempXml = $xmlString->{$xmlPath[0]}; + if (count($xmlPath) === 1) + { + if (isset($tempXml->{$this->lang})) + { + return $tempXml->{$this->lang}->asXml(); + } + else if (isset($tempXml->{"en"})) + { + return $tempXml->{"en"}->asXml(); + } + else + { + return null; + } + } + else + { + array_shift($xmlPath); + return $this->getBox($xmlPath,$tempXml); + } + } + } + return null; + } + +// get the HTML of a module from the xml configuration string +// $xmlPath: array conitaining the path + protected function getModule($xmlPath) + { + $tracksHelpLabel = null; + $xml = $this->getBox($xmlPath); + if ($xml) + { + $box_news = new BoxParser($xml); + $tracksHelpLabel = $box_news->render(); + } + return $tracksHelpLabel; + } + + protected function right($lang = 'en') + { + $hard = new HardwareModel(); + + $data['stat'] = $hard->clear()->select('type,count(*) AS numb')->where(array('-deleted'=>'no','cleared'=>'no'))->groupBy('type')->toList('type','aggregate.numb')->send(); + + $logged = $this->s['registered']->getUsersLogged(); + + $data['numbLogged'] = count($logged); + + //render the boxes inside the right column + $data['htmlRightBox'] = $this->getModule(array('right_column')); + + $data['language_links'] = $this->buildLanguageLinks($this->lang); + + $data['lastModif'] = $this->m['HistoryModel'] + ->clear()->select() + ->inner('hardware') + ->on('hardware.id_hard=history.id') + ->where(array('type'=>'hardware','gr'=>'registered','deleted'=>'no','cleared'=>'no',)) + ->orderBy('id_history desc') + ->limit(5) + ->send(); + + $this->append($data); + $this->load('right'); + } + + protected function sanitizeQueryString($queryArray) + { + $resArray = array(); + foreach ($queryArray as $item) + { + if (preg_match('/^[a-zA-Z0-9\-\_\.\+\s]+$/',$item)) + { + $resArray[] = sanitizeAll($item); + } + else + { + $this->querySanitized = false; + return array('en'); + } + } + return $resArray; + } + + protected function buildLanguageLinks($lang) + { + $status = $this->_queryString; + $cPage = $this->querySanitized ? $this->currPage : $this->baseUrl."/home/index"; + + $mobileDataRole = Version::get() === "mobile" ? "data-role='listview'" : null; + + $link = "\n"; + return $link; + } + + protected function cleverLoad($file) + { + $fileInt = $file."_".$this->lang; + if (file_exists(ROOT . DS . APPLICATION_PATH . DS . 'Views' . DS . Params::$viewSubfolder . DS . ucwords($this->controller) . DS . $fileInt . '.php')) + { + $this->load($fileInt); + } + else + { + $this->load($file); + } + } + +} diff --git a/Application/Controllers/BluetoothController.php b/Application/Controllers/BluetoothController.php new file mode 100644 index 0000000..eae4b74 --- /dev/null +++ b/Application/Controllers/BluetoothController.php @@ -0,0 +1,131 @@ +. + +if (!defined('EG')) die('Direct access not allowed!'); + +class BluetoothController extends GenericController +{ + + public function __construct($model, $controller, $queryString) + { + + $worksOptions = Bluetooth::$select; + $worksField = 'bluetooth_works'; + $interfaceOptions = Bluetooth::$interface; + + parent::__construct($model, $controller, $queryString); + + //load the model + $this->model('HardwareModel'); + $this->model('RevisionsModel'); + $this->model('BluetoothModel'); + $this->model('TalkModel'); + + $this->mod = $this->m['BluetoothModel']; + + $this->m['HardwareModel']->id_user = $this->s['registered']->status['id_user']; + $this->m['HardwareModel']->type = 'bluetooth'; + + $this->m['HardwareModel']->setConditions($worksOptions,$worksField,$interfaceOptions); + + $this->m['HardwareModel']->setFields('model,kernel,description,distribution,comm_year,bluetooth_works,pci_id,interface,driver,other_names','sanitizeAll'); + + $argKeys = array( + 'page:forceNat' => 1, + 'history_page:forceNat' => 1, + 'vendor:sanitizeString' => 'undef', + 'comm_year:sanitizeString' => 'undef', + 'bluetooth_works:sanitizeString' => 'undef', + 'interface:sanitizeString' => 'undef', + 'sort-by:sanitizeString' => 'bluetooth-works', + 'search_string:sanitizeString' => 'undef' + ); + + $this->setArgKeys($argKeys); + + $data['title'] = 'Bluetooth'; + + $data['intefaceOptions'] = $interfaceOptions; + $data['worksOptions'] = $worksOptions; + $data['worksField'] = $worksField; + + $data['notFoundString'] = "No bluetooth devices found"; + + $this->append($data); + } + + public function catalogue($lang = 'en') + { + $this->shift(1); + + $whereArray = array( + 'type' => $this->mod->type, + 'vendor' => $this->viewArgs['vendor'], + 'comm_year' => $this->viewArgs['comm_year'], + 'bluetooth_works' => $this->viewArgs['bluetooth_works'], + 'interface' => $this->viewArgs['interface'], + ); + + $this->mod->setWhereQueryClause($whereArray); + + parent::catalogue($lang); + } + + public function view($lang = 'en', $id = 0, $name = null) + { + parent::view($lang, $id, $name); + } + + public function history($lang = 'en', $id = 0) + { + parent::history($lang, $id); + } + + public function revision($lang = 'en', $id_rev = 0) + { + parent::revision($lang, $id_rev); + } + + public function insert($lang = 'en', $token = '') + { + parent::insert($lang, $token); + } + + public function update($lang = 'en', $token = '') + { + parent::update($lang, $token); + } + + public function differences($lang = 'en', $id_hard = 0, $id_rev = 0) + { + parent::differences($lang, $id_hard, $id_rev); + } + + public function climb($lang = 'en', $id_rev = 0, $token = '') + { + parent::climb($lang, $id_rev, $token); + } + + public function talk($lang = 'en', $id_hard = 0, $token = '') + { + parent::talk($lang, $id_hard, $token); + } + +} diff --git a/Application/Controllers/ClientController.php b/Application/Controllers/ClientController.php new file mode 100644 index 0000000..51966c9 --- /dev/null +++ b/Application/Controllers/ClientController.php @@ -0,0 +1,55 @@ +. + +if (!defined('EG')) die('Direct access not allowed!'); + +class ClientController extends BaseController +{ + + public function __construct($model, $controller, $queryString) + { + parent::__construct($model, $controller, $queryString); + } + + public function licenseinfo($lang = 'en') + { + header ("Content-Type:text/xml"); + + $data["xml"] = "\n"; + + $this->append($data); + $this->clean(); + $this->load("license"); + } + + public function userinfo($lang = 'en') + { + header ("Content-Type:text/xml"); + + $this->s['registered']->checkStatus(); + + $data['user_status'] = strcmp($this->islogged,'yes') === 0 ? 'logged' : 'not-logged'; + + $this->append($data); + $this->clean(); + $this->load('info'); + } + +} \ No newline at end of file diff --git a/Application/Controllers/ContactController.php b/Application/Controllers/ContactController.php new file mode 100644 index 0000000..197ec9a --- /dev/null +++ b/Application/Controllers/ContactController.php @@ -0,0 +1,43 @@ +. + +if (!defined('EG')) die('Direct access not allowed!'); + +class ContactController extends BaseController +{ + + public function __construct($model, $controller, $queryString) + { + + $this->_topMenuClasses['contact'] = " class='currentitem ui-btn-active'"; + + parent::__construct($model, $controller, $queryString); + + $data['title'] = 'contact - '.Website::$generalName; + $this->append($data); + } + + public function index($lang = 'en') + { + $this->cleverLoad('index'); + $this->right(); + } + +} \ No newline at end of file diff --git a/Application/Controllers/CreditsController.php b/Application/Controllers/CreditsController.php new file mode 100644 index 0000000..4dbcc4a --- /dev/null +++ b/Application/Controllers/CreditsController.php @@ -0,0 +1,43 @@ +. + +if (!defined('EG')) die('Direct access not allowed!'); + +class CreditsController extends BaseController +{ + + public function __construct($model, $controller, $queryString) + { + + $this->_topMenuClasses['credits'] = " class='currentitem ui-btn-active'"; + + parent::__construct($model, $controller, $queryString); + + $data['title'] = 'credits - '.Website::$generalName; + $this->append($data); + } + + public function index($lang = 'en') + { + $this->cleverLoad('index'); + $this->right(); + } + +} \ No newline at end of file diff --git a/Application/Controllers/DownloadController.php b/Application/Controllers/DownloadController.php new file mode 100644 index 0000000..b221095 --- /dev/null +++ b/Application/Controllers/DownloadController.php @@ -0,0 +1,275 @@ +. + +if (!defined('EG')) die('Direct access not allowed!'); + +class DownloadController extends BaseController +{ + + public function __construct($model, $controller, $queryString) + { + + $this->_topMenuClasses['download'] = " class='currentitem'"; + + parent::__construct($model, $controller, $queryString); + + $this->model('HardwareModel'); + + $data['title'] = 'download - '.Website::$generalName; + $this->append($data); + } + + public function index($lang = 'en') + { + $this->cleverLoad('index'); + $this->right($lang); + } + + //get the xml of the archive + private function getXml($res) + { + $xml = null; + $xml = "\n"; + $xml .= "\n"; + $xml .= "\t\n"; + $xml .= "\t\th-node project\n"; + $xml .= "\t\t".Website::$generalName."\n"; + $xml .= "\t\t".date("Y-m-d H:i:s")."\n"; + $xml .= "\t\t".License::getInsideXml()."\n"; + $xml .= "\t\n"; + + foreach ($res as $row) + { + $type = $row['hardware']['type']; + $xml .= "\t\n"; + + $xml .= "\t\t".$row['hardware']['id_hard']."\n"; + $xml .= "\t\t".$row['hardware']['type']."\n"; + + if ($type === 'notebook' or $type === 'printer' or $type === 'host-controller' ) + { + $xml .= "\t\t".$row['hardware']['subtype']."\n"; + } + if ($type === 'notebook') + { + $xml .= "\t\t".translate($row['hardware']['architecture'])."\n"; + $xml .= "\t\t".$row['hardware']['bios']."\n"; + $xml .= "\t\t".$row['hardware']['can_free_systems_be_installed']."\n"; + $xml .= "\t\t".$row['hardware']['prevent_wifi']."\n"; + } + + $xml .= "\t\t".$row['hardware']['model']."\n"; + + if ($type !== 'notebook') + { + $xml .= "\t\t\n"; + $xml .= "\t\t".$row['hardware']['pci_id']."\n"; + } + + $xml .= "\t\t".$row['hardware']['vendor']."\n"; + $xml .= "\t\t".$row['hardware']['kernel']."\n"; + $xml .= "\t\t".$row['hardware']['distribution']."\n"; + $xml .= "\t\t".$row['hardware']['comm_year']."\n"; + + if ($type !== 'notebook') + { + $xml .= "\t\t".$row['hardware']['interface']."\n"; + } + + if ($type === 'notebook' or $type === 'printer' or $type === 'scanner') + { + $xml .= "\t\t".$row['hardware']['compatibility']."\n"; + } + else if ($type === '3G-card' or $type === 'wifi') + { + $xml .= "\t\t".$row['hardware']['wifi_works']."\n"; + } + else if ($type === 'soundcard') + { + $xml .= "\t\t".$row['hardware']['sound_card_works']."\n"; + } + else if ($type === 'bluetooth') + { + $xml .= "\t\t".$row['hardware']['bluetooth_works']."\n"; + } + else if ($type === 'webcam') + { + $xml .= "\t\t".$row['hardware']['webcam_works']."\n"; + } + else if ($type === 'videocard') + { + $xml .= "\t\t".$row['hardware']['video_card_works']."\n"; + } + else if ($type === 'acquisition-card' or $type === 'modem' or $type === 'RAID-adapter' or $type === 'host-controller') + { + $xml .= "\t\t".$row['hardware']['compatibility']."\n"; + } + else if ($type === 'fingerprint-reader') + { + $xml .= "\t\t".$row['hardware']['fingerprint_works']."\n"; + } + else if ($type === 'ethernet-card') + { + $xml .= "\t\t".$row['hardware']['ethernet_card_works']."\n"; + } + else if ($type === 'sd-card-reader') + { + $xml .= "\t\t".$row['hardware']['sd_card_works']."\n"; + } + + if ($type === 'printer') + { + $xml .= "\t\t".$row['hardware']['it_tracks_users']."\n"; + } + + if ($type === 'notebook') + { + $xml .= "\t\t".$row['hardware']['wifi_type']."\n"; + $xml .= "\t\t".$row['hardware']['video_card_type']."\n"; + $xml .= "\t\t".$row['hardware']['webcam_type']."\n"; + $xml .= "\t\t".$row['hardware']['wifi_works']."\n"; + $xml .= "\t\t".$row['hardware']['video_card_works']."\n"; + $xml .= "\t\t".$row['hardware']['webcam_works']."\n"; + } + + if ($type !== "notebook") + { + $xml .= "\t\t".$row['hardware']['driver']."\n"; + } + + $xml .= "\t\t\n"; + + $xml .= "\t\t".$this->baseUrl."/".Hardware::getControllerFromType($type)."/view/".$this->lang."/".$row['hardware']['id_hard']."/".encodeUrl($row['hardware']['model'])."\n"; + $xml .= "\t\t".$this->baseUrl."/".Hardware::getControllerFromType($type)."/view/".$this->lang."/".$row['hardware']['id_hard']."\n"; + $xml .= "\t\t".$this->baseUrl."/".Hardware::getControllerFromType($type)."/history/".$this->lang."/".$row['hardware']['id_hard']."\n"; + + $xml .= "\t\n"; + } + + $xml .= "\n"; + + return $xml; + } + + protected function printXml($lang = 'en', $whereArray) + { + header ("Content-Type:text/xml"); + +// header("Content-Type: application/force-download"); +// header("Content-Type: application/octet-stream"); +// header("Content-Type: application/download"); + + $filename = array_key_exists('type',$whereArray) ? $whereArray['type'] : "all"; + header("Content-Disposition: attachment; filename=h-node-".$filename.".xml;"); + + $res = $this->m['HardwareModel']->clear()->select()->where($whereArray)->aWhere(array("cleared"=>"no"))->orderBy("type,hardware.id_hard")->send(); + + $data['xml'] = $this->getXml($res); + + $this->append($data); + $this->clean(); + $this->load('xml'); + } + + public function all($lang = 'en') + { + $this->printXml($lang, array('-deleted'=>'no')); + } + + public function notebooks($lang = 'en') + { + $this->printXml($lang, array('type'=>'notebook','-deleted'=>'no')); + } + + public function wifi($lang = 'en') + { + $this->printXml($lang, array('type'=>'wifi','-deleted'=>'no')); + } + + public function videocards($lang = 'en') + { + $this->printXml($lang, array('type'=>'videocard','-deleted'=>'no')); + } + + public function printers($lang = 'en') + { + $this->printXml($lang, array('type'=>'printer','-deleted'=>'no')); + } + + public function scanners($lang = 'en') + { + $this->printXml($lang, array('type'=>'scanner','-deleted'=>'no')); + } + + public function threegcards($lang = 'en') + { + $this->printXml($lang, array('type'=>'3G-card','-deleted'=>'no')); + } + + public function soundcards($lang = 'en') + { + $this->printXml($lang, array('type'=>'soundcard','-deleted'=>'no')); + } + + public function webcams($lang = 'en') + { + $this->printXml($lang, array('type'=>'webcam','-deleted'=>'no')); + } + + public function bluetooth($lang = 'en') + { + $this->printXml($lang, array('type'=>'bluetooth','-deleted'=>'no')); + } + + public function acquisitioncards($lang = 'en') + { + $this->printXml($lang, array('type'=>'acquisition-card','-deleted'=>'no')); + } + + public function fingerprintreaders($lang = 'en') + { + $this->printXml($lang, array('type'=>'fingerprint-reader','-deleted'=>'no')); + } + + public function ethernetcards($lang = 'en') + { + $this->printXml($lang, array('type'=>'ethernet-card','-deleted'=>'no')); + } + + public function sdcardreaders($lang = 'en') + { + $this->printXml($lang, array('type'=>'sd-card-reader','-deleted'=>'no')); + } + + public function modems($lang = 'en') + { + $this->printXml($lang, array('type'=>'modem','-deleted'=>'no')); + } + + public function raidadapters($lang = 'en') + { + $this->printXml($lang, array('type'=>'RAID-adapter','-deleted'=>'no')); + } + + public function hostcontrollers($lang = 'en') + { + $this->printXml($lang, array('type'=>'host-controller','-deleted'=>'no')); + } +} diff --git a/Application/Controllers/EthernetcardsController.php b/Application/Controllers/EthernetcardsController.php new file mode 100644 index 0000000..0425122 --- /dev/null +++ b/Application/Controllers/EthernetcardsController.php @@ -0,0 +1,131 @@ +. + +if (!defined('EG')) die('Direct access not allowed!'); + +class EthernetcardsController extends GenericController +{ + + public function __construct($model, $controller, $queryString) + { + + $worksOptions = Ethernetcards::$select; + $worksField = 'ethernet_card_works'; + $interfaceOptions = Ethernetcards::$interface; + + parent::__construct($model, $controller, $queryString); + + //load the model + $this->model('HardwareModel'); + $this->model('RevisionsModel'); + $this->model('EthernetcardsModel'); + $this->model('TalkModel'); + + $this->mod = $this->m['EthernetcardsModel']; + + $this->m['HardwareModel']->id_user = $this->s['registered']->status['id_user']; + $this->m['HardwareModel']->type = 'ethernet-card'; + + $this->m['HardwareModel']->setConditions($worksOptions,$worksField,$interfaceOptions); + + $this->m['HardwareModel']->setFields('model,kernel,description,distribution,comm_year,ethernet_card_works,pci_id,interface,driver,other_names','sanitizeAll'); + + $argKeys = array( + 'page:forceNat' => 1, + 'history_page:forceNat' => 1, + 'vendor:sanitizeString' => 'undef', + 'comm_year:sanitizeString' => 'undef', + 'ethernet_card_works:sanitizeString' => 'undef', + 'interface:sanitizeString' => 'undef', + 'sort-by:sanitizeString' => 'ethernet-works', + 'search_string:sanitizeString' => 'undef' + ); + + $this->setArgKeys($argKeys); + + $data['title'] = 'Ethernet cards'; + + $data['intefaceOptions'] = $interfaceOptions; + $data['worksOptions'] = $worksOptions; + $data['worksField'] = $worksField; + + $data['notFoundString'] = "No ethernet devices found"; + + $this->append($data); + } + + public function catalogue($lang = 'en') + { + $this->shift(1); + + $whereArray = array( + 'type' => $this->mod->type, + 'vendor' => $this->viewArgs['vendor'], + 'comm_year' => $this->viewArgs['comm_year'], + 'ethernet_card_works' => $this->viewArgs['ethernet_card_works'], + 'interface' => $this->viewArgs['interface'], + ); + + $this->mod->setWhereQueryClause($whereArray); + + parent::catalogue($lang); + } + + public function view($lang = 'en', $id = 0, $name = null) + { + parent::view($lang, $id, $name); + } + + public function history($lang = 'en', $id = 0) + { + parent::history($lang, $id); + } + + public function revision($lang = 'en', $id_rev = 0) + { + parent::revision($lang, $id_rev); + } + + public function insert($lang = 'en', $token = '') + { + parent::insert($lang, $token); + } + + public function update($lang = 'en', $token = '') + { + parent::update($lang, $token); + } + + public function differences($lang = 'en', $id_hard = 0, $id_rev = 0) + { + parent::differences($lang, $id_hard, $id_rev); + } + + public function climb($lang = 'en', $id_rev = 0, $token = '') + { + parent::climb($lang, $id_rev, $token); + } + + public function talk($lang = 'en', $id_hard = 0, $token = '') + { + parent::talk($lang, $id_hard, $token); + } + +} diff --git a/Application/Controllers/FaqController.php b/Application/Controllers/FaqController.php new file mode 100644 index 0000000..45ebab2 --- /dev/null +++ b/Application/Controllers/FaqController.php @@ -0,0 +1,41 @@ +. + +if (!defined('EG')) die('Direct access not allowed!'); + +class FaqController extends WikiController +{ + + public function __construct($model, $controller, $queryString) + { + $this->_topMenuClasses['faq'] = " class='currentitem'"; + + parent::__construct($model, $controller, $queryString); + + $this->_topMenuClasses['wiki'] = null; + + $data['tm'] = $this->_topMenuClasses; + + $data['title'] = 'FAQ page - '.Website::$generalName; + + $this->append($data); + } + +} \ No newline at end of file diff --git a/Application/Controllers/FingerprintreadersController.php b/Application/Controllers/FingerprintreadersController.php new file mode 100644 index 0000000..c3de0d7 --- /dev/null +++ b/Application/Controllers/FingerprintreadersController.php @@ -0,0 +1,131 @@ +. + +if (!defined('EG')) die('Direct access not allowed!'); + +class FingerprintreadersController extends GenericController +{ + + public function __construct($model, $controller, $queryString) + { + + $worksOptions = Fingerprintreaders::$select; + $worksField = 'fingerprint_works'; + $interfaceOptions = Fingerprintreaders::$interface; + + parent::__construct($model, $controller, $queryString); + + //load the model + $this->model('HardwareModel'); + $this->model('RevisionsModel'); + $this->model('FingerprintreadersModel'); + $this->model('TalkModel'); + + $this->mod = $this->m['FingerprintreadersModel']; + + $this->m['HardwareModel']->id_user = $this->s['registered']->status['id_user']; + $this->m['HardwareModel']->type = 'fingerprint-reader'; + + $this->m['HardwareModel']->setConditions($worksOptions,$worksField,$interfaceOptions); + + $this->m['HardwareModel']->setFields('model,kernel,description,distribution,comm_year,fingerprint_works,pci_id,interface,driver,other_names','sanitizeAll'); + + $argKeys = array( + 'page:forceNat' => 1, + 'history_page:forceNat' => 1, + 'vendor:sanitizeString' => 'undef', + 'comm_year:sanitizeString' => 'undef', + 'fingerprint_works:sanitizeString' => 'undef', + 'interface:sanitizeString' => 'undef', + 'sort-by:sanitizeString' => 'fingerprint-works', + 'search_string:sanitizeString' => 'undef' + ); + + $this->setArgKeys($argKeys); + + $data['title'] = 'Fingerprint reader'; + + $data['intefaceOptions'] = $interfaceOptions; + $data['worksOptions'] = $worksOptions; + $data['worksField'] = $worksField; + + $data['notFoundString'] = "No fingerprint readers found"; + + $this->append($data); + } + + public function catalogue($lang = 'en') + { + $this->shift(1); + + $whereArray = array( + 'type' => $this->mod->type, + 'vendor' => $this->viewArgs['vendor'], + 'comm_year' => $this->viewArgs['comm_year'], + 'fingerprint_works' => $this->viewArgs['fingerprint_works'], + 'interface' => $this->viewArgs['interface'], + ); + + $this->mod->setWhereQueryClause($whereArray); + + parent::catalogue($lang); + } + + public function view($lang = 'en', $id = 0, $name = null) + { + parent::view($lang, $id, $name); + } + + public function history($lang = 'en', $id = 0) + { + parent::history($lang, $id); + } + + public function revision($lang = 'en', $id_rev = 0) + { + parent::revision($lang, $id_rev); + } + + public function insert($lang = 'en', $token = '') + { + parent::insert($lang, $token); + } + + public function update($lang = 'en', $token = '') + { + parent::update($lang, $token); + } + + public function differences($lang = 'en', $id_hard = 0, $id_rev = 0) + { + parent::differences($lang, $id_hard, $id_rev); + } + + public function climb($lang = 'en', $id_rev = 0, $token = '') + { + parent::climb($lang, $id_rev, $token); + } + + public function talk($lang = 'en', $id_hard = 0, $token = '') + { + parent::talk($lang, $id_hard, $token); + } + +} diff --git a/Application/Controllers/GenericController.php b/Application/Controllers/GenericController.php new file mode 100644 index 0000000..00848c3 --- /dev/null +++ b/Application/Controllers/GenericController.php @@ -0,0 +1,1001 @@ +. + +if (!defined('EG')) die('Direct access not allowed!'); + +class GenericController extends BaseController +{ + + protected $_controllerName = null; //as in the URL + + public $orderPopup; + + public function __construct($model, $controller, $queryString) { + + $this->_topMenuClasses['hardware'] = " class='currentitem ui-btn-active'"; + + parent::__construct($model, $controller, $queryString); + + $this->model('VendorsModel'); + + $popup = new Popup(); + $popup->name = gtext('sort by'); + + $popNames = array(gtext('last inserted'),gtext('alphabetically'),gtext('alphabetically desc'),gtext('compatibility')); + $popValues = array('last-inserted','alphabetically','alphabetically-desc','compatibility'); + + switch ($this->controller) + { + case 'printers': + $popup->itemsName = $popNames; + $popup->itemsValue = $popValues; + break; + case 'notebooks': + $popup->itemsName = $popNames; + $popup->itemsValue = $popValues; + break; + case 'scanners': + $popup->itemsName = $popNames; + $popup->itemsValue = $popValues; + break; + case 'wifi': + $popNames = array(gtext('last inserted'),gtext('alphabetically'),gtext('alphabetically desc'),gtext('wifi works')); + $popValues = array('last-inserted','alphabetically','alphabetically-desc','wifi-works'); + $popup->itemsName = $popNames; + $popup->itemsValue = $popValues; + break; + case 'videocards': + $popNames = array(gtext('last inserted'),gtext('alphabetically'),gtext('alphabetically desc'),gtext('video card works')); + $popValues = array('last-inserted','alphabetically','alphabetically-desc','video-card-works'); + $popup->itemsName = $popNames; + $popup->itemsValue = $popValues; + break; + case 'threegcards': + $popNames = array(gtext('last inserted'),gtext('alphabetically'),gtext('alphabetically desc'),gtext('wifi works')); + $popValues = array('last-inserted','alphabetically','alphabetically-desc','wifi-works'); + $popup->itemsName = $popNames; + $popup->itemsValue = $popValues; + break; + case 'soundcards': + $popNames = array(gtext('last inserted'),gtext('alphabetically'),gtext('alphabetically desc'),gtext('sound card works')); + $popValues = array('last-inserted','alphabetically','alphabetically-desc','sound-card-works'); + $popup->itemsName = $popNames; + $popup->itemsValue = $popValues; + break; + case 'webcams': + $popNames = array(gtext('last inserted'),gtext('alphabetically'),gtext('alphabetically desc'),gtext('webcam works')); + $popValues = array('last-inserted','alphabetically','alphabetically-desc','webcam-works'); + $popup->itemsName = $popNames; + $popup->itemsValue = $popValues; + break; + case 'bluetooth': + $popNames = array(gtext('last inserted'),gtext('alphabetically'),gtext('alphabetically desc'),gtext('bluetooth works')); + $popValues = array('last-inserted','alphabetically','alphabetically-desc','bluetooth-works'); + $popup->itemsName = $popNames; + $popup->itemsValue = $popValues; + break; + case 'acquisitioncards': + $popNames = array(gtext('last inserted'),gtext('alphabetically'),gtext('alphabetically desc'),gtext('compatibility desc')); + $popValues = array('last-inserted','alphabetically','alphabetically-desc','compatibility-desc'); + $popup->itemsName = $popNames; + $popup->itemsValue = $popValues; + break; + case 'fingerprintreaders': + $popNames = array(gtext('last inserted'),gtext('alphabetically'),gtext('alphabetically desc'),gtext('fingerprint works')); + $popValues = array('last-inserted','alphabetically','alphabetically-desc','fingerprint-works'); + $popup->itemsName = $popNames; + $popup->itemsValue = $popValues; + break; + case 'ethernetcards': + $popNames = array(gtext('last inserted'),gtext('alphabetically'),gtext('alphabetically desc'),gtext('ethernet works')); + $popValues = array('last-inserted','alphabetically','alphabetically-desc','ethernet-works'); + $popup->itemsName = $popNames; + $popup->itemsValue = $popValues; + break; + case 'sdcardreaders': + $popNames = array(gtext('last inserted'),gtext('alphabetically'),gtext('alphabetically desc'),gtext('sdcard works')); + $popValues = array('last-inserted','alphabetically','alphabetically-desc','sdcard-works'); + $popup->itemsName = $popNames; + $popup->itemsValue = $popValues; + break; + case 'modems': + $popNames = array(gtext('last inserted'),gtext('alphabetically'),gtext('alphabetically desc'),gtext('compatibility desc')); + $popValues = array('last-inserted','alphabetically','alphabetically-desc','compatibility-desc'); + $popup->itemsName = $popNames; + $popup->itemsValue = $popValues; + break; + case 'raidadapters': + $popNames = array(gtext('last inserted'),gtext('alphabetically'),gtext('alphabetically desc'),gtext('compatibility desc')); + $popValues = array('last-inserted','alphabetically','alphabetically-desc','compatibility-desc'); + $popup->itemsName = $popNames; + $popup->itemsValue = $popValues; + break; + case 'hostcontrollers': + $popNames = array(gtext('last inserted'),gtext('alphabetically'),gtext('alphabetically desc'),gtext('compatibility desc')); + $popValues = array('last-inserted','alphabetically','alphabetically-desc','compatibility-desc'); + $popup->itemsName = $popNames; + $popup->itemsValue = $popValues; + break; + default: + array_pop($popNames); + array_pop($popValues); + $popup->itemsName = $popNames; + $popup->itemsValue = $popValues; + break; + } + + $this->orderPopup = $popup; + +// $data['howToCompileLabel'] = null; + $data['isApproved'] = true; + + $data['tracksHelpLabel'] = $this->getModule(array('devices',$this->controller,'form','it_tracks_users')); + $data['howToCompileLabel'] = $this->getModule(array('devices','all','form','how_to_compile')); + $data['modelNameLabel'] = $this->getModule(array('devices','all','form','model_name_entry_help_label')); + $data['vendoridProductidLabel'] = $this->getModule(array('devices','not_notebook','form','vendorid_productid_label')); + $data['descriptionLabel'] = $this->getModule(array('devices','all','form','description_entry_help_label')); + $data['preventWifiLabel'] = $this->getModule(array('devices','notebook','form','prevent_wifi_label')); + + $this->append($data); + } + + protected function insert($lang = 'en', $token = '') + { + $this->shift(2); + + if ( strcmp($this->_updating,'no') !== 0 ) $this->redirect('users/login/'.$this->lang,0); + + $clean['token'] = sanitizeAlphanum($token); + + $data['descriptionPreview'] = null; //contains the HTML of the preview of the description entry + + $data['notice'] = null; + $data['submission_response'] = 'error'; + + $data['tree'] = $this->getSpecHardLink() . " » " . " ".gtext("Insert").""; + + $this->s['registered']->checkStatus(); + + if ($this->s['registered']->status['status'] === 'logged' or Website::$allowAnonymousSubmission === "yes") + { +// if (!$this->s['registered']->checkCsrf($clean['token'])) $this->redirect($this->controller.'/catalogue/'.$this->lang,2,'wrong token..'); + +// if ($this->m['UsersModel']->isBlocked($this->s['registered']->status['id_user'])) $this->redirect('my/home/'.$this->lang,2,'your account has been blocked..'); + + if (isset($_POST['insertAction'])) + { + if ($this->checkDist()) + { + $pci_id = $this->request->post('pci_id','','sanitizeAll'); + $interface = $this->request->post('interface','not-defined','sanitizeAll'); + + if ($this->checkVendorId($interface)) + { + if (strcmp($this->m['HardwareModel']->type,'notebook') !== 0) + { + $this->m['HardwareModel']->values['vendor'] = sanitizeAll($this->m['VendorsModel']->getName($pci_id,$interface)); + + $this->m['HardwareModel']->databaseConditions['insert']['+checkUnique'] = 'pci_id|VendorID:ProductID is already present in the database. This means that the device you are trying to insert is already in the database. See here: '.$this->getAlreadyExixtsLink($pci_id); + } + + //insert the new device + $this->m['HardwareModel']->updateTable('insert'); + + if ($this->m['HardwareModel']->queryResult) + { + if (strcmp($this->controller,'notebooks') === 0) + { + @session_start(); + $_SESSION['notebook_inserted'] = 'yes'; + } + + $data['submission_response'] = 'executed'; + } + + $this->viewRedirect($this->m['HardwareModel']->lastId); + + } + } + } + + $data['descriptionPreview'] = $this->getPreview(); + + $data['notice'] = $this->m['HardwareModel']->notice; + + $data['submitName'] = "insertAction"; + $data['hiddenInput'] = null; + + $data['values'] = $this->m['HardwareModel']->getFormValues('insert','sanitizeHtml'); + $this->append($data); + + if (!isset($_POST['from_client'])) + { + $this->load('top_left'); + $this->load('license_notice'); + $this->load('form'); + $this->load('bottom_left'); + $this->right(); + } + else + { + header ("Content-Type:text/xml"); + $this->clean(); + $this->load('xml_response'); + } + } + else + { + $this->redirect("users/login/".$this->lang."?redirect=".$this->controller."/catalogue/".$this->lang,0); + } + } + + public function del($lang = 'en', $token = '') + { + header('Content-type: text/html; charset=UTF-8'); + + $this->shift(2); + + $this->clean(); + + $clean['token'] = sanitizeAlphanum($token); + + if ($this->s['registered']->status['status'] === 'logged') + { + if (!$this->s['registered']->checkCsrf($clean['token'])) die("wrong token"); + + if ($this->m['UsersModel']->isBlocked($this->s['registered']->status['id_user'])) die("your account has been blocked"); + + $clean['id_user'] = (int)$this->s['registered']->status['id_user']; + $clean['id_hard'] = $this->request->post('id_hard',0,'forceInt'); + + $this->model("DeletionModel"); + + $numb = $this->m['DeletionModel']->where(array("id_hard"=>$clean['id_hard'],"created_by"=>$clean['id_user']))->rowNumber(); + + if ($numb === 0) + { + $id_dup = $this->request->post('id_duplicate',0,'forceInt'); + $object = $this->request->post('object','','sanitizeAll'); + + if ($id_dup === 0 and strcmp($object,'duplication') === 0) + { + echo "you have no specified the device duplicated by this model"; + } + else + { + $this->m['DeletionModel']->setFields('id_hard:forceInt,object,message,id_duplicate:forceInt','sanitizeAll'); + $this->m['DeletionModel']->values['created_by'] = $clean['id_user']; + + $this->m['DeletionModel']->updateTable('insert'); + if ($this->m['DeletionModel']->queryResult) + { + $hard = new HardwareModel(); + $c = $hard->where(array('id_hard'=>$clean['id_hard'],'ask_for_del'=>'yes'))->rowNumber(); + if ($c < 1) + { + $hard->db->update('hardware','ask_for_del',array('yes'),'id_hard='.$clean['id_hard']); + } + echo "operation executed"; + } + else + { + echo "one error occurred, please try later"; + } + } + } + else + { + echo "you have already asked for the deletion of this device"; + } + } + } + + protected function update($lang = 'en', $token = '') + { + $this->shift(2); + + $clean['token'] = sanitizeAlphanum($token); + + $data['descriptionPreview'] = null; //contains the HTML of the preview of the description entry + + $data['notice'] = null; + $data['submission_response'] = 'error'; + + $this->s['registered']->checkStatus(); + + if (isset($_POST['id_hard'])) + { + //get the id + $clean['id_hard'] = isset($_POST['id_hard']) ? (int)$_POST['id_hard'] : 0; + + if ($this->s['registered']->status['status'] === 'logged') + { + if (!$this->s['registered']->checkCsrf($clean['token'])) $this->redirect($this->controller.'/catalogue/'.$this->lang,2,'wrong token..'); + + if ($this->m['UsersModel']->isBlocked($this->s['registered']->status['id_user'])) $this->redirect('my/home/'.$this->lang,2,'your account has been blocked..'); + + if ($this->m['HardwareModel']->isCleared($clean['id_hard'])) $this->redirect('generic/cleared/'.$this->lang,0); + + $deleted = $this->m['HardwareModel']->select("hardware.deleted")->where(array("id_hard"=>$clean['id_hard']))->limit(1)->toList('deleted')->send(); + + if (strcmp($deleted[0],'no') === 0) + { + $ne_name = $this->m['HardwareModel']->getTheModelName($clean['id_hard']); + $name = encodeUrl($ne_name); + $data['name'] = $name; + $data['ne_name'] = $ne_name; + $data['tree'] = $this->getSpecHardLink() . " » " . $this->getViewLink($clean['id_hard'],$ne_name) . " » ".gtext("Edit").""; + + if (isset($_POST['updateAction'])) + { + if ($this->checkDist()) + { + $pci_id = $this->request->post('pci_id','','sanitizeAll'); + $interface = $this->request->post('interface','not-defined','sanitizeAll'); + + if ($this->checkVendorId($interface)) + { + if (strcmp($this->m['HardwareModel']->type,'notebook') !== 0) + { + $this->m['HardwareModel']->values['vendor'] = sanitizeAll($this->m['VendorsModel']->getName($pci_id,$interface)); + + $this->m['HardwareModel']->databaseConditions['update']['+checkUniqueCompl'] = 'pci_id|VendorID:ProductID is already present in the database. This means that the device you are trying to insert is already in the database. See here: '.$this->getAlreadyExixtsLink($pci_id); + } + + //carry out the update database action + $this->m['HardwareModel']->updateTable('update'); + + if ($this->m['HardwareModel']->queryResult) + { + $data['submission_response'] = 'executed'; + } + $this->viewRedirect($this->m['HardwareModel']->lastId); + } + } + } + + $data['descriptionPreview'] = $this->getPreview(); + + $data['notice'] = $this->m['HardwareModel']->notice; + + $data['id_hard'] = $clean['id_hard']; + $data['submitName'] = "updateAction"; + // echo $this->m['HardwareModel']->fields; + $data['values'] = $this->m['HardwareModel']->getFormValues('update','sanitizeHtml'); + $data['hiddenInput'] = "\n"; + + $this->append($data); + + if (!isset($_POST['from_client'])) + { + $this->load('top_left'); + $this->load('license_notice'); + $this->load('form'); + $this->load('bottom_left'); + $this->right(); + } + else + { + header ("Content-Type:text/xml"); + $this->clean(); + $this->load('xml_response'); + } + } + else + { + $this->redirect($this->controller.'/catalogue/'.$this->lang,2,'deleted..'); + } + } + else + { + $this->redirect("users/login/".$this->lang."?redirect=".$this->controller."/view/".$this->lang."/".$clean['id_hard'],0); + } + } + else + { + $this->redirect($this->controller.'/catalogue/'.$this->lang); + } + } + + //get the preview of the description entry + protected function getPreview() + { + if (isset($_POST['previewAction'])) + { + $this->m['HardwareModel']->result = false; + return $this->request->post('description','','sanitizeHtml'); + } + return null; + } + + protected function checkVendorId($interface) + { + if (strcmp($this->m['HardwareModel']->type,'notebook') === 0) return true; + + if (array_key_exists('pci_id',$_POST)) + { + if (strcmp($_POST['pci_id'],"") !== 0) + { + if (preg_match('/^[a-zA-Z0-9]{4}(\:)[a-zA-Z0-9]{4}$/',$_POST['pci_id'])) + { + if ($this->m['VendorsModel']->check($_POST['pci_id'],$interface)) + { + return true; + } + else + { + $this->m['HardwareModel']->result = false; + $this->m['HardwareModel']->notice = "
Your vendor has not been found.

Your vendorid code is not present in the list. If it is a USB device, please choose the right interface (USB), otherwise the system will check inside the PCI ID vendors' list. If it is not a USB device, and you are not sure about the right interface, choose not-defined, and it should work fine (the system will check inside the PCI ID vendors' list if you choose an interface other than USB).

If your vendor has not been found yet, please open an issue here in order to ask the insertion of your vendor.

If your vendor has not been found you could also send your PCI ID or USB ID to the PCI ID repository (http://pciids.sourceforge.net/) or to the USB ID repository (http://www.linux-usb.org/usb-ids.html).
\n"; + return false; + } + } + else + { + $this->m['HardwareModel']->result = false; + $this->m['HardwareModel']->notice = "
VendorID:ProductID has to have the following format: [a-zA-Z0-9]{4}(\:)[a-zA-Z0-9]{4}
"; + } + } + else + { + $this->m['HardwareModel']->result = false; + $this->m['HardwareModel']->notice = "
Vendorid:Productid code not defined..
\n"; + return false; + } + } + $this->m['HardwareModel']->result = false; + return false; + } + + protected function checkDist() + { + if (array_key_exists('distribution',$_POST)) + { + if (strcmp($_POST['distribution'],"") !== 0) + { + if (Distributions::check($_POST['distribution'])) + { + return true; + } + else + { + $this->m['HardwareModel']->result = false; + $this->m['HardwareModel']->notice = "
Distribution not allowed..
\n"; + return false; + } + } + else + { + $this->m['HardwareModel']->result = false; + $this->m['HardwareModel']->notice = "
Distribution not defined..
\n"; + return false; + } + } + $this->m['HardwareModel']->result = false; + return false; + } + + protected function viewRedirect($id) + { + $clean['id'] = (int)$id; + + if ($this->m['HardwareModel']->queryResult) + { + if (!isset($_POST['from_client'])) + { + $name = encodeUrl($this->m['HardwareModel']->getTheModelName($clean['id'])); + $this->redirect($this->controller.'/view/'.$this->lang.'/'.$clean['id'].'/'.$name.$this->viewStatus); + } + } + } + + //load the view files + protected function loadViewAll($viewName = null) + { + $this->load('top_left'); + $viewArray = explode(',',$viewName); + foreach ($viewArray as $viewFile) + { + $this->load($viewFile); + } + $this->load('bottom_left'); + $this->right(); + } + + protected function catalogue($lang = 'en') + { + $data['title'] = $this->controller.' - '.Website::$generalName; + + Params::$nullQueryValue = 'undef'; + + $data['tree'] = plural($this->controller); + + //look for a string in the model name or in the other_names if the string is different from undef + if (strcmp($this->viewArgs['search_string'],"undef") !== 0) + { + $nWhere = array( + 'OR' => array( + 'model' => "like '%".$this->viewArgs['search_string']."%'", + 'other_names' => "like '%".$this->viewArgs['search_string']."%'", + ), + ); + $this->mod->aWhere($nWhere); + } + + $this->mod->aWhere(array("deleted"=>"no","cleared"=>"no")); + + $this->mod->popupBuild(); + $popup = $this->mod->popupArray; + $popup['sort-by'] = $this->orderPopup; + + $this->helper('Popup',$this->controller.'/catalogue/'.$this->lang,$popup,'inclusive','page'); + + $this->h['Popup']->allString = gtext("All"); + + //create the HTML of the popup + $data['popup'] = $this->h['Popup']->render(); + + if (strcmp($this->controller,'notebooks') === 0) + { + $this->mod->popupArray = array(); + $this->mod->morePopups(); + $this->mod->popupBuild(); + $this->h['Popup']->popupArray = $this->mod->popupArray; + $data['popupMore'] = $this->h['Popup']->render(); + } + + $this->mod->orderBy = getOrderByClause($this->viewArgs['sort-by']); + $recordNumber = $this->mod->rowNumber(); + + $data['recordNumber'] = $recordNumber; + + //load the Pages helper + $this->helper('Pages',$this->controller.'/catalogue/'.$this->lang,'page'); + $page = $this->viewArgs['page']; + //set the limit clause + $this->mod->limit = $this->h['Pages']->getLimit($page,$recordNumber,10); + + $data['table'] = $this->mod->getAll(); +// echo $this->mod->getQuery(); + + $data['pageList'] = $this->h['Pages']->render($page-3,7); + $data['numberOfPages'] = $this->h['Pages']->getNumbOfPages(); + + $data['topNotice'] = $this->getModule(array('devices',$this->controller,'catalogue')); + + $data['popupLabel'] = $this->mod->getPopupLabel($this->viewArgs); + + $data["search_string_form_value"] = strcmp($this->viewArgs['search_string'],Params::$nullQueryValue) === 0 ? "" : $this->viewArgs['search_string']; + + //set search_string to undef to clean the model name filter + $temp = $this->viewArgs; + $temp['page'] = 1; + $temp['search_string'] = "undef"; + $data['clearViewStatus'] = Url::createUrl($temp); + + $this->append($data); + + $this->loadViewAll('catalogue'); + } + + protected function passWhoAskedForDeletion($id_hard) + { + $clean['id_hard'] = (int)$id_hard; + + $deletion = new DeletionModel(); + $data['deletion'] = $deletion->select()->where(array('id_hard'=>$clean['id_hard']))->send(); + $data['deletionUsers'] = $deletion->getList($data['deletion'],'created_by'); + + $this->append($data); + } + + public function cleared($lang = 'en') + { + $data['title'] = 'page permanently deleted - '.Website::$generalName; + + $data['tree'] = "device page permanently deleted"; + + $this->append($data); + + $this->loadViewAll('cleared'); + } + + protected function view($lang = 'en', $id_hard = 0, $name = null) + { + $this->shift(3); + + //set the history_page to 1 in the viewStatus + $this->viewArgs['history_page'] = 1; + $this->buildStatus(); + + $clean['id_hard'] = (int)$id_hard; + $data['id_hard'] = $clean['id_hard']; + $data['ne_name'] = null; + $data['name'] = null; + $data['tree'] = null; + $data['isDeleted'] = false; + + $data['md_javascript'] = "moderator_dialog(\"devicehide\",\"device\");moderator_dialog(\"deviceshow\",\"device\");moderator_dialog(\"deviceapprove\",\"device_app\");moderator_dialog(\"deviceclear\",\"device_cl\");"; + + if ($this->m['HardwareModel']->isCleared($clean['id_hard'])) $this->redirect('generic/cleared/'.$this->lang,0); + + if ($this->mod->checkType($clean['id_hard'])) + { + $this->mod->setWhereQueryClause(array("id_hard" => $clean['id_hard'])); + $data['table'] = $this->mod->getAll(); + + if (count($data['table']) > 0) + { + + $data['talk_number'] = $this->m['TalkModel']->select('count(*) as numb,id_hard')->where(array('id_hard'=>$clean['id_hard'],'deleted'=>'no'))->rowNumber(); + + $data['ne_name'] = $data['table'][0]['hardware']['model']; + $data['name'] = encodeUrl($data['ne_name']); + $data['title'] = $data['ne_name'].' - '.Website::$generalName; + $data['tree'] = $this->getSpecHardLink() . " » ".$data['ne_name'].""; + $data['isDeleted'] = $this->m['HardwareModel']->isDeleted($clean['id_hard']); + $data['isApproved'] = strcmp($data['table'][0]['hardware']['approved'],'yes') === 0 ? true : false; + + $data['tracksHelpTop'] = $this->getModule(array('devices',$this->controller,'page','it_tracks_users')); + $data['tracksHelpLabel'] = $this->getModule(array('devices',$this->controller,'form','it_tracks_users')); + + $this->passWhoAskedForDeletion($clean['id_hard']); + } + + $this->append($data); + + @session_start(); + if ( isset($_SESSION['notebook_inserted']) and strcmp($this->controller,'notebooks') === 0 ) + { + $viewFilesList = 'suggest_dialog,dialog,page,if_page_deleted,moderator_dialog'; + unset($_SESSION['notebook_inserted']); + } + else + { + $viewFilesList = 'dialog,page,if_page_deleted,moderator_dialog'; + } + + $this->loadViewAll($viewFilesList); + } + else + { +// $this->redirect($this->_controller.'/'.); + } + } + + protected function history($lang = 'en', $id = 0) + { + $this->shift(2); + $clean['id'] = (int)$id; + $data['id'] = $clean['id']; + $data['ne_name'] = $this->m['HardwareModel']->getTheModelName($clean['id']); + $data['name'] = encodeUrl($data['ne_name']); + $data['tree'] = $this->getSpecHardLink() . " » " . $this->getViewLink($clean['id'],$data['ne_name'])." » ".gtext("History").""; + + $data['title'] = 'history - '.Website::$generalName; + + $data['isDeleted'] = $this->m['HardwareModel']->isDeleted($clean['id']); + + if ($this->m['HardwareModel']->isCleared($clean['id'])) $this->redirect('generic/cleared/'.$this->lang,0); + + //get the first revision + $res = $this->m['RevisionsModel']->db->select('revisions','id_rev','id_hard='.$clean['id'],null,'id_rev',1); + if (count($res) > 0) + { + $data['firstRev'] = $res[0]['revisions']['id_rev']; + } + + $res1 = $this->m['HardwareModel']->db->select('hardware','update_date,updated_by','id_hard='.$clean['id']); + + $this->m['RevisionsModel']->setWhereQueryClause(array('id_hard' => $clean['id'])); + + //load the Pages helper + $this->helper('Pages',$this->controller.'/history/'.$this->lang.'/'.$clean['id'],'history_page'); + //get the number of records + $recordNumber = $this->m['RevisionsModel']->rowNumber(); + $page = $this->viewArgs['history_page']; + //set the limit clause + $this->m['RevisionsModel']->limit = $this->h['Pages']->getLimit($page,$recordNumber,20); + $res2 = $this->m['RevisionsModel']->getFields('update_date,updated_by,id_rev'); + + $data['pageList'] = $this->h['Pages']->render($page-3,7); + + + $data['rev1'] = $res1; + $data['rev2'] = $res2; + + $this->passWhoAskedForDeletion($clean['id']); + + $this->append($data); + $this->loadViewAll('history,if_page_deleted'); + } + + protected function revision($lang = 'en', $id_rev = 0) + { + $this->shift(2); + $clean['id_rev'] = (int)$id_rev; + + $this->m['RevisionsModel']->setWhereQueryClause(array("id_rev" => $clean['id_rev'])); + $data['table'] = $this->m['RevisionsModel']->getAll(); + + $data['id_hard'] = 0; + $data['updated_by'] = null; + $data['update_date'] = null; + $data['name'] = null; + $data['ne_name'] = null; + $data['tree'] = null; + $data['isDeleted'] = false; + $data['title'] = 'revision - '.Website::$generalName; + + if (count($data['table']) > 0) + { + $data['id_hard'] = (int)$data['table'][0]['revisions']['id_hard']; + + if ($this->m['HardwareModel']->isCleared($data['id_hard'])) $this->redirect('generic/cleared/'.$this->lang,0); + + $data['ne_name'] = $this->m['HardwareModel']->getTheModelName($data['id_hard']); + $data['name'] = encodeUrl($data['ne_name']); + $data['tree'] = $this->getSpecHardLink() . " » " . $this->getViewLink($data['id_hard'],$data['ne_name'])." » " . $this->getHistoryLink($data['id_hard']) . " » ".gtext("Revision").""; + + $data['updated_by'] = $data['table'][0]['revisions']['updated_by']; + $data['update_date'] = $data['table'][0]['revisions']['update_date']; + + $data['isDeleted'] = $this->m['HardwareModel']->isDeleted($data['id_hard']); + } + + $this->append($data); + $this->loadViewAll('page'); + } + + protected function differences($lang = 'en', $id_hard = 0, $id_rev = 0) + { + $this->shift(3); + + $data['title'] = 'differences - '.Website::$generalName; + + $clean['id_hard'] = (int)$id_hard; + $clean['id_rev'] = (int)$id_rev; + + $data['id_hard'] = $clean['id_hard']; + $ne_name = $this->m['HardwareModel']->getTheModelName((int)$data['id_hard']); + $data['name'] = encodeUrl($ne_name); + $data['tree'] = $this->getSpecHardLink() . " » " . $this->getViewLink($data['id_hard'],$ne_name)." » " . $this->getHistoryLink($clean['id_hard']) . " » ".gtext("Differences").""; + + $data['isDeleted'] = $this->m['HardwareModel']->isDeleted($clean['id_hard']); + $data['showDiff'] = false; + + $diffArray = array(); + + if ($this->m['HardwareModel']->isCleared($clean['id_hard'])) $this->redirect('generic/cleared/'.$this->lang,0); + + if (strcmp($clean['id_hard'],0) !== 0 and strcmp($clean['id_rev'],0) !== 0) + { + $this->m['RevisionsModel']->setWhereQueryClause(array('id_hard' => $clean['id_hard'],'id_rev' => '<='.$clean['id_rev'])); + $this->m['RevisionsModel']->limit = 2; + $res = $this->m['RevisionsModel']->getAll(); + if (count($res) > 1) + { + $newArray = $res[0]['revisions']; + $oldArray = $res[1]['revisions']; + + $data['update_new'] = $newArray['update_date']; + $data['update_old'] = $oldArray['update_date']; + $data['updated_by'] = $newArray['updated_by']; + + $diffArray = $this->mod->getDiffArray($oldArray, $newArray); + + $data['showDiff'] = true; + } + } + else if (strcmp($clean['id_hard'],0) !== 0 and strcmp($clean['id_rev'],0) === 0) + { + $this->mod->setWhereQueryClause(array('id_hard' => $clean['id_hard'])); + $lastRes = $this->mod->getAll(); + + if (count($lastRes) > 0) + { + $this->m['RevisionsModel']->setWhereQueryClause(array('id_hard' => $clean['id_hard'])); + $this->m['RevisionsModel']->limit = 1; + $revRes = $this->m['RevisionsModel']->getAll(); + + if (count($revRes) > 0) + { + $newArray = $lastRes[0]['hardware']; + $oldArray = $revRes[0]['revisions']; + + $data['update_new'] = $newArray['update_date']; + $data['update_old'] = $oldArray['update_date']; + $data['updated_by'] = $newArray['updated_by']; + + $diffArray = $this->mod->getDiffArray($oldArray, $newArray); + + $data['showDiff'] = true; + } + } + + } + + $data['fieldsWithBreaks'] = $this->mod->fieldsWithBreaks; + $data['diffArray'] = $diffArray; + + $this->append($data); + $this->loadViewAll('differences'); + } + + protected function climb($lang = 'en', $id_rev = 0, $token = '') + { + $this->shift(3); + + $data['title'] = 'make current - '.Website::$generalName; + + $clean['token'] = sanitizeAlphanum($token); + + $clean['id_rev'] = (int)$id_rev; + $clean['id_hard'] = (int)$this->m['RevisionsModel']->getIdHard($clean['id_rev']); + + if ($this->m['HardwareModel']->isCleared($clean['id_hard'])) $this->redirect('generic/cleared/'.$this->lang,0); + + if ($clean['id_hard'] !== 0) + { + $deleted = $this->m['HardwareModel']->select("hardware.deleted")->where(array("id_hard"=>$clean['id_hard']))->limit(1)->toList('deleted')->send(); + + $data['isDeleted'] = $this->m['HardwareModel']->isDeleted($clean['id_hard']); + + $data['id_rev'] = $clean['id_rev']; + $data['id_hard'] = $clean['id_hard']; + $data['ne_name'] = $this->m['HardwareModel']->getTheModelName($clean['id_hard']); + $data['name'] = encodeUrl($data['ne_name']); + $data['tree'] = $this->getSpecHardLink() . " » " . $this->getViewLink($data['id_hard'],$data['ne_name'])." » " . $this->getHistoryLink($clean['id_hard']) . " » make current"; + + $data['notice'] = null; + $this->s['registered']->checkStatus(); + + if ($this->s['registered']->status['status'] === 'logged') + { + if (!$this->s['registered']->checkCsrf($clean['token'])) $this->redirect($this->controller.'/catalogue/'.$this->lang,2,'wrong token..'); + + if ($this->m['UsersModel']->isBlocked($this->s['registered']->status['id_user'])) $this->redirect('my/home/'.$this->lang,2,'your account has been blocked..'); + + if ($this->m['HardwareModel']->isDeleted($clean['id_hard'])) $this->redirect($this->controller.'/catalogue/'.$this->lang,2,'this device page has been deleted..'); + + if (isset($_POST['confirmAction'])) + { + $this->m['HardwareModel']->makeCurrent($clean['id_rev']); + + $this->viewRedirect($this->m['HardwareModel']->lastId); + + $data['notice'] = $this->m['HardwareModel']->notice; + } + + $this->append($data); + $this->loadViewAll('climb'); + } + else + { + $this->redirect("users/login/".$this->lang."?redirect=".$this->controller."/view/".$this->lang."/".$clean['id_hard'],0); + } + } + } + + protected function talk($lang = 'en', $id_hard = 0, $token = 'token') + { + $this->shift(3); + + $this->m['TalkModel']->setFields('title,message','sanitizeAll'); + + $data['title'] = 'talk - '.Website::$generalName; + + $clean['token'] = sanitizeAlphanum($token); + $clean['id_hard'] = (int)$id_hard; + $data['id_hard'] = $clean['id_hard']; + $data['ne_name'] = $this->m['HardwareModel']->getTheModelName($clean['id_hard']); + $data['name'] = encodeUrl($data['ne_name']); + $data['tree'] = $this->getSpecHardLink() . " » " . $this->getViewLink($clean['id_hard'],$data['ne_name'])." » ".gtext("Talk").""; + + $data['isDeleted'] = $this->m['HardwareModel']->isDeleted($clean['id_hard']); + + if ($this->m['HardwareModel']->isCleared($clean['id_hard'])) $this->redirect('generic/cleared/'.$this->lang,0); + + if (isset($_POST['insertAction'])) + { + if ($this->s['registered']->status['status'] === 'logged') + { + if (!$this->s['registered']->checkCsrf($clean['token'])) $this->redirect($this->controller.'/catalogue/'.$this->lang,2,'wrong token..'); + + if ($this->m['UsersModel']->isBlocked($this->s['registered']->status['id_user'])) $this->redirect('my/home/'.$this->lang,2,'your account has been blocked..'); + + if ($this->m['HardwareModel']->isDeleted($clean['id_hard'])) $this->redirect($this->controller.'/catalogue/'.$this->lang,2,'this device page has been deleted..'); + + $this->m['TalkModel']->values['created_by'] = $this->s['registered']->status['id_user']; + $this->m['TalkModel']->values['id_hard'] = $clean['id_hard']; + + $this->m['TalkModel']->updateTable('insert'); + } + } + + //if preview + if (isset($_POST['previewAction'])) + { + if ($this->s['registered']->status['status'] === 'logged') + { + if (!$this->s['registered']->checkCsrf($clean['token'])) $this->redirect($this->controller.'/catalogue/'.$this->lang,2,'wrong token..'); + + $data['preview_message'] = $this->request->post('message','','sanitizeHtml'); + $this->m['TalkModel']->result = false; + } + } + + $data['table'] = $this->m['TalkModel']->select()->where(array('id_hard'=>$clean['id_hard']))->orderBy('id_talk')->send(); + + $data['values'] = $this->m['TalkModel']->getFormValues('insert','sanitizeHtml'); + $data['notice'] = $this->m['TalkModel']->notice; + +// javascript for moderator + $data['md_javascript'] = "moderator_dialog(\"hide\",\"talk\");moderator_dialog(\"show\",\"talk\");"; + $data['go_to'] = $this->currPage."/".$this->lang."/".$clean['id_hard']; + + $this->passWhoAskedForDeletion($clean['id_hard']); + + $this->append($data); + $this->loadViewAll('talk,if_page_deleted,moderator_dialog'); + } + + //get the link to the device page from vendorid:productid code + protected function getAlreadyExixtsLink($code) + { + $hw = new HardwareModel(); + $info = $hw->getModelByCode($code); + + if ($info) + { + return $this->getViewLink($info['id_hard'],$info['model'],Hardware::getControllerFromType($info['type'])); + } + return ''; + } + + protected function getViewLink($id,$ne_name,$controller = null) + { + $contr = isset($controller) ? $controller : $this->controller; + + return "lang.'/'.$id.'/'.encodeUrl($ne_name).$this->viewStatus."'>".$ne_name.""; + } + + protected function getHistoryLink($id) + { + return "controller.'/history/'.$this->lang.'/'.$id.'/'.$this->viewStatus."'>".gtext("History").""; + } + + protected function getSpecHardLink() + { + return "controller.'/catalogue/'.$this->lang.$this->viewStatus."'>".plural($this->controller).""; + } + + protected function goToLoginForm() + { + if ($this->querySanitized) + { + $this->redirect("users/login/".$this->lang."?redirect=".$this->controller."/".$this->action.Url::createUrl($this->_queryString)); + } + else + { + $this->redirect("users/login/".$this->lang."?redirect=home/index".Url::createUrl($this->_queryString)); + } + } + +} diff --git a/Application/Controllers/HardwareController.php b/Application/Controllers/HardwareController.php new file mode 100644 index 0000000..a75c4fe --- /dev/null +++ b/Application/Controllers/HardwareController.php @@ -0,0 +1,43 @@ +. + +if (!defined('EG')) die('Direct access not allowed!'); + +class HardwareController extends BaseController +{ + + public function __construct($model, $controller, $queryString) + { + + $this->_topMenuClasses['hardware'] = " class='currentitem ui-btn-active'"; + + parent::__construct($model, $controller, $queryString); + + $data['title'] = 'hardware - '.Website::$generalName; + $this->append($data); + } + + public function catalogue($lang = 'en') + { + $this->load('left'); + $this->right(); + } + +} \ No newline at end of file diff --git a/Application/Controllers/HelpController.php b/Application/Controllers/HelpController.php new file mode 100644 index 0000000..658b547 --- /dev/null +++ b/Application/Controllers/HelpController.php @@ -0,0 +1,41 @@ +. + +if (!defined('EG')) die('Direct access not allowed!'); + +class HelpController extends WikiController +{ + + public function __construct($model, $controller, $queryString) + { + $this->_topMenuClasses['help'] = " class='currentitem'"; + + parent::__construct($model, $controller, $queryString); + + $this->_topMenuClasses['wiki'] = null; + + $data['tm'] = $this->_topMenuClasses; + + $data['title'] = 'help page - '.Website::$generalName; + + $this->append($data); + } + +} \ No newline at end of file diff --git a/Application/Controllers/HistoryController.php b/Application/Controllers/HistoryController.php new file mode 100644 index 0000000..e50b7e1 --- /dev/null +++ b/Application/Controllers/HistoryController.php @@ -0,0 +1,650 @@ +. + +if (!defined('EG')) die('Direct access not allowed!'); + +class HistoryController extends BaseController +{ + + public static $typeTable = array( + 'message' => 'message', + 'talk' => 'talk', + 'user' => 'user', + 'issue' => 'issue', + 'wiki_talk' => 'wiki talk', + 'page' => 'wiki page', + 'page_del' => 'wiki page', + 'device' => 'device page', + 'device_app' => 'device page', + 'device_cl' => 'device page', + 'issue_del' => 'issue', //registered + 'issue_ins' => 'issue', //registered + 'message_ins' => 'message', //registered + 'talk_ins' => 'talk', //registered + 'wiki_talk_ins' => 'wiki talk',//registered + 'hardware' => 'hardware', //registered + 'wiki' => 'wiki', //registered + ); + + public static $actionTable = array( + 'hide' => 'hide', + 'show' => 'show', + 'block' => 'block', + 'unblock' => 'unblock', + 'open' => 'open', + 'close' => 'close', + 'pageblock' => 'block', + 'pageunblock' => 'unblock', + 'pagehide' => 'hide', + 'pageshow' => 'show', + 'devicehide' => 'hide', + 'deviceshow' => 'show', + 'deviceapprove' => 'approve', + 'deviceclear' => 'perm deleted', + 'issuehide' => 'hide', + 'issueshow' => 'show', + 'insert' => 'insert', //registered + 'update' => 'update', //registered + ); + + protected $strings = array( + + 'hide' => array( + + 'action' => 'hide', + 'check_status' => 'no', + 'to_status' => 'yes', + 'exec_string' => 'The message has been hidden. Just reload the page', + 'error_string' => 'Error: the message is already hidden', + + ), + + 'show' => array( + + 'action' => 'show', + 'check_status' => 'yes', + 'to_status' => 'no', + 'exec_string' => 'The message is no more hidden. Just reload the page', + 'error_string' => 'Error: the message is already visible', + + ), + + 'block' => array( + + 'action' => 'block', + 'check_status' => 'no', + 'to_status' => 'yes', + 'exec_string' => 'The user has been blocked. Just reload the page', + 'error_string' => 'Error: the user is already blocked', + + ), + + 'unblock' => array( + + 'action' => 'unblock', + 'check_status' => 'yes', + 'to_status' => 'no', + 'exec_string' => 'The user is no more blocked. Just reload the page', + 'error_string' => 'Error: the user is already un-blocked', + + ), + + 'open' => array( + + 'action' => 'open', + 'check_status' => 'closed', + 'to_status' => 'opened', + 'exec_string' => 'The issue has been opened. Just reload the page', + 'error_string' => 'Error: the issue is already opened', + + ), + + 'close' => array( + + 'action' => 'close', + 'check_status' => 'opened', + 'to_status' => 'closed', + 'exec_string' => 'The issue has been closed. Just reload the page', + 'error_string' => 'Error: the issue is already closed', + + ), + + 'pageblock' => array( + + 'action' => 'pageblock', + 'check_status' => 'no', + 'to_status' => 'yes', + 'exec_string' => 'The wiki page has been blocked. Just reload the page', + 'error_string' => 'Error: the wiki page is already blocked', + + ), + + 'pageunblock' => array( + + 'action' => 'pageunblock', + 'check_status' => 'yes', + 'to_status' => 'no', + 'exec_string' => 'The wiki page is no more blocked. Just reload the page', + 'error_string' => 'Error: the wiki page is already un-blocked', + + ), + + 'pagehide' => array( + + 'action' => 'pagehide', + 'check_status' => 'no', + 'to_status' => 'yes', + 'exec_string' => 'The wiki page has been hidden. Just reload the page', + 'error_string' => 'Error: the wiki page is already hidden', + + ), + + 'pageshow' => array( + + 'action' => 'pageshow', + 'check_status' => 'yes', + 'to_status' => 'no', + 'exec_string' => 'The wiki page is no more hidden. Just reload the page', + 'error_string' => 'Error: the wiki page is already visible', + + ), + + 'issuehide' => array( + + 'action' => 'issuehide', + 'check_status' => 'no', + 'to_status' => 'yes', + 'exec_string' => 'The issue has been hidden. Just reload the page', + 'error_string' => 'Error: the issue is already hidden', + + ), + + 'issueshow' => array( + + 'action' => 'issueshow', + 'check_status' => 'yes', + 'to_status' => 'no', + 'exec_string' => 'The issue is no more hidden. Just reload the page', + 'error_string' => 'Error: the issue is already visible', + + ), + + 'devicehide' => array( + + 'action' => 'devicehide', + 'check_status' => 'no', + 'to_status' => 'yes', + 'exec_string' => 'The device page has been hidden. Just reload the page', + 'error_string' => 'Error: the device page is already hidden', + 'allowed_only_if' => array('cleared'=>'no'), + + ), + + 'deviceshow' => array( + + 'action' => 'deviceshow', + 'check_status' => 'yes', + 'to_status' => 'no', + 'exec_string' => 'The device page is no more hidden. Just reload the page', + 'error_string' => 'Error: the device page is already visible', + 'allowed_only_if' => array('cleared'=>'no'), + + ), + + 'deviceapprove' => array( + + 'action' => 'deviceapprove', + 'check_status' => 'no', + 'to_status' => 'yes', + 'exec_string' => 'The device page has been approved. Just reload the page', + 'error_string' => 'Error: the device page is already approved', + 'allowed_only_if' => array('cleared'=>'no'), + + ), + + 'deviceclear' => array( + + 'action' => 'deviceclear', + 'check_status' => 'no', + 'to_status' => 'yes', + 'exec_string' => 'The device page has been permanently deleted. Just reload the page', + 'error_string' => 'Error: the device page has already been permanently deleted', + 'method' => 'permanentlyDelete', + + ), + ); + + protected $types = array( + + 'message' => array( + + 'clean_type' => 'message', + 'model_name' => 'MessagesModel', + 'id_name' => 'id_mes', + 'field_name' => 'deleted', + 'actions' => array('hide','show'), + 'group' => 'moderator', + + ), + + 'talk' => array( + + 'clean_type' => 'talk', + 'model_name' => 'TalkModel', + 'id_name' => 'id_talk', + 'field_name' => 'deleted', + 'actions' => array('hide','show'), + 'group' => 'moderator', + + ), + + 'user' => array( + + 'clean_type' => 'user', + 'model_name' => 'UsersModel', + 'id_name' => 'id_user', + 'field_name' => 'blocked', + 'actions' => array('block','unblock'), + 'group' => 'admin', + + ), + + 'issue' => array( + + 'clean_type' => 'issue', + 'model_name' => 'IssuesModel', + 'id_name' => 'id_issue', + 'field_name' => 'status', + 'actions' => array('open','close'), + 'group' => 'moderator', + 'types_to_show' => 'issue,issue_del', + + ), + + 'wiki_talk' => array( + + 'clean_type' => 'wiki_talk', + 'model_name' => 'WikitalkModel', + 'id_name' => 'id_talk', + 'field_name' => 'deleted', + 'actions' => array('hide','show'), + 'group' => 'moderator', + + ), + + //page blocked or not + 'page' => array( + + 'clean_type' => 'page', + 'model_name' => 'WikiModel', + 'id_name' => 'id_wiki', + 'field_name' => 'blocked', + 'actions' => array('pageblock','pageunblock'), + 'group' => 'admin', + 'types_to_show' => 'page,page_del', + + ), + + //page hidden or not + 'page_del' => array( + + 'clean_type' => 'page_del', + 'model_name' => 'WikiModel', + 'id_name' => 'id_wiki', + 'field_name' => '-deleted', + 'actions' => array('pagehide','pageshow'), + 'group' => 'admin', + + ), + + //issue hidden or not + 'issue_del' => array( + + 'clean_type' => 'issue_del', + 'model_name' => 'IssuesModel', + 'id_name' => 'id_issue', + 'field_name' => 'deleted', + 'actions' => array('issuehide','issueshow'), + 'group' => 'moderator', + + ), + + //device page blocked or not + 'device' => array( + + 'clean_type' => 'device', + 'model_name' => 'HardwareModel', + 'id_name' => 'id_hard', + 'field_name' => '-deleted', + 'actions' => array('devicehide','deviceshow'), + 'group' => 'admin', + 'types_to_show' => 'device_app,device,device_cl', + + ), + + //device page approved + 'device_app' => array( + + 'clean_type' => 'device_app', + 'model_name' => 'HardwareModel', + 'id_name' => 'id_hard', + 'field_name' => 'approved', + 'actions' => array('deviceapprove'), + 'group' => 'admin', + + ), + + //device page cleared + 'device_cl' => array( + + 'clean_type' => 'device_cl', + 'model_name' => 'HardwareModel', + 'id_name' => 'id_hard', + 'field_name' => 'cleared', + 'actions' => array('deviceclear'), + 'group' => 'admin', + + ), + ); + + public function __construct($model, $controller, $queryString) + { + parent::__construct($model, $controller, $queryString); + + $this->model('HistoryModel'); + $this->model('UsersModel'); + + } + + public function hide($lang = 'en', $token = '') + { + $this->generic($lang, $token, 'hide'); + } + + public function show($lang = 'en', $token = '') + { + $this->generic($lang, $token, 'show'); + } + + public function block($lang = 'en', $token = '') + { + $this->generic($lang, $token, 'block'); + } + + public function unblock($lang = 'en', $token = '') + { + $this->generic($lang, $token, 'unblock'); + } + + public function open($lang = 'en', $token = '') + { + $this->generic($lang, $token, 'open'); + } + + public function close($lang = 'en', $token = '') + { + $this->generic($lang, $token, 'close'); + } + + public function pageblock($lang = 'en', $token = '') + { + $this->generic($lang, $token, 'pageblock'); + } + + public function pageunblock($lang = 'en', $token = '') + { + $this->generic($lang, $token, 'pageunblock'); + } + + public function pagehide($lang = 'en', $token = '') + { + $this->generic($lang, $token, 'pagehide'); + } + + public function pageshow($lang = 'en', $token = '') + { + $this->generic($lang, $token, 'pageshow'); + } + + public function devicehide($lang = 'en', $token = '') + { + $this->generic($lang, $token, 'devicehide'); + } + + public function deviceshow($lang = 'en', $token = '') + { + $this->generic($lang, $token, 'deviceshow'); + } + + public function deviceapprove($lang = 'en', $token = '') + { + $this->generic($lang, $token, 'deviceapprove'); + } + + public function deviceclear($lang = 'en', $token = '') + { + $this->generic($lang, $token, 'deviceclear'); + } + + public function issuehide($lang = 'en', $token = '') + { + $this->generic($lang, $token, 'issuehide'); + } + + public function issueshow($lang = 'en', $token = '') + { + $this->generic($lang, $token, 'issueshow'); + } + + protected function generic($lang = 'en', $token = '', $action = 'hide') + { + header('Content-type: text/html; charset=UTF-8'); + + $this->shift(2); + + $this->clean(); + + $clean['token'] = sanitizeAlphanum($token); + + if ($this->s['registered']->status['status'] === 'logged') + { + if (!$this->s['registered']->checkCsrf($clean['token'])) die("wrong token"); + + if ($this->m['UsersModel']->isBlocked($this->s['registered']->status['id_user'])) die("your account has been blocked"); + + $clean['id_user'] = (int)$this->s['registered']->status['id_user']; + $clean['id'] = $this->request->post('id',0,'forceInt'); + $type = $this->request->post('type','','sanitizeAll'); + $message = $this->request->post('message',''); + + $modelName = 'error'; + + if (array_key_exists($type,$this->types)) + { + if (in_array($action,$this->types[$type]['actions'])) + { + $clean['group'] = $this->types[$type]['group']; + if (in_array($clean['group'],$this->s['registered']->status['groups'])) + { + $modelName = $this->types[$type]['model_name']; + $clean['type'] = $this->types[$type]['clean_type']; + $clean['id_name'] = $this->types[$type]['id_name']; + $clean['field_name'] = $this->types[$type]['field_name']; + + //load the right model + $this->model($modelName); + $model = $this->m[$modelName]; + + $model->select()->where(array($clean['id_name'] => $clean['id'],$clean['field_name'] => $this->strings[$action]['check_status'])); + + if (isset($this->strings[$action]['allowed_only_if']) and is_array($this->strings[$action]['allowed_only_if'])) + { + $model->aWhere($this->strings[$action]['allowed_only_if']); + } + + $count = $model->rowNumber(); + + if ($count > 0) + { + if (eg_strlen($message) < 500) + { + //drop the - char if present + $clean['field_name'] = str_replace('-',null,$clean['field_name']); + + //hide the message + $model->values = array($clean['field_name'] => $this->strings[$action]['to_status']); + + if (isset($this->strings[$action]['method'])) + { + call_user_func(array($model, $this->strings[$action]['method']),$clean['id']); + } + else + { + $model->pUpdate($clean['id']); + } + + if ($model->queryResult) + { + $this->m['HistoryModel']->setFields('id:forceInt,type,message','sanitizeAll'); + $this->m['HistoryModel']->values['created_by'] = $clean['id_user']; + $this->m['HistoryModel']->values['gr'] = $clean['group']; + $this->m['HistoryModel']->values['action'] = $this->strings[$action]['action']; + $this->m['HistoryModel']->updateTable('insert'); + + echo $this->strings[$action]['exec_string']; + } + else + { + echo "error: one error occurred, please retry later"; + } + } + else + { + echo "error: the message has too many characters or wrong type"; + } + } + else + { + echo $this->strings[$action]['error_string']; + } + } + } + } + } + } + + public function viewall($lang = 'en', $type = 'message', $id = 0) + { + header('Content-type: text/html; charset=UTF-8'); + + $this->shift(3); + + $this->clean(); + + if ($this->s['registered']->status['status'] === 'logged') + { + if (!$this->m['UsersModel']->isBlocked($this->s['registered']->status['id_user'])) + { + $clean['id'] = (int)$id; + if (array_key_exists($type,$this->types)) + { + $clean['group'] = $this->types[$type]['group']; + if (in_array($clean['group'],$this->s['registered']->status['groups'])) + { + $clean['type'] = $this->types[$type]['clean_type']; + $clean['typeInWhereClause'] = "'".$clean['type']."'"; + + if (array_key_exists('types_to_show',$this->types[$type])) + { + $clean['typeInWhereClause'] = "'".implode("','",explode(',',$this->types[$type]['types_to_show']))."'"; + } + + switch ($clean['type']) + { + case 'user': + $data['object'] = 'user'; + $data['box_class'] = 'details_of_actions_inner_user'; + break; + case 'page': + $data['object'] = 'wiki page'; + $data['box_class'] = 'details_of_actions_inner_user'; + break; + case 'device': + $data['object'] = 'device page'; + $data['box_class'] = 'details_of_actions_inner_user'; + break; + case 'device_app': + $data['object'] = 'device page'; + $data['box_class'] = 'details_of_actions_inner_user'; + break; + case 'page_del': + $data['object'] = 'wiki page'; + $data['box_class'] = 'details_of_actions_inner_user'; + break; + case 'issue': + $data['object'] = 'issue'; + $data['box_class'] = 'details_of_actions_inner_user'; + break; + default: + $data['object'] = 'message'; + $data['box_class'] = 'details_of_actions_inner'; + break; + } + + $data['res'] = $this->m['HistoryModel'] + ->select() + ->where( + array + ( + 'id'=>$clean['id'], + 'type'=>"in(".$clean['typeInWhereClause'].")", + 'gr'=>$clean['group']) + ) + ->send(); +// echo $this->m['HistoryModel']->getQuery(); + + $data['md_action'] = array( + 'hide' => 'hidden', + 'show' => 'restored', + 'block' => 'blocked', + 'unblock' => 'un-blocked', + 'open' => 'opened again', + 'close' => 'closed', + 'pageblock' => 'blocked', + 'pageunblock' => 'un-blocked', + 'pagehide' => 'hidden', + 'pageshow' => 'restored', + 'devicehide' => 'hidden', + 'deviceshow' => 'restored', + 'deviceapprove' => 'approved', + 'deviceclear' => 'permanently deleted', + 'issuehide' => 'hidden', + 'issueshow' => 'restored', + ); + + $this->append($data); + $this->load('viewall'); + } + } + } + } + } + +} \ No newline at end of file diff --git a/Application/Controllers/HomeController.php b/Application/Controllers/HomeController.php new file mode 100644 index 0000000..3c47547 --- /dev/null +++ b/Application/Controllers/HomeController.php @@ -0,0 +1,47 @@ +. + +if (!defined('EG')) die('Direct access not allowed!'); + +class HomeController extends BaseController +{ + + public function __construct($model, $controller, $queryString) + { + + $this->_topMenuClasses['home'] = " class='currentitem ui-btn-active'"; + + parent::__construct($model, $controller, $queryString); + + $data['title'] = 'home - '.Website::$generalName; + $this->append($data); + } + + public function index($lang = 'en') + { +// get the news container + $data['htmlNewsBox'] = $this->getModule(array('top_news')); + + $this->append($data); + $this->cleverLoad('left'); + $this->right($lang); + } + +} \ No newline at end of file diff --git a/Application/Controllers/HostcontrollersController.php b/Application/Controllers/HostcontrollersController.php new file mode 100644 index 0000000..3655aa1 --- /dev/null +++ b/Application/Controllers/HostcontrollersController.php @@ -0,0 +1,137 @@ +. + +if (!defined('EG')) die('Direct access not allowed!'); + +class HostcontrollersController extends GenericController +{ + + public function __construct($model, $controller, $queryString) + { + + $worksOptions = Hostcontrollers::$select; + $worksField = 'compatibility'; + $interfaceOptions = Hostcontrollers::$interface; + + parent::__construct($model, $controller, $queryString); + + //load the model + $this->model('HardwareModel'); + $this->model('RevisionsModel'); + $this->model('HostcontrollersModel'); + $this->model('TalkModel'); + + $this->mod = $this->m['HostcontrollersModel']; + + $this->m['HardwareModel']->id_user = $this->s['registered']->status['id_user']; + $this->m['HardwareModel']->type = 'host-controller'; + + $this->m['HardwareModel']->setConditions($worksOptions,$worksField,$interfaceOptions); + + $this->m['HardwareModel']->strongConditions['insert']["+++++checkIsStrings|".Hostcontrollers::subtypeList()] = "subtype"; + + $this->m['HardwareModel']->strongConditions['update'] = $this->m['HardwareModel']->strongConditions['insert']; + + $this->m['HardwareModel']->setFields('model,kernel,description,distribution,comm_year,compatibility,pci_id,interface,driver,subtype,other_names','sanitizeAll'); + + $argKeys = array( + 'page:forceNat' => 1, + 'history_page:forceNat' => 1, + 'vendor:sanitizeString' => 'undef', + 'comm_year:sanitizeString' => 'undef', + 'compatibility:sanitizeString' => 'undef', + 'subtype:sanitizeString' => 'undef', + 'sort-by:sanitizeString' => 'compatibility-desc', + 'search_string:sanitizeString' => 'undef' + ); + + $this->setArgKeys($argKeys); + + $data['title'] = 'Host controller'; + + $data['intefaceOptions'] = $interfaceOptions; + $data['worksOptions'] = $worksOptions; + $data['worksField'] = $worksField; + + $data['notFoundString'] = "No Host Controller found"; + + $data['subtypeHelpLabel'] = "PCMCIA, USB, Firewire, HECI"; + + $this->append($data); + } + + public function catalogue($lang = 'en') + { + $this->shift(1); + + $whereArray = array( + 'type' => $this->mod->type, + 'vendor' => $this->viewArgs['vendor'], + 'comm_year' => $this->viewArgs['comm_year'], + 'compatibility' => $this->viewArgs['compatibility'], + 'subtype' => $this->viewArgs['subtype'], + ); + + $this->mod->setWhereQueryClause($whereArray); + + parent::catalogue($lang); + } + + public function view($lang = 'en', $id = 0, $name = null) + { + parent::view($lang, $id, $name); + } + + public function history($lang = 'en', $id = 0) + { + parent::history($lang, $id); + } + + public function revision($lang = 'en', $id_rev = 0) + { + parent::revision($lang, $id_rev); + } + + public function insert($lang = 'en', $token = '') + { + parent::insert($lang, $token); + } + + public function update($lang = 'en', $token = '') + { + parent::update($lang, $token); + } + + public function differences($lang = 'en', $id_hard = 0, $id_rev = 0) + { + parent::differences($lang, $id_hard, $id_rev); + } + + public function climb($lang = 'en', $id_rev = 0, $token = '') + { + parent::climb($lang, $id_rev, $token); + } + + public function talk($lang = 'en', $id_hard = 0, $token = '') + { + parent::talk($lang, $id_hard, $token); + } + +} diff --git a/Application/Controllers/ImageController.php b/Application/Controllers/ImageController.php new file mode 100644 index 0000000..6774b4a --- /dev/null +++ b/Application/Controllers/ImageController.php @@ -0,0 +1,41 @@ +. + +if (!defined('EG')) die('Direct access not allowed!'); + +class ImageController extends Controller { + + public function captcha() + { + session_start(); + + $params = array( + 'fontPath' => ROOT.'/External/Fonts/FreeFont/FreeMono.ttf', + 'boxHeight' => 100, + 'boxWidth' => 200, + 'undulation'=> true, + 'align' => false + ); + + $captcha = new Image_Gd_Captcha($params); + $captcha->render(); + } + +} \ No newline at end of file diff --git a/Application/Controllers/IssuesController.php b/Application/Controllers/IssuesController.php new file mode 100644 index 0000000..6f7b74b --- /dev/null +++ b/Application/Controllers/IssuesController.php @@ -0,0 +1,203 @@ +. + +if (!defined('EG')) die('Direct access not allowed!'); + +class IssuesController extends BaseController +{ + + public function __construct($model, $controller, $queryString) + { + + $this->_topMenuClasses['issues'] = " class='currentitem'"; + + parent::__construct($model, $controller, $queryString); + + $this->model('IssuesModel'); + $this->model('MessagesModel'); + $this->model('UsersModel'); + + $argKeys = array( + 'page:forceNat' => 1, + 'token:sanitizeAlphanum' => $this->token, + ); + + $this->setArgKeys($argKeys); + + $data['title'] = 'issues - '.Website::$generalName; + $this->append($data); + } + + public function viewall($lang = 'en') + { + $this->shift(1); + + $this->m['IssuesModel']->setFields('title,topic,priority,message','sanitizeAll'); + + $data['preview_message'] = null; + + if (isset($_POST['insertAction'])) + { + if ($this->s['registered']->status['status'] === 'logged') + { + if (!$this->s['registered']->checkCsrf($this->viewArgs['token'])) $this->redirect('home/index/'.$this->lang,2,'wrong token..'); + + if ($this->m['UsersModel']->isBlocked($this->s['registered']->status['id_user'])) $this->redirect('my/home/'.$this->lang,2,'your account has been blocked..'); + + //set the page to 1 in the viewStatus + $this->viewArgs['page'] = 1; + $this->buildStatus(); + + $clean['id_user'] = (int)$this->s['registered']->status['id_user']; + + $this->m['IssuesModel']->values['created_by'] = $clean['id_user']; + $this->m['IssuesModel']->values['status'] = 'opened'; + $this->m['IssuesModel']->values['update_date'] = date('Y-m-d H:i:s'); + $this->m['IssuesModel']->updateTable('insert'); + + } + } + + //if preview + if (isset($_POST['previewAction'])) + { + if ($this->s['registered']->status['status'] === 'logged') + { + if (!$this->s['registered']->checkCsrf($this->viewArgs['token'])) $this->redirect('home/index/'.$this->lang,2,'wrong token..'); + + $data['preview_message'] = $this->request->post('message','','sanitizeHtml'); + $this->m['IssuesModel']->result = false; + } + } + + $data['notice'] = $this->m['IssuesModel']->notice; + + $this->viewArgs['token'] = $this->token; + $this->buildStatus(); + + $this->m['IssuesModel']->setForm('issues/viewall/'.$this->lang.$this->viewStatus."#form",array('previewAction'=>'preview','insertAction'=>'submit')); + + $values = $this->m['IssuesModel']->getFormValues('insert','sanitizeHtml'); + + $data['form'] = $this->m['IssuesModel']->form->render($values); + + //load the Pages helper + $this->helper('Pages',$this->controller.'/viewall/'.$this->lang,'page'); + //get the number of records + $this->m['IssuesModel']->from('issues')->left('messages')->using('id_issue')->groupBy('issues.id_issue')->orderBy('issues.update_date desc'); + + if ($this->islogged === "no") + { + $this->m['IssuesModel']->where(array("n!issues.deleted"=>"no")); + } + + $recordNumber = $this->m['IssuesModel']->rowNumber(); + $page = $this->viewArgs['page']; + //set the limit clause + $this->m['IssuesModel']->limit = $this->h['Pages']->getLimit($page,$recordNumber,30); + $data['table'] = $this->m['IssuesModel']->select('issues.*,messages.message,count(*) as numb_mess')->send(); + + $data['pageList'] = $this->h['Pages']->render($page-4,10); + + $this->append($data); + $this->load('viewall'); + $this->right(); + } + + public function view($lang = 'en', $id_issue = 0) + { + $this->m['MessagesModel']->setFields('message','sanitizeAll'); + + $this->shift(2); + + $clean['id_issue'] = (int)$id_issue; + $data['id_issue'] = $clean['id_issue']; + $data['preview_message'] = null; + + //if submit + if (isset($_POST['insertAction'])) + { + if ($this->s['registered']->status['status'] === 'logged') + { + if (!$this->s['registered']->checkCsrf($this->viewArgs['token'])) $this->redirect('home/index/'.$this->lang,2,'wrong token..'); + + if ($this->m['UsersModel']->isBlocked($this->s['registered']->status['id_user'])) $this->redirect('my/home/'.$this->lang,2,'your account has been blocked..'); + + $clean['id_user'] = (int)$this->s['registered']->status['id_user']; + + $this->m['MessagesModel']->values['created_by'] = $clean['id_user']; + $this->m['MessagesModel']->values['id_issue'] = $clean['id_issue']; + $this->m['MessagesModel']->updateTable('insert'); + + if ($this->m['MessagesModel']->queryResult) + { + $this->m['IssuesModel']->values = array('update_date' => date('Y-m-d H:i:s')); + $this->m['IssuesModel']->update($clean['id_issue']); + + $domainName = rtrim(Url::getRoot(),"/"); + header('Refresh: 0;url='.$domainName.$_SERVER['REQUEST_URI']); + exit; + } + } + } + + //if preview + if (isset($_POST['previewAction'])) + { + if ($this->s['registered']->status['status'] === 'logged') + { + if (!$this->s['registered']->checkCsrf($this->viewArgs['token'])) $this->redirect('home/index/'.$this->lang,2,'wrong token..'); + + $data['preview_message'] = $this->request->post('message','','sanitizeHtml'); + $this->m['MessagesModel']->result = false; + } + } + + $data['notice'] = $this->m['MessagesModel']->notice; + + $this->viewArgs['token'] = $this->token; + $this->buildStatus(); + + //create the form + $this->m['MessagesModel']->setForm('issues/view/'.$this->lang."/".$clean['id_issue'].$this->viewStatus."#form",array('previewAction'=>'preview','insertAction'=>'submit')); + + $values = $this->m['MessagesModel']->getFormValues('insert','sanitizeHtml'); + + $data['form'] = $this->m['MessagesModel']->form->render($values); + + //retrieve the values from the table + $data['table'] = $this->m['IssuesModel']->select()->where(array('id_issue'=>$clean['id_issue']))->send(); + +// javascript for moderator + $data['md_javascript'] = "moderator_dialog(\"hide\",\"message\");moderator_dialog(\"show\",\"message\");moderator_dialog(\"open\",\"issue\");moderator_dialog(\"close\",\"issue\");moderator_dialog(\"issuehide\",\"issue_del\");moderator_dialog(\"issueshow\",\"issue_del\");"; + $data['go_to'] = $this->currPage."/".$this->lang."/".$clean['id_issue']; + + if (count($data['table']) > 0) + { + $data['messages'] = $this->m['MessagesModel']->select()->where(array('id_issue'=>$clean['id_issue']))->send(); + + $this->append($data); + $this->load('view'); + $this->load('moderator_dialog'); + $this->right(); + } + } + +} diff --git a/Application/Controllers/MeetController.php b/Application/Controllers/MeetController.php new file mode 100644 index 0000000..808b951 --- /dev/null +++ b/Application/Controllers/MeetController.php @@ -0,0 +1,338 @@ +. + +if (!defined('EG')) die('Direct access not allowed!'); + +class MeetController extends BaseController +{ + private $whereArray = array( + 'has_confirmed' => 0, + 'deleted' => 'no', + ); + + public function __construct($model, $controller, $queryString) + { + parent::__construct($model, $controller, $queryString); + + $this->model('ProfileModel'); + $this->model('HardwareModel'); + $this->model('IssuesModel'); + $this->model('MessagesModel'); + $this->model('TalkModel'); + $this->model('WikiModel'); + $this->model('WikitalkModel'); + + $argKeys = array( + 'page:forceNat' => 1, + ); + + $this->setArgKeys($argKeys); + + $data['title'] = 'meet - '.Website::$generalName; + $this->append($data); + } + + //public page of the user + public function user($lang = 'en', $user = '') + { + $clean['user'] = ctype_alnum($user) ? sanitizeAll($user) : ''; + $data['title'] = "meet ".$clean['user']." - ".Website::$generalName; + + $this->shift(2); + + if ($this->m['UsersModel']->userExists($clean['user'])) + { + $clean['id_user'] = (int)$this->m['UsersModel']->getUserId($clean['user']); + $data['meet_id_user'] = $clean['id_user']; + + $data['isBlocked'] = $this->m['UsersModel']->isBlocked($clean['id_user']); + + $this->whereArray['username'] = $clean['user']; + + $data['table'] = $this->m['ProfileModel']->select('regusers.e_mail,regusers.username,profile.*')->from('regusers inner join profile')->on('regusers.id_user = profile.created_by')->where($this->whereArray)->send(); + + $data['meet_username'] = $clean['user']; + +// javascript for moderator + $data['md_javascript'] = "moderator_dialog(\"block\",\"user\");moderator_dialog(\"unblock\",\"user\");"; + + $this->append($data); + $this->load('meet'); + $this->load('moderator_dialog'); + $this->right(); + } + + } + + //contributions menu + public function contributions($lang = 'en', $user = '') + { + $clean['user'] = ctype_alnum($user) ? sanitizeAll($user) : ''; + $data['title'] = $clean['user']." contributions - ".Website::$generalName; + + $this->shift(2); + + if ($this->m['UsersModel']->userExists($clean['user'])) + { + $clean['id_user'] = (int)$this->m['UsersModel']->getUserId($clean['user']); + + $this->whereArray['username'] = $clean['user']; + + $data['meet_username'] = $clean['user']; + + $hardNumb = $this->m['HardwareModel']->select()->where($this->whereArray)->rowNumber(); + + $issuesNumb = $this->m['IssuesModel']->select('id_issue')->where(array('created_by'=>$clean['id_user'],'deleted'=>'no'))->rowNumber(); + + $messNumb = $this->m['MessagesModel']->select('id_mes,messages.id_issue,messages.creation_date')->where(array('created_by'=>$clean['id_user'],'deleted'=>'no'))->rowNumber(); + + $talkNumb = $this->m['TalkModel']->where(array('created_by'=>$clean['id_user'],'deleted'=>'no'))->rowNumber(); + + $wikiNumb = $this->m['WikiModel']->where($this->whereArray)->rowNumber(); + + $wikiTalkNumb = $this->m['WikitalkModel']->where(array('created_by'=>$clean['id_user'],'deleted'=>'no'))->rowNumber(); + + $data['hasHardware'] = $hardNumb > 0 ? true : false; + $data['hasIssues'] = $issuesNumb > 0 ? true : false; + $data['hasMessages'] = $messNumb > 0 ? true : false; + $data['hasTalk'] = $talkNumb > 0 ? true : false; + $data['hasWiki'] = $wikiNumb > 0 ? true : false; + $data['hasWikiTalk'] = $wikiTalkNumb > 0 ? true : false; + + $this->append($data); + $this->load('contributions'); + $this->right(); + } + + } + + //hardware contributions + public function hardware($lang = 'en', $user = '') + { + $clean['user'] = ctype_alnum($user) ? sanitizeAll($user) : ''; + $data['title'] = "hardware contributions - ".Website::$generalName; + + $this->shift(2); + + if ($this->m['UsersModel']->userExists($clean['user'])) + { + $this->whereArray['username'] = $clean['user']; + + $data['table'] = $this->m['HardwareModel']->select('hardware.*,regusers.username')->where($this->whereArray)->send(); + + $data['meet_username'] = $clean['user']; + + $data['tree_last_string'] = "hardware contributions"; + $data['page_explanation_title'] = "hardware contributions of"; + + $this->append($data); + $this->load('list_template'); + $this->right(); + } + + } + + //issues opened + public function issues($lang = 'en', $user = '') + { + $clean['user'] = ctype_alnum($user) ? sanitizeAll($user) : ''; + $data['title'] = "issues submitted - ".Website::$generalName; + + $this->shift(2); + + if ($this->m['UsersModel']->userExists($clean['user'])) + { + //load the Pages helper + $this->helper('Pages','meet/issues/'.$this->lang.'/'.$clean['user'],'page'); + + $clean['id_user'] = (int)$this->m['UsersModel']->getUserId($clean['user']); + + $this->m['IssuesModel']->select('id_issue')->where(array('created_by'=>$clean['id_user'],'deleted'=>'no'))->orderBy('id_issue desc'); + + $recordNumber = $this->m['IssuesModel']->rowNumber(); + $page = $this->viewArgs['page']; + + $this->m['IssuesModel']->limit = $this->h['Pages']->getLimit($page,$recordNumber,20); + + $data['table'] = $this->m['IssuesModel']->select('id_issue,creation_date,title')->send(); + + $data['pageList'] = $this->h['Pages']->render($page-3,7); + + $data['meet_username'] = $clean['user']; + + $data['tree_last_string'] = "issues opened"; + $data['page_explanation_title'] = "issues opened by"; + + $this->append($data); + $this->load('list_template'); + $this->right(); + } + + } + + //messages submitted + public function messages($lang = 'en', $user = '') + { + $clean['user'] = ctype_alnum($user) ? sanitizeAll($user) : ''; + $data['title'] = "messages submitted - ".Website::$generalName; + + $this->shift(2); + + if ($this->m['UsersModel']->userExists($clean['user'])) + { + //load the Pages helper + $this->helper('Pages','meet/messages/'.$this->lang.'/'.$clean['user'],'page'); + + $clean['id_user'] = (int)$this->m['UsersModel']->getUserId($clean['user']); + + $this->m['MessagesModel']->from('messages inner join issues')->on('messages.id_issue=issues.id_issue')->select('id_mes,messages.id_issue,messages.creation_date,title')->where(array('created_by'=>$clean['id_user'],'deleted'=>'no'))->orderBy('id_mes desc'); + + $recordNumber = $this->m['MessagesModel']->rowNumber(); + $page = $this->viewArgs['page']; + + $this->m['MessagesModel']->limit = $this->h['Pages']->getLimit($page,$recordNumber,20); + + $data['table'] = $this->m['MessagesModel']->send(); + + $data['meet_username'] = $clean['user']; + + $data['tree_last_string'] = "messages submitted"; + $data['page_explanation_title'] = "messages submitted by"; + + $data['pageList'] = $this->h['Pages']->render($page-3,7); + + $this->append($data); + $this->load('list_template'); + $this->right(); + } + } + + //messages in the talk page of the devices + public function talk($lang = 'en', $user = '') + { + $clean['user'] = ctype_alnum($user) ? sanitizeAll($user) : ''; + $data['title'] = "talk messages submitted - ".Website::$generalName; + + $this->shift(2); + + if ($this->m['UsersModel']->userExists($clean['user'])) + { + //load the Pages helper + $this->helper('Pages','meet/talk/'.$this->lang.'/'.$clean['user'],'page'); + + $clean['id_user'] = (int)$this->m['UsersModel']->getUserId($clean['user']); + + $this->m['TalkModel']->inner('hardware')->using('id_hard')->select('talk.*,hardware.*')->where(array('created_by'=>$clean['id_user'],'deleted'=>'no'))->orderBy('id_talk desc'); + + $recordNumber = $this->m['TalkModel']->rowNumber(); + $page = $this->viewArgs['page']; + + $this->m['TalkModel']->limit = $this->h['Pages']->getLimit($page,$recordNumber,20); + + $data['table'] = $this->m['TalkModel']->send(); + + $data['meet_username'] = $clean['user']; + + $data['tree_last_string'] = "talk messages (hardware pages)"; + $data['page_explanation_title'] = "talk messages (hardware pages) submitted by"; + + $data['pageList'] = $this->h['Pages']->render($page-3,7); + + $this->append($data); + $this->load('list_template'); + $this->right(); + } + } + + //hardware contributions + public function wiki($lang = 'en', $user = '') + { + $clean['user'] = ctype_alnum($user) ? sanitizeAll($user) : ''; + $data['title'] = "wiki contributions - ".Website::$generalName; + + $this->shift(2); + + if ($this->m['UsersModel']->userExists($clean['user'])) + { + //load the Pages helper + $this->helper('Pages','meet/wiki/'.$this->lang.'/'.$clean['user'],'page'); + + $this->whereArray['username'] = $clean['user']; + + $data['table'] = $this->m['WikiModel']->select('wiki.*,regusers.username')->where($this->whereArray)->orderBy('wiki.id_wiki desc'); + + $recordNumber = $this->m['WikiModel']->rowNumber(); + $page = $this->viewArgs['page']; + + $this->m['WikiModel']->limit = $this->h['Pages']->getLimit($page,$recordNumber,30); + + $data['table'] = $this->m['WikiModel']->send(); + + $data['meet_username'] = $clean['user']; + + $data['tree_last_string'] = "wiki contributions"; + $data['page_explanation_title'] = "wiki contributions of"; + + $data['pageList'] = $this->h['Pages']->render($page-5,11); + + $this->append($data); + $this->load('list_template'); + $this->right(); + } + + } + + //messages in the talk page of the wiki pages + public function wikitalk($lang = 'en', $user = '') + { + $clean['user'] = ctype_alnum($user) ? sanitizeAll($user) : ''; + $data['title'] = "talk messages submitted - ".Website::$generalName; + + $this->shift(2); + + if ($this->m['UsersModel']->userExists($clean['user'])) + { + //load the Pages helper + $this->helper('Pages','meet/wikitalk/'.$this->lang.'/'.$clean['user'],'page'); + + $clean['id_user'] = (int)$this->m['UsersModel']->getUserId($clean['user']); + + $this->m['WikitalkModel']->where(array('created_by'=>$clean['id_user'],'deleted'=>'no'))->orderBy('id_talk desc'); + + $recordNumber = $this->m['WikitalkModel']->rowNumber(); + $page = $this->viewArgs['page']; + + $this->m['WikitalkModel']->limit = $this->h['Pages']->getLimit($page,$recordNumber,20); + + $data['table'] = $this->m['WikitalkModel']->send(); + + $data['meet_username'] = $clean['user']; + + $data['tree_last_string'] = "talk messages (wiki pages)"; + $data['page_explanation_title'] = "talk messages (wiki pages) submitted by"; + + $data['pageList'] = $this->h['Pages']->render($page-3,7); + + $this->append($data); + $this->load('list_template'); + $this->right(); + } + } +} \ No newline at end of file diff --git a/Application/Controllers/ModemsController.php b/Application/Controllers/ModemsController.php new file mode 100644 index 0000000..2b308b6 --- /dev/null +++ b/Application/Controllers/ModemsController.php @@ -0,0 +1,131 @@ +. + +if (!defined('EG')) die('Direct access not allowed!'); + +class ModemsController extends GenericController +{ + + public function __construct($model, $controller, $queryString) + { + + $worksOptions = Modems::$select; + $worksField = 'compatibility'; + $interfaceOptions = Modems::$interface; + + parent::__construct($model, $controller, $queryString); + + //load the model + $this->model('HardwareModel'); + $this->model('RevisionsModel'); + $this->model('ModemsModel'); + $this->model('TalkModel'); + + $this->mod = $this->m['ModemsModel']; + + $this->m['HardwareModel']->id_user = $this->s['registered']->status['id_user']; + $this->m['HardwareModel']->type = 'modem'; + + $this->m['HardwareModel']->setConditions($worksOptions,$worksField,$interfaceOptions); + + $this->m['HardwareModel']->setFields('model,kernel,description,distribution,comm_year,compatibility,pci_id,interface,driver,other_names','sanitizeAll'); + + $argKeys = array( + 'page:forceNat' => 1, + 'history_page:forceNat' => 1, + 'vendor:sanitizeString' => 'undef', + 'comm_year:sanitizeString' => 'undef', + 'compatibility:sanitizeString' => 'undef', + 'interface:sanitizeString' => 'undef', + 'sort-by:sanitizeString' => 'compatibility-desc', + 'search_string:sanitizeString' => 'undef' + ); + + $this->setArgKeys($argKeys); + + $data['title'] = 'Modems'; + + $data['intefaceOptions'] = $interfaceOptions; + $data['worksOptions'] = $worksOptions; + $data['worksField'] = $worksField; + + $data['notFoundString'] = "No modems found"; + + $this->append($data); + } + + public function catalogue($lang = 'en') + { + $this->shift(1); + + $whereArray = array( + 'type' => $this->mod->type, + 'vendor' => $this->viewArgs['vendor'], + 'comm_year' => $this->viewArgs['comm_year'], + 'compatibility' => $this->viewArgs['compatibility'], + 'interface' => $this->viewArgs['interface'], + ); + + $this->mod->setWhereQueryClause($whereArray); + + parent::catalogue($lang); + } + + public function view($lang = 'en', $id = 0, $name = null) + { + parent::view($lang, $id, $name); + } + + public function history($lang = 'en', $id = 0) + { + parent::history($lang, $id); + } + + public function revision($lang = 'en', $id_rev = 0) + { + parent::revision($lang, $id_rev); + } + + public function insert($lang = 'en', $token = '') + { + parent::insert($lang, $token); + } + + public function update($lang = 'en', $token = '') + { + parent::update($lang, $token); + } + + public function differences($lang = 'en', $id_hard = 0, $id_rev = 0) + { + parent::differences($lang, $id_hard, $id_rev); + } + + public function climb($lang = 'en', $id_rev = 0, $token = '') + { + parent::climb($lang, $id_rev, $token); + } + + public function talk($lang = 'en', $id_hard = 0, $token = '') + { + parent::talk($lang, $id_hard, $token); + } + +} diff --git a/Application/Controllers/MyController.php b/Application/Controllers/MyController.php new file mode 100644 index 0000000..69b8da7 --- /dev/null +++ b/Application/Controllers/MyController.php @@ -0,0 +1,214 @@ +. + +if (!defined('EG')) die('Direct access not allowed!'); + +class MyController extends BaseController +{ + + public function __construct($model, $controller, $queryString) { + parent::__construct($model, $controller, $queryString); + + $this->model('UsersModel'); + $this->model('ProfileModel'); + + $argKeys = array( + 'token:sanitizeAlphanum' => 'token' + ); + + $this->setArgKeys($argKeys); + + $data['title'] = 'my panel'; + $this->append($data); + } + + public function home($lang = 'en') + { + $this->shift(1); + + $data['title'] = 'my panel - '.Website::$generalName; + + $this->s['registered']->check(); + + $clean['id_user'] = (int)$this->s['registered']->status['id_user']; + $data['username'] = $this->m['UsersModel']->getUser($clean['id_user']); + + $data['userBlocked'] = $this->m['UsersModel']->isBlocked($clean['id_user']); + + $this->append($data); + $this->load('panel'); + $this->right($this->lang); + } + + public function password($lang = 'en') + { + $this->shift(1); + + $data['title'] = 'password - '.Website::$generalName; + + $this->s['registered']->check(); + + if (!$this->s['registered']->checkCsrf($this->viewArgs['token'])) $this->redirect($this->controller.'/home/'.$this->lang,2,'wrong token..'); + + $this->m['UsersModel']->setFields('password:sha1','none'); + + $this->m['UsersModel']->strongConditions['update'] = array('checkEqual'=>'password,confirmation'); + + $data['notice'] = null; + + $clean['id_user'] = (int)$this->s['registered']->status['id_user']; + + if (isset($_POST['updateAction'])) { + $pass = $this->s['registered']->getPassword(); + if (sha1($_POST['old']) === $pass) + { + $this->m['UsersModel']->updateTable('update',$clean['id_user']); + $data['notice'] = $this->m['UsersModel']->notice; + if ($this->m['UsersModel']->queryResult) + { + $this->s['registered']->logout(); + $this->redirect('home/index/'.$this->lang,2,'logout'); + } + } + else + { + $data['notice'] = "
The old password is wrong
\n"; + } + } + + $values = $this->m['UsersModel']->selectId($clean['id_user']); + $values['old'] = ''; + $values['confirmation'] = ''; + + $action = array('updateAction'=>'save'); + $form = new Form_Form('my/password/'.$this->lang.$this->viewStatus,$action); + $form->setEntry('old','Password'); + $form->entry['old']->labelString = 'old password:'; + $form->setEntry('password','Password'); + $form->setEntry('confirmation','Password'); + $data['form'] = $form->render($values,'old,password,confirmation'); + + $this->append($data); + + $this->load('password'); + $this->right(); + } + + public function email($lang = 'en') + { + $this->shift(1); + + $data['title'] = 'email - '.Website::$generalName; + + $this->s['registered']->check(); + + if (!$this->s['registered']->checkCsrf($this->viewArgs['token'])) $this->redirect($this->controller.'/home/'.$this->lang,2,'wrong token..'); + + $this->m['UsersModel']->setFields('e_mail','sanitizeAll'); + + $this->m['UsersModel']->strongConditions['update'] = array('checkMail'=>'e_mail'); + + $this->m['UsersModel']->databaseConditions['update'] = array('checkUniqueCompl'=>'e_mail'); + + $data['notice'] = null; + + $clean['id_user'] = (int)$this->s['registered']->status['id_user']; + + $this->m['UsersModel']->updateTable('update',$clean['id_user']); + $data['notice'] = $this->m['UsersModel']->notice; + + $values = $this->m['UsersModel']->selectId($clean['id_user']); + + $action = array('updateAction'=>'save'); + $form = new Form_Form('my/email/'.$this->lang.$this->viewStatus,$action); + $form->setEntry('e_mail','InputText'); + $form->entry['e_mail']->labelString = 'your e-mail address:'; + $data['form'] = $form->render($values,'e_mail'); + + $this->append($data); + + $this->load('email'); + $this->right(); + } + + public function profile($lang = 'en') + { + $this->shift(1); + + $data['title'] = 'profile - '.Website::$generalName; + + $this->s['registered']->check(); + + if (!$this->s['registered']->checkCsrf($this->viewArgs['token'])) $this->redirect($this->controller.'/home/'.$this->lang,2,'wrong token..'); + + $this->m['ProfileModel']->setFields('real_name,website,where_you_are,birth_date,fav_distro,projects,publish_mail,send_notification,description','sanitizeAll'); + + $clean['id_user'] = (int)$this->s['registered']->status['id_user']; + + $res = $this->m['ProfileModel']->db->select('profile','id_prof','created_by='.$clean['id_user']); + $clean['id_prof'] = (int)$res[0]['profile']['id_prof']; + + $this->m['ProfileModel']->values['update_date'] = date('Y-m-d H:i:s'); + $this->m['ProfileModel']->updateTable('update',$clean['id_prof']); + $data['notice'] = $this->m['ProfileModel']->notice; + + $values = $this->m['ProfileModel']->getFormValues('update','sanitizeHtml',$clean['id_prof']); + + $this->m['ProfileModel']->setForm('my/profile/'.$this->lang.$this->viewStatus,array('updateAction'=>'save'),'POST'); + $data['form'] = $this->m['ProfileModel']->form->render($values); + + $this->append($data); + + $this->load('profile'); + $this->right(); + } + + public function goodbye($lang = 'en') + { + $data['title'] = 'delete - '.Website::$generalName; + + session_start(); + + $this->shift(1); + + $this->s['registered']->check(); + + if (!$this->s['registered']->checkCsrf($this->viewArgs['token'])) $this->redirect($this->controller.'/home/'.$this->lang,2,'wrong token..'); + + $clean['id_user'] = (int)$this->s['registered']->status['id_user']; + + if (isset($_POST['closeAction'])) + { + $this->s['registered']->logout(); + $this->m['UsersModel']->close($clean['id_user']); + + if ($this->m['UsersModel']->queryResult) + { + $this->redirect('users/notice/'.$this->lang); + } + + } + + $this->append($data); + $this->load('goodbye'); + $this->right(); + } + +} \ No newline at end of file diff --git a/Application/Controllers/NewsController.php b/Application/Controllers/NewsController.php new file mode 100644 index 0000000..1d500c9 --- /dev/null +++ b/Application/Controllers/NewsController.php @@ -0,0 +1,67 @@ +. + +if (!defined('EG')) die('Direct access not allowed!'); + +class NewsController extends BaseController +{ + + public function __construct($model, $controller, $queryString) + { + + $this->_topMenuClasses['news'] = " class='currentitem'"; + + parent::__construct($model, $controller, $queryString); + + $this->model('NewsModel'); + + $data['title'] = 'news - '.Website::$generalName; + $this->append($data); + } + + public function index($lang = 'en') + { + $argKeys = array( + 'page:forceNat' => 1, + ); + + $this->setArgKeys($argKeys); + + $this->shift(1); + + $this->helper('Pages',$this->controller.'/index/'.$this->lang,'page'); + $this->h['Pages']->nextString = 'older news'; + $this->h['Pages']->previousString = 'latest news'; + $page = $this->viewArgs['page']; + $recordNumber = $this->m['NewsModel']->rowNumber(); + $data['recordNumber'] = $recordNumber; + + //set the limit clause + $limit = $this->h['Pages']->getLimit($page,$recordNumber,10); + + $data['table'] = $this->m['NewsModel']->select()->limit($limit)->send(); + $data['pageList'] = $this->h['Pages']->render($page,0); + + $this->append($data); + $this->load('index'); + $this->right($lang); + } + +} \ No newline at end of file diff --git a/Application/Controllers/NotebooksController.php b/Application/Controllers/NotebooksController.php new file mode 100644 index 0000000..1daf894 --- /dev/null +++ b/Application/Controllers/NotebooksController.php @@ -0,0 +1,159 @@ +. + +if (!defined('EG')) die('Direct access not allowed!'); + +class NotebooksController extends GenericController +{ + + public function __construct($model, $controller, $queryString) + { + + parent::__construct($model, $controller, $queryString); + + //load the model + $this->model('HardwareModel'); + $this->model('RevisionsModel'); + $this->model('NotebooksModel'); + $this->model('TalkModel'); + + $this->mod = $this->m['NotebooksModel']; + + $this->m['HardwareModel']->id_user = $this->s['registered']->status['id_user']; + $this->m['HardwareModel']->type = 'notebook'; + + //hardware conditions + $this->m['HardwareModel']->strongConditions['update'] = array( + "checkIsStrings|".Notebooks::vendorsList() => "vendor", + "checkNotEmpty" => "model|you have to fill the model name entry", + "checkMatch|".Hardware::$regExpressions['model'] => "model|characters not allowed in the model name entry", + "+checkIsStrings|".Notebooks::compatibilityList() => "compatibility", + "checkLength|190" => "model", + "+checkLength|299" => "distribution", + "++checkIsStrings|".Hardware::getCommYears() => "comm_year", + "+++checkIsStrings|".Notebooks::$subtypeSelect => "subtype", + "++++checkIsStrings|".Notebooks::wifiList() => "wifi_works", + "+++++checkIsStrings|".Notebooks::videoList() => "video_card_works", + "++++++checkIsStrings|".Notebooks::biosList() => "bios", + "+++++++checkIsStrings|".Notebooks::webcamList() => "webcam_works", + "++++++++checkIsStrings|".Notebooks::architectureList() => "architecture", + "+++++++++checkIsStrings|".Notebooks::installableList() => "can_free_systems_be_installed", + "++++++++++checkIsStrings|".Notebooks::preventWifiList() => "prevent_wifi", + ); + + $this->m['HardwareModel']->strongConditions['insert'] = $this->m['HardwareModel']->strongConditions['update']; + + $this->m['HardwareModel']->softConditions['update'] = array( + "checkMatch|".Hardware::$regExpressions['kernel'] => "kernel|characters not allowed in the kernel entry", + "checkLength|40000" => "description", + "++checkLength|99" => "video_card_type,wifi_type", + "+++checkLength|99" => "kernel", + "+checkMatch|/^[a-zA-Z0-9\-\_\.\+\s\/\,\:\;\(\)\[\]]+$/" => "video_card_type|only the following characters are allowed for the videocard entry: a-z A-Z 0-9 - _ . + / , : ; ( ) [ ]", + "++checkMatch|/^[a-zA-Z0-9\-\_\.\+\s\/\,\:\;\(\)\[\]]+$/" => "wifi_type|only the following characters are allowed for the wifi entry: a-z A-Z 0-9 - _ . + / , : ; ( ) [ ]", + "+++checkMatch|/^[a-zA-Z0-9\-\_\.\+\s\/\,\:\;\(\)\[\]]+$/" => "webcam_type|only the following characters are allowed for the webcam entry: a-z A-Z 0-9 - _ . + / , : ; ( ) [ ]", + ); + + $this->m['HardwareModel']->softConditions['insert'] = $this->m['HardwareModel']->softConditions['update']; + + $this->m['HardwareModel']->setFields('vendor,model,compatibility,kernel,description,distribution,video_card_type,video_card_works,wifi_type,wifi_works,comm_year,subtype,bios,can_free_systems_be_installed,webcam_type,webcam_works,architecture,prevent_wifi','sanitizeAll'); + + $argKeys = array( + 'page:forceNat' => 1, + 'history_page:forceNat' => 1, + 'vendor:sanitizeString' => 'undef', + 'compatibility:sanitizeString' => 'undef', + 'comm_year:sanitizeString' => 'undef', + 'subtype:sanitizeString' => 'undef', + 'sort-by:sanitizeString' => 'compatibility', + 'bios:sanitizeString' => 'undef', + 'architecture:sanitizeString' => 'undef', + 'search_string:sanitizeString' => 'undef' + ); + + $this->setArgKeys($argKeys); + + $data['worksField'] = 'compatibility'; + + $data['notFoundString'] = "No notebooks found"; + + $data['title'] = 'Notebooks'; + $this->append($data); + } + + public function catalogue($lang = 'en') + { + $this->shift(1); + + $whereArray = array( + 'type' => $this->mod->type, + 'vendor' => $this->viewArgs['vendor'], + 'comm_year' => $this->viewArgs['comm_year'], + 'subtype' => $this->viewArgs['subtype'], + 'compatibility' => $this->viewArgs['compatibility'], + 'bios' => $this->viewArgs['bios'], + 'architecture' => $this->viewArgs['architecture'], + ); + + $this->mod->setWhereQueryClause($whereArray); + + parent::catalogue($lang); + } + + public function view($lang = 'en', $id = 0, $name = null) + { + parent::view($lang, $id, $name); + } + + public function history($lang = 'en', $id = 0) + { + parent::history($lang, $id); + } + + public function revision($lang = 'en', $id_rev = 0) + { + parent::revision($lang, $id_rev); + } + + public function insert($lang = 'en', $token = '') + { + parent::insert($lang, $token); + } + + public function update($lang = 'en', $token = '') + { + parent::update($lang, $token); + } + + public function differences($lang = 'en', $id_hard = 0, $id_rev = 0) + { + parent::differences($lang, $id_hard, $id_rev); + } + + public function climb($lang = 'en', $id_rev = 0, $token = '') + { + parent::climb($lang, $id_rev, $token); + } + + public function talk($lang = 'en', $id_hard = 0, $token = '') + { + parent::talk($lang, $id_hard, $token); + } + +} diff --git a/Application/Controllers/PrintersController.php b/Application/Controllers/PrintersController.php new file mode 100644 index 0000000..8610314 --- /dev/null +++ b/Application/Controllers/PrintersController.php @@ -0,0 +1,154 @@ +. + +if (!defined('EG')) die('Direct access not allowed!'); + +class PrintersController extends GenericController +{ + + public function __construct($model, $controller, $queryString) + { + + parent::__construct($model, $controller, $queryString); + + //load the model + $this->model('HardwareModel'); + $this->model('RevisionsModel'); + $this->model('PrintersModel'); + $this->model('TalkModel'); + + $this->mod = $this->m['PrintersModel']; + + $this->m['HardwareModel']->id_user = $this->s['registered']->status['id_user']; + $this->m['HardwareModel']->type = 'printer'; + + //hardware conditions + $this->m['HardwareModel']->strongConditions['update'] = array( + "checkNotEmpty" => "model|you have to fill the model name entry", + "checkMatch|".Hardware::$regExpressions['model'] => "model|characters not allowed in the model name entry", + "+checkMatch|".Hardware::$regExpressions['vendorid_productid'] => "pci_id|VendorID:ProductID has to have the following format: [a-zA-Z0-9]{4}(\:)[a-zA-Z0-9]{4}", + "checkLength|190" => "model", + "+checkLength|299" => "distribution", + "+checkIsStrings|".Printer::compatibilityList() => "compatibility", + "++checkIsStrings|".Hardware::getCommYears() => "comm_year", + "+++checkIsStrings|".Printer::$interface => "interface", + "++++checkIsStrings|".Printer::$subtype => "subtype", + "+++++checkIsStrings|".Printer::$trackSelect => "it_tracks_users", + ); + + $this->m['HardwareModel']->strongConditions['insert'] = $this->m['HardwareModel']->strongConditions['update']; + + $this->m['HardwareModel']->softConditions['update'] = array( + "checkMatch|".Hardware::$regExpressions['kernel'] => "kernel|characters not allowed in the kernel entry", + "checkLength|40000" => "description", + "+checkLength|49" => "driver", + "++checkLength|99" => "kernel", + "++checkMatch|".Hardware::$regExpressions['driver'] => "driver|only the following characters are allowed for the driver entry: a-z A-Z 0-9 - _ . + s / , : ; ( ) [ ]", + "+++checkLength|1000" => "other_names|the other names entry exceeds the value of 1000 characters", + ); + + $this->m['HardwareModel']->softConditions['insert'] = $this->m['HardwareModel']->softConditions['update']; + + $this->m['HardwareModel']->setFields('model,kernel,description,compatibility,distribution,comm_year,pci_id,driver,interface,subtype,other_names,it_tracks_users','sanitizeAll'); + + $argKeys = array( + 'page:forceNat' => 1, + 'history_page:forceNat' => 1, + 'vendor:sanitizeString' => 'undef', + 'compatibility:sanitizeString' => 'undef', + 'comm_year:sanitizeString' => 'undef', + 'interface:sanitizeString' => 'undef', + 'sort-by:sanitizeString' => 'compatibility', + 'search_string:sanitizeString' => 'undef' + ); + + $this->setArgKeys($argKeys); + + $data['title'] = 'printers'; + + $data['intefaceOptions'] = Printer::$interface; + $data['worksOptions'] = Printer::$compatibility; + $data['worksField'] = 'compatibility'; + + $data['notFoundString'] = "No printers found"; + + $data['subtypeHelpLabel'] = "laser, inkjet, .."; + + $this->append($data); + } + + public function catalogue($lang = 'en') + { + $this->shift(1); + + $whereArray = array( + 'type' => $this->mod->type, + 'vendor' => $this->viewArgs['vendor'], + 'compatibility' => $this->viewArgs['compatibility'], + 'comm_year' => $this->viewArgs['comm_year'], + 'interface' => $this->viewArgs['interface'], + ); + + $this->mod->setWhereQueryClause($whereArray); + + parent::catalogue($lang); + } + + public function view($lang = 'en', $id = 0, $name = null) + { + parent::view($lang, $id, $name); + } + + public function history($lang = 'en', $id = 0) + { + parent::history($lang, $id); + } + + public function revision($lang = 'en', $id_rev = 0) + { + parent::revision($lang, $id_rev); + } + + public function insert($lang = 'en', $token = '') + { + parent::insert($lang, $token); + } + + public function update($lang = 'en', $token = '') + { + parent::update($lang, $token); + } + + public function differences($lang = 'en', $id_hard = 0, $id_rev = 0) + { + parent::differences($lang, $id_hard, $id_rev); + } + + public function climb($lang = 'en', $id_rev = 0, $token = '') + { + parent::climb($lang, $id_rev, $token); + } + + public function talk($lang = 'en', $id_hard = 0, $token = '') + { + parent::talk($lang, $id_hard, $token); + } + +} diff --git a/Application/Controllers/ProjectController.php b/Application/Controllers/ProjectController.php new file mode 100644 index 0000000..234fb59 --- /dev/null +++ b/Application/Controllers/ProjectController.php @@ -0,0 +1,42 @@ +. + +if (!defined('EG')) die('Direct access not allowed!'); + +class ProjectController extends BaseController +{ + + public function __construct($model, $controller, $queryString) + { + $this->_topMenuClasses['project'] = " class='currentitem ui-btn-active'"; + + parent::__construct($model, $controller, $queryString); + + $data['title'] = 'project - '.Website::$generalName; + $this->append($data); + } + + public function index($lang = 'en') + { + $this->cleverLoad('index'); + $this->right(); + } + +} \ No newline at end of file diff --git a/Application/Controllers/RaidadaptersController.php b/Application/Controllers/RaidadaptersController.php new file mode 100644 index 0000000..be248b4 --- /dev/null +++ b/Application/Controllers/RaidadaptersController.php @@ -0,0 +1,131 @@ +. + +if (!defined('EG')) die('Direct access not allowed!'); + +class RaidadaptersController extends GenericController +{ + + public function __construct($model, $controller, $queryString) + { + + $worksOptions = Raidadapters::$select; + $worksField = 'compatibility'; + $interfaceOptions = Raidadapters::$interface; + + parent::__construct($model, $controller, $queryString); + + //load the model + $this->model('HardwareModel'); + $this->model('RevisionsModel'); + $this->model('RaidadaptersModel'); + $this->model('TalkModel'); + + $this->mod = $this->m['RaidadaptersModel']; + + $this->m['HardwareModel']->id_user = $this->s['registered']->status['id_user']; + $this->m['HardwareModel']->type = 'RAID-adapter'; + + $this->m['HardwareModel']->setConditions($worksOptions,$worksField,$interfaceOptions); + + $this->m['HardwareModel']->setFields('model,kernel,description,distribution,comm_year,compatibility,pci_id,interface,driver,other_names','sanitizeAll'); + + $argKeys = array( + 'page:forceNat' => 1, + 'history_page:forceNat' => 1, + 'vendor:sanitizeString' => 'undef', + 'comm_year:sanitizeString' => 'undef', + 'compatibility:sanitizeString' => 'undef', + 'interface:sanitizeString' => 'undef', + 'sort-by:sanitizeString' => 'compatibility-desc', + 'search_string:sanitizeString' => 'undef' + ); + + $this->setArgKeys($argKeys); + + $data['title'] = 'Acquisition cards'; + + $data['intefaceOptions'] = $interfaceOptions; + $data['worksOptions'] = $worksOptions; + $data['worksField'] = $worksField; + + $data['notFoundString'] = "No RAID adapter found"; + + $this->append($data); + } + + public function catalogue($lang = 'en') + { + $this->shift(1); + + $whereArray = array( + 'type' => $this->mod->type, + 'vendor' => $this->viewArgs['vendor'], + 'comm_year' => $this->viewArgs['comm_year'], + 'compatibility' => $this->viewArgs['compatibility'], + 'interface' => $this->viewArgs['interface'], + ); + + $this->mod->setWhereQueryClause($whereArray); + + parent::catalogue($lang); + } + + public function view($lang = 'en', $id = 0, $name = null) + { + parent::view($lang, $id, $name); + } + + public function history($lang = 'en', $id = 0) + { + parent::history($lang, $id); + } + + public function revision($lang = 'en', $id_rev = 0) + { + parent::revision($lang, $id_rev); + } + + public function insert($lang = 'en', $token = '') + { + parent::insert($lang, $token); + } + + public function update($lang = 'en', $token = '') + { + parent::update($lang, $token); + } + + public function differences($lang = 'en', $id_hard = 0, $id_rev = 0) + { + parent::differences($lang, $id_hard, $id_rev); + } + + public function climb($lang = 'en', $id_rev = 0, $token = '') + { + parent::climb($lang, $id_rev, $token); + } + + public function talk($lang = 'en', $id_hard = 0, $token = '') + { + parent::talk($lang, $id_hard, $token); + } + +} diff --git a/Application/Controllers/RssController.php b/Application/Controllers/RssController.php new file mode 100644 index 0000000..0a74695 --- /dev/null +++ b/Application/Controllers/RssController.php @@ -0,0 +1,64 @@ +. + +if (!defined('EG')) die('Direct access not allowed!'); + +class RssController extends SpecialController +{ + + public function __construct($model, $controller, $queryString) + { + parent::__construct($model, $controller, $queryString); + + $data['title'] = 'RSS - '.Website::$generalName; + $this->append($data); + } + + public function modifications($lang = 'en') + { + header ("Content-Type:application/rss+xml"); + parent::modifications($lang); + + $data['statusnetText'] = null; + $this->append($data); + + $this->clean(); + $this->load('modifications'); + } + + //RSS feeds for identi.ca or StatusNet + public function statusnet($lang = 'en') + { + $this->modifications($lang); + + $data['statusnetText'] = Website::$statusnetGroupText; + $this->append($data); + } + + public function notapproved($lang = 'en') + { + $this->shift(1); + + $this->pagelist($lang,'notapproved'); + $this->clean(); + $this->load('notapproved'); + } + +} \ No newline at end of file diff --git a/Application/Controllers/ScannersController.php b/Application/Controllers/ScannersController.php new file mode 100644 index 0000000..80dc229 --- /dev/null +++ b/Application/Controllers/ScannersController.php @@ -0,0 +1,127 @@ +. + +if (!defined('EG')) die('Direct access not allowed!'); + +class ScannersController extends GenericController +{ + + public function __construct($model, $controller, $queryString) + { + + parent::__construct($model, $controller, $queryString); + + //load the model + $this->model('HardwareModel'); + $this->model('RevisionsModel'); + $this->model('ScannersModel'); + $this->model('TalkModel'); + + $this->mod = $this->m['ScannersModel']; + + $this->m['HardwareModel']->id_user = $this->s['registered']->status['id_user']; + $this->m['HardwareModel']->type = 'scanner'; + + $this->m['HardwareModel']->setConditions(Printer::compatibilityList(),'compatibility',Printer::$interface); + + $this->m['HardwareModel']->setFields('model,kernel,description,compatibility,distribution,comm_year,pci_id,driver,interface,other_names','sanitizeAll'); + + $argKeys = array( + 'page:forceNat' => 1, + 'history_page:forceNat' => 1, + 'vendor:sanitizeString' => 'undef', + 'compatibility:sanitizeString' => 'undef', + 'comm_year:sanitizeString' => 'undef', + 'interface:sanitizeString' => 'undef', + 'sort-by:sanitizeString' => 'compatibility', + 'search_string:sanitizeString' => 'undef' + ); + + $this->setArgKeys($argKeys); + + $data['title'] = 'scanners'; + + $data['intefaceOptions'] = Printer::$interface; + $data['worksOptions'] = Printer::$compatibility; + $data['worksField'] = 'compatibility'; + + $data['notFoundString'] = "No scanners found"; + + $this->append($data); + } + + public function catalogue($lang = 'en') + { + $this->shift(1); + + $whereArray = array( + 'type' => $this->mod->type, + 'vendor' => $this->viewArgs['vendor'], + 'compatibility' => $this->viewArgs['compatibility'], + 'comm_year' => $this->viewArgs['comm_year'], + 'interface' => $this->viewArgs['interface'], + ); + + $this->mod->setWhereQueryClause($whereArray); + + parent::catalogue($lang); + } + + public function view($lang = 'en', $id = 0, $name = null) + { + parent::view($lang, $id, $name); + } + + public function history($lang = 'en', $id = 0) + { + parent::history($lang, $id); + } + + public function revision($lang = 'en', $id_rev = 0) + { + parent::revision($lang, $id_rev); + } + + public function insert($lang = 'en', $token = '') + { + parent::insert($lang, $token); + } + + public function update($lang = 'en', $token = '') + { + parent::update($lang, $token); + } + + public function differences($lang = 'en', $id_hard = 0, $id_rev = 0) + { + parent::differences($lang, $id_hard, $id_rev); + } + + public function climb($lang = 'en', $id_rev = 0, $token = '') + { + parent::climb($lang, $id_rev, $token); + } + + public function talk($lang = 'en', $id_hard = 0, $token = '') + { + parent::talk($lang, $id_hard, $token); + } + +} diff --git a/Application/Controllers/SdcardreadersController.php b/Application/Controllers/SdcardreadersController.php new file mode 100644 index 0000000..9d156cf --- /dev/null +++ b/Application/Controllers/SdcardreadersController.php @@ -0,0 +1,131 @@ +. + +if (!defined('EG')) die('Direct access not allowed!'); + +class SdcardreadersController extends GenericController +{ + + public function __construct($model, $controller, $queryString) + { + + $worksOptions = Sdcardreaders::$select; + $worksField = 'sd_card_works'; + $interfaceOptions = Sdcardreaders::$interface; + + parent::__construct($model, $controller, $queryString); + + //load the model + $this->model('HardwareModel'); + $this->model('RevisionsModel'); + $this->model('SdcardreadersModel'); + $this->model('TalkModel'); + + $this->mod = $this->m['SdcardreadersModel']; + + $this->m['HardwareModel']->id_user = $this->s['registered']->status['id_user']; + $this->m['HardwareModel']->type = 'sd-card-reader'; + + $this->m['HardwareModel']->setConditions($worksOptions,$worksField,$interfaceOptions); + + $this->m['HardwareModel']->setFields('model,kernel,description,distribution,comm_year,sd_card_works,pci_id,interface,driver,other_names','sanitizeAll'); + + $argKeys = array( + 'page:forceNat' => 1, + 'history_page:forceNat' => 1, + 'vendor:sanitizeString' => 'undef', + 'comm_year:sanitizeString' => 'undef', + 'sd_card_works:sanitizeString' => 'undef', + 'interface:sanitizeString' => 'undef', + 'sort-by:sanitizeString' => 'sdcard-works', + 'search_string:sanitizeString' => 'undef' + ); + + $this->setArgKeys($argKeys); + + $data['title'] = 'SD card readers'; + + $data['intefaceOptions'] = $interfaceOptions; + $data['worksOptions'] = $worksOptions; + $data['worksField'] = $worksField; + + $data['notFoundString'] = "No SD card readers found"; + + $this->append($data); + } + + public function catalogue($lang = 'en') + { + $this->shift(1); + + $whereArray = array( + 'type' => $this->mod->type, + 'vendor' => $this->viewArgs['vendor'], + 'comm_year' => $this->viewArgs['comm_year'], + 'sd_card_works' => $this->viewArgs['sd_card_works'], + 'interface' => $this->viewArgs['interface'], + ); + + $this->mod->setWhereQueryClause($whereArray); + + parent::catalogue($lang); + } + + public function view($lang = 'en', $id = 0, $name = null) + { + parent::view($lang, $id, $name); + } + + public function history($lang = 'en', $id = 0) + { + parent::history($lang, $id); + } + + public function revision($lang = 'en', $id_rev = 0) + { + parent::revision($lang, $id_rev); + } + + public function insert($lang = 'en', $token = '') + { + parent::insert($lang, $token); + } + + public function update($lang = 'en', $token = '') + { + parent::update($lang, $token); + } + + public function differences($lang = 'en', $id_hard = 0, $id_rev = 0) + { + parent::differences($lang, $id_hard, $id_rev); + } + + public function climb($lang = 'en', $id_rev = 0, $token = '') + { + parent::climb($lang, $id_rev, $token); + } + + public function talk($lang = 'en', $id_hard = 0, $token = '') + { + parent::talk($lang, $id_hard, $token); + } + +} diff --git a/Application/Controllers/SearchController.php b/Application/Controllers/SearchController.php new file mode 100644 index 0000000..1892f70 --- /dev/null +++ b/Application/Controllers/SearchController.php @@ -0,0 +1,267 @@ +. + +if (!defined('EG')) die('Direct access not allowed!'); + +class SearchController extends BaseController +{ + + public function __construct($model, $controller, $queryString) + { + + $this->_topMenuClasses['search'] = " class='currentitem'"; + + parent::__construct($model, $controller, $queryString); + + $this->model('HardwareModel'); + + $data['title'] = 'search - '.Website::$generalName; + $this->append($data); + } + + public function form($lang = 'en') + { + $this->cleverLoad('form'); + $this->right(); + } + + public function results($lang = 'en') + { + Params::$nullQueryValue = 'undef'; + + $argKeys = array( + 'page:forceNat' => 1, + 'action:sanitizeAlphanum' => 'search', + 'type:sanitizeString' => 'notebook', + 'model:sanitizeString' => 'undef', + ); + + $this->setArgKeys($argKeys); + + $this->shift(1); + + if (strcmp($this->viewArgs['action'],'search') === 0) + { + Params::$whereClauseSymbolArray = array('like'); + + $this->m['HardwareModel']->logicalOperators = array('AND','OR'); + + $whereClause = array( + 'type' => $this->viewArgs['type'], + 'level1' => array( + 'model' => "like '%".$this->viewArgs['model']."%'", + 'other_names' => "like '%".$this->viewArgs['model']."%'", + ), +// 'model' => "like '%".$this->viewArgs['model']."%'", +// 'other_names' => "like '%".$this->viewArgs['model']."%'", + '-deleted' => "no", + 'cleared' => "no", + ); + + $recordNumber = $this->m['HardwareModel']->clear()->where($whereClause)->orderBy("id_hard desc")->rowNumber(); + + $data['recordNumber'] = $recordNumber; + + //load the Pages helper + $this->helper('Pages',$this->controller.'/results/'.$this->lang,'page'); + $page = $this->viewArgs['page']; + //set the limit clause + $limit = $this->h['Pages']->getLimit($page,$recordNumber,10); + + $data['table'] = $this->m['HardwareModel']->clear()->select('id_hard,model,type,comm_year,other_names')->where($whereClause)->limit($limit)->orderBy("id_hard desc")->send(); +// echo $this->m['HardwareModel']->getQuery(); + + $data['pageList'] = $this->h['Pages']->render($page-3,7); + + $this->append($data); + $this->cleverLoad('results'); + $this->right(); + } + + } + + public function pciid($lang = 'en') + { + if (isset($_POST['pciid'])) + { + $clean['pciid'] = $this->request->post('pciid','','sanitizePciid'); + $data['table'] = $this->m['HardwareModel']->clear()->select()->where(array('pci_id'=>$clean['pciid']))->send(); + $data['recordNumber'] = 0; + + $this->append($data); + $this->cleverLoad('results'); + $this->right(); + } + } + + public function lspci($lang = 'en') + { + if (isset($_POST['lspci'])) + { + $data['notice'] = null; + + $lspci = $this->request->post('lspci','','sanitizeHtml'); + $lspciResult = array(); + $flag = true; + + if (strlen($lspci)<50000) + { + $lspci = nl2br($lspci); + $lspciArray = explode('
',$lspci); + reset($lspciArray); + while(current($lspciArray) !== false) + { + $item = current($lspciArray); + if( preg_match( '/Slot\:(.*)([0-9a-zA-Z]{2}\:[0-9a-zA-Z]{2}\.[0-9a-zA-Z]{1})/i', $item ) ) +// if (stristr($item,'Slot')) + { + $temp = array(); +// class + if (next($lspciArray) !== false) + { + $item = trim(current($lspciArray)); + if( preg_match( '/Class\:(.*)\[(.*)\]/i', $item, $matches ) ) + { + $temp['className'] = sanitizeAll($matches[1]); + $temp['classId'] = sanitizeAll($matches[2]); + } + else + { + $temp['className'] = "unknown"; + $temp['classId'] = "unknown"; + } + } + else + { + $flag = false; + break; + } + +// vendor + if (next($lspciArray) !== false) + { + $item = trim(current($lspciArray)); + if( preg_match( '/Vendor\:(.*)\[(.*)\]/i', $item, $matches ) ) + { + $temp['vendorName'] = sanitizeAll($matches[1]); + $temp['vendorId'] = sanitizeAll($matches[2]); + } + else + { + $temp['vendorName'] = "unknown"; + $temp['vendorId'] = "unknown"; + } + } + else + { + $flag = false; + break; + } + +// device + if (next($lspciArray) !== false) + { + $item = trim(current($lspciArray)); + if( preg_match( '/Device\:(.*)\[(.*)\]/i', $item, $matches ) ) + { + $temp['deviceName'] = sanitizeAll($matches[1]); + $temp['deviceId'] = sanitizeAll($matches[2]); + } + else + { + $temp['deviceName'] = "unknown"; + $temp['deviceId'] = "unknown"; + } + } + else + { + $flag = false; + break; + } + + $lspciResult[] = $temp; + } + next($lspciArray); + } + if (count($lspciResult) === 0 or $flag === false) + { + $data['notice'] = "
".gtext('the text submitted by you does not seem to be the lspci -vmmnn output. Please check the text and try again')."
\n"; + $flag = false; + } + } + else + { + $data['notice'] = "
the lspci output is too long
\n"; + $flag = false; + } + + $data['flag'] = $flag; + + $data['table'] = array(); + $data['notFoundDevices'] = array(); + + if ($flag) + { + $lspciFiltered = array(); + $vendorIDProductIDArray = array(); + foreach ($lspciResult as $device) + { + if (array_key_exists($device['classId'],Hardware::$deviceClasses)) + { + $vendorIDProductIDArray[] = sanitizePciid($device['vendorId'].":".$device['deviceId']); + $lspciFiltered[] = $device; + } + } + if (count($vendorIDProductIDArray) > 0) + { + $whereString = "'".implode("','",$vendorIDProductIDArray)."'"; + $data['table'] = $this->m['HardwareModel']->select()->where(array('pci_id'=>"in($whereString)"))->send(); + + $foundPciidArray = $this->m['HardwareModel'] + ->select('pci_id') + ->where(array('pci_id'=>"in($whereString)")) + ->toList('pci_id') + ->send(); + + $notFoundDevices = array(); //list of devices not found inside the database + $notFoundPciIdList = array(); //to check that it does not take the same device twice + + foreach ($lspciFiltered as $device) + { + if (!in_array($device['vendorId'].":".$device['deviceId'],$foundPciidArray)) + { + if (!in_array($device['vendorId'].":".$device['deviceId'],$notFoundPciIdList)) + { + $notFoundDevices[] = $device; + $notFoundPciIdList[] = $device['vendorId'].":".$device['deviceId']; + } + } + } + + $data['notFoundDevices'] = $notFoundDevices; + } + + } + $this->append($data); + $this->cleverLoad('lspci_results'); + $this->right(); + } + } +} \ No newline at end of file diff --git a/Application/Controllers/SoundcardsController.php b/Application/Controllers/SoundcardsController.php new file mode 100644 index 0000000..fff5e77 --- /dev/null +++ b/Application/Controllers/SoundcardsController.php @@ -0,0 +1,127 @@ +. + +if (!defined('EG')) die('Direct access not allowed!'); + +class SoundcardsController extends GenericController +{ + + public function __construct($model, $controller, $queryString) + { + + parent::__construct($model, $controller, $queryString); + + //load the model + $this->model('HardwareModel'); + $this->model('RevisionsModel'); + $this->model('SoundcardsModel'); + $this->model('TalkModel'); + + $this->mod = $this->m['SoundcardsModel']; + + $this->m['HardwareModel']->id_user = $this->s['registered']->status['id_user']; + $this->m['HardwareModel']->type = 'soundcard'; + + $this->m['HardwareModel']->setConditions(Soundcards::$audioSelect,'sound_card_works',Soundcards::$interface); + + $this->m['HardwareModel']->setFields('model,kernel,description,distribution,comm_year,sound_card_works,pci_id,interface,driver,other_names','sanitizeAll'); + + $argKeys = array( + 'page:forceNat' => 1, + 'history_page:forceNat' => 1, + 'vendor:sanitizeString' => 'undef', + 'comm_year:sanitizeString' => 'undef', + 'sound_card_works:sanitizeString' => 'undef', + 'interface:sanitizeString' => 'undef', + 'sort-by:sanitizeString' => 'sound-card-works', + 'search_string:sanitizeString' => 'undef' + ); + + $this->setArgKeys($argKeys); + + $data['title'] = 'Soundcard'; + + $data['intefaceOptions'] = Soundcards::$interface; + $data['worksOptions'] = Soundcards::$audioSelect; + $data['worksField'] = 'sound_card_works'; + + $data['notFoundString'] = "No sound cards found"; + + $this->append($data); + } + + public function catalogue($lang = 'en') + { + $this->shift(1); + + $whereArray = array( + 'type' => $this->mod->type, + 'vendor' => $this->viewArgs['vendor'], + 'comm_year' => $this->viewArgs['comm_year'], + 'sound_card_works' => $this->viewArgs['sound_card_works'], + 'interface' => $this->viewArgs['interface'], + ); + + $this->mod->setWhereQueryClause($whereArray); + + parent::catalogue($lang); + } + + public function view($lang = 'en', $id = 0, $name = null) + { + parent::view($lang, $id, $name); + } + + public function history($lang = 'en', $id = 0) + { + parent::history($lang, $id); + } + + public function revision($lang = 'en', $id_rev = 0) + { + parent::revision($lang, $id_rev); + } + + public function insert($lang = 'en', $token = '') + { + parent::insert($lang, $token); + } + + public function update($lang = 'en', $token = '') + { + parent::update($lang, $token); + } + + public function differences($lang = 'en', $id_hard = 0, $id_rev = 0) + { + parent::differences($lang, $id_hard, $id_rev); + } + + public function climb($lang = 'en', $id_rev = 0, $token = '') + { + parent::climb($lang, $id_rev, $token); + } + + public function talk($lang = 'en', $id_hard = 0, $token = '') + { + parent::talk($lang, $id_hard, $token); + } + +} diff --git a/Application/Controllers/SpecialController.php b/Application/Controllers/SpecialController.php new file mode 100644 index 0000000..4acbb5e --- /dev/null +++ b/Application/Controllers/SpecialController.php @@ -0,0 +1,216 @@ +. + +if (!defined('EG')) die('Direct access not allowed!'); + +class SpecialController extends BaseController +{ + + public function __construct($model, $controller, $queryString) + { + parent::__construct($model, $controller, $queryString); + + $this->model('HistoryModel'); + $this->model('HardwareModel'); + + $data['title'] = gtext('last modifications').' - '.Website::$generalName; + $this->append($data); + + Params::$nullQueryValue = 'undef'; + + $this->setArgKeys(array('page:forceNat'=>1,'username:sanitizeAll'=>'undef')); + } + + protected function last($lang = 'en',$action = 'modifications') + { + switch ($action) + { + case 'modactions': + $data['title'] = 'last moderations - '.Website::$generalName; + $data['viewTitle'] = 'List of actions carried out by moderators'; + $data['user_status'] = 'MODERATOR'; + + $whereClauseArray = array( + 'gr' => 'moderator', + ); + + $viewFile = 'modactions'; + + break; + case 'adminactions': + $data['title'] = 'last admin actions - '.Website::$generalName; + $data['viewTitle'] = 'List of actions carried out by administrators'; + $data['user_status'] = 'ADMINISTRATOR'; + + $whereClauseArray = array( + 'gr' => 'admin', + ); + + $viewFile = 'modactions'; + + break; + + case 'usersactions': + $data['title'] = 'last registered users actions - '.Website::$generalName; + $data['viewTitle'] = 'List of actions carried out by registered users'; + $data['user_status'] = 'USER'; + + $whereClauseArray = array( + 'gr' => 'registered', + ); + + $viewFile = 'modactions'; + + break; + } + $whereClauseArray['username'] = $this->viewArgs['username']; + + $this->helper('Pages','special/'.$this->action.'/'.$this->lang,'page'); + + $this->m['HistoryModel']->clear()->left('regusers')->on('history.created_by=regusers.id_user')->select("history.*,regusers.username")->where($whereClauseArray)->orderBy('id_history desc'); + + $recordNumber = $this->m['HistoryModel']->rowNumber(); + $page = $this->viewArgs['page']; + + $this->m['HistoryModel']->limit = $this->h['Pages']->getLimit($page,$recordNumber,30); + + $data['table'] = $this->m['HistoryModel']->send(); + +// echo $this->m['HistoryModel']->getQuery(); + + $data['pageList'] = $this->h['Pages']->render($page-5,11); + + //the value of the filter + $data['filterValue'] = strcmp($this->viewArgs['username'],'undef') === 0 ? null : $this->viewArgs['username']; + + $this->append($data); + $this->load($viewFile); + $this->right(); + } + + public function modifications($lang = 'en') + { + $this->shift(1); + + $data['title'] = 'last modifications - '.Website::$generalName; + + $whereClauseArray = array( + 'gr' => 'registered', + 'type' => 'hardware', + 'deleted' => 'no', + 'cleared' => 'no', + ); + + $this->helper('Pages','special/'.$this->action.'/'.$this->lang,'page'); + + $this->m['HistoryModel']->clear()->select('history.*,hardware.*')->inner('hardware')->on('hardware.id_hard=history.id')->where($whereClauseArray)->orderBy('id_history desc'); + + $recordNumber = $this->m['HistoryModel']->rowNumber(); + $page = $this->viewArgs['page']; + + $this->m['HistoryModel']->limit = $this->h['Pages']->getLimit($page,$recordNumber,30); + + $data['table'] = $this->m['HistoryModel']->send(); + + $data['pageList'] = $this->h['Pages']->render($page-5,11); + + $this->append($data); + $this->load('modifications'); + $this->right(); + } + + public function modactions($lang = 'en') + { + $this->shift(1); + + $this->s['registered']->check('moderator'); + + $this->last($lang = 'en','modactions'); + } + + public function adminactions($lang = 'en') + { + $this->shift(1); + + $this->s['registered']->check('admin'); + + $this->last($lang = 'en','adminactions'); + } + + public function usersactions($lang = 'en') + { + $this->shift(1); + + $this->s['registered']->check('moderator'); + + $this->last($lang = 'en','usersactions'); + } + + protected function pagelist($lang = 'en', $type) + { + switch ($type) + { + case 'deleted': + $whereArray = array('-deleted'=>'yes','approved'=>'yes'); + $data['titleString'] = 'hidden device pages'; + break; + case 'notapproved': + $whereArray = array('approved'=>'no'); + $data['titleString'] = 'Device pages that have to be approved'; + break; + } + + $this->helper('Pages','special/'.$this->action.'/'.$this->lang,'page'); + + $this->m['HardwareModel']->clear()->select()->where($whereArray)->orderBy('id_hard desc'); + + $recordNumber = $this->m['HardwareModel']->rowNumber(); + $page = $this->viewArgs['page']; + + $this->m['HardwareModel']->limit = $this->h['Pages']->getLimit($page,$recordNumber,30); + + $data['table'] = $this->m['HardwareModel']->send(); + + $data['pageList'] = $this->h['Pages']->render($page-5,11); + + $this->append($data); + $this->load('pages_deleted'); + $this->right(); + } + + public function deleted($lang = 'en') + { + $this->shift(1); + + $this->s['registered']->check('admin'); + + $this->pagelist($lang,'deleted'); + } + + public function notapproved($lang = 'en') + { + $this->shift(1); + + $this->s['registered']->check('admin'); + + $this->pagelist($lang,'notapproved'); + } + +} \ No newline at end of file diff --git a/Application/Controllers/ThreegcardsController.php b/Application/Controllers/ThreegcardsController.php new file mode 100644 index 0000000..3824fe0 --- /dev/null +++ b/Application/Controllers/ThreegcardsController.php @@ -0,0 +1,127 @@ +. + +if (!defined('EG')) die('Direct access not allowed!'); + +class ThreegcardsController extends GenericController +{ + + public function __construct($model, $controller, $queryString) + { + + parent::__construct($model, $controller, $queryString); + + //load the model + $this->model('HardwareModel'); + $this->model('RevisionsModel'); + $this->model('ThreegcardsModel'); + $this->model('TalkModel'); + + $this->mod = $this->m['ThreegcardsModel']; + + $this->m['HardwareModel']->id_user = $this->s['registered']->status['id_user']; + $this->m['HardwareModel']->type = '3G-card'; + + $this->m['HardwareModel']->setConditions(Wifi::$wifiSelect,'wifi_works',ThreeGcards::interfaceList()); + + $this->m['HardwareModel']->setFields('model,kernel,description,distribution,comm_year,wifi_works,pci_id,interface,driver,other_names','sanitizeAll'); + + $argKeys = array( + 'page:forceNat' => 1, + 'history_page:forceNat' => 1, + 'vendor:sanitizeString' => 'undef', + 'comm_year:sanitizeString' => 'undef', + 'wifi_works:sanitizeString' => 'undef', + 'interface:sanitizeString' => 'undef', + 'sort-by:sanitizeString' => 'wifi-works', + 'search_string:sanitizeString' => 'undef' + ); + + $this->setArgKeys($argKeys); + + $data['title'] = '3G card'; + + $data['intefaceOptions'] = Wifi::$interface; + $data['worksOptions'] = Wifi::$wifiSelect; + $data['worksField'] = 'wifi_works'; + + $data['notFoundString'] = "No 3G cards found"; + + $this->append($data); + } + + public function catalogue($lang = 'en') + { + $this->shift(1); + + $whereArray = array( + 'type' => $this->mod->type, + 'vendor' => $this->viewArgs['vendor'], + 'comm_year' => $this->viewArgs['comm_year'], + 'wifi_works' => $this->viewArgs['wifi_works'], + 'interface' => $this->viewArgs['interface'], + ); + + $this->mod->setWhereQueryClause($whereArray); + + parent::catalogue($lang); + } + + public function view($lang = 'en', $id = 0, $name = null) + { + parent::view($lang, $id, $name); + } + + public function history($lang = 'en', $id = 0) + { + parent::history($lang, $id); + } + + public function revision($lang = 'en', $id_rev = 0) + { + parent::revision($lang, $id_rev); + } + + public function insert($lang = 'en', $token = '') + { + parent::insert($lang, $token); + } + + public function update($lang = 'en', $token = '') + { + parent::update($lang, $token); + } + + public function differences($lang = 'en', $id_hard = 0, $id_rev = 0) + { + parent::differences($lang, $id_hard, $id_rev); + } + + public function climb($lang = 'en', $id_rev = 0, $token = '') + { + parent::climb($lang, $id_rev, $token); + } + + public function talk($lang = 'en', $id_hard = 0, $token = '') + { + parent::talk($lang, $id_hard, $token); + } + +} diff --git a/Application/Controllers/UsersController.php b/Application/Controllers/UsersController.php new file mode 100644 index 0000000..741eaf4 --- /dev/null +++ b/Application/Controllers/UsersController.php @@ -0,0 +1,352 @@ +. + +if (!defined('EG')) die('Direct access not allowed!'); + +class UsersController extends BaseController +{ + + public function __construct($model, $controller, $queryString) + { + parent::__construct($model, $controller, $queryString); + + $this->model('UsersModel'); + $this->model('ProfileModel'); + $this->model('HardwareModel'); + + $data['title'] = 'Login'; + $this->append($data); + } + + public function login($lang = 'en') + { + $data = array(); + + if ( strcmp($this->_updating,'no') === 0 ) + { + $data['flag'] = isset($type) ? 'setted' : null; + + $data['title'] = 'Login - '.Website::$generalName; + + $redirect = $this->request->get('redirect','','sanitizeAll'); + + $data['action'] = Url::getRoot("users/login/".$this->lang."?redirect=$redirect"); + + $data['notice'] = null; + + $this->s['registered']->checkStatus(); + + if ($this->s['registered']->status['status']=='logged') { //check if already logged + $this->redirect('home/index/'.Lang::$current,3,'You are already logged...'); + die(); + } + if (isset($_POST['username']) and isset($_POST['password'])) + { + $username = ctype_alnum($_POST['username']) ? sanitizeAll($_POST['username']) : ''; + $choice = $this->s['registered']->login($username,$_POST['password']); + + switch($choice) { + case 'logged': + $this->redirect('home/index/'.Lang::$current,3,'You are already logged...'); + break; + case 'accepted': + if (strcmp($redirect,'') !== 0) + { + $redirect = html_entity_decode($redirect,ENT_QUOTES,DEFAULT_CHARSET); + $domainName = rtrim(Url::getRoot(),"/"); + header('Location:'.$domainName."/".$redirect); + } + else + { + $this->redirect('home/index/'.Lang::$current,0); + } + break; + case 'login-error': + $data['notice'] = '
Wrong username or password
'; + break; + case 'wait': + $data['notice'] = '
You have to wait 5 seconds before you can try to login another time
'; + break; + } + } + } + + $this->append($data); + $this->load('login'); + } + + public function logout($lang = 'en') + { + $res = $this->s['registered']->logout(); + + if ($res === 'not-logged') + { + $data['notice'] = "
You can't logout because you are not logged...
\n"; + } + else if ($res === 'was-logged') + { + $this->redirect('home/index/'.Lang::$current,0); + } + else if ($res === 'error') + { + + } + + $this->append($data); + $this->load('logout'); + } + + public function add($lang = 'en') + { + $data['title'] = 'create account - '.Website::$generalName; + + if ( strcmp($this->_updating,'no') === 0 ) + { + //start session for captcha + session_start(); + + if ( isset($_SESSION['status']) ) unset($_SESSION['status']); + + $this->shift(1); + + $this->m['UsersModel']->strongConditions['insert'] = array( + "checkAlphanum" => "username", + "checkLength|35" => "username", + "checkMail" => "e_mail", + "+checkLength|60" => "e_mail", + "checkEqual" => "password,confirmation", + "checkMatch|/^[a-zA-Z0-9\_\-\!]+$/" => "password,confirmation|characters allowed for the password: a-z A-Z 0-9 - _ !" + ); + + $this->m['UsersModel']->databaseConditions['insert'] = array( + "checkUnique" => "username", + "+checkUnique" => "e_mail" + ); + + if ($this->s['registered']->status['status'] === 'logged') + { + $this->redirect('home/index/'.$this->lang,2,'you are already logged..'); + } + else + { + $data['notice'] = null; + + $this->m['UsersModel']->setFields('username:sanitizeAll,e_mail:sanitizeAll,password:sha1','none'); + + $this->m['UsersModel']->updateTable('insert'); + + $data['notice'] = $this->m['UsersModel']->notice; + + $values = $this->m['UsersModel']->getFormValues('insert','sanitizeHtml'); + $values['confirmation'] = ''; + + $data['values'] = $values; + + $this->append($data); + + $this->load('add'); + $this->right(); + } + } + else + { + $this->redirect('users/login/'.$this->lang,0); + } + } + + public function confirm($lang = 'en', $id_user = 0, $confirmation_token = '') + { + $data['title'] = 'confirm account - '.Website::$generalName; + + if ( strcmp($this->_updating,'no') === 0 ) + { + if ($this->s['registered']->status['status'] === 'logged') + { + $this->redirect('home/index/'.$this->lang,2,'you are already logged..'); + } + else + { + $clean['id_user'] = (int)$id_user; + $clean['confirmation_token'] = sanitizeAlphanum($confirmation_token); + + $data['status_confirm'] = false; + + $res = $this->m['UsersModel']->select('id_user,creation_time')->where(array("id_user"=>$clean['id_user'],"confirmation_token"=>$clean['confirmation_token'],"has_confirmed"=>1,"deleted"=>"no"))->send(); + + // echo $this->m['UsersModel']->getQuery(); + + if (count($res) > 0) + { + $now = time(); + $checkTime = $res[0]['regusers']['creation_time'] + Account::$confirmTime; + if ($checkTime > $now) + { + $this->m['UsersModel']->values = array('has_confirmed' => 0, 'creation_time' => 0); + if ($this->m['UsersModel']->update($clean['id_user'])) + { + $data['status_confirm'] = true; + + //ad a record in the profile table + $this->m['ProfileModel']->values = array('created_by' => $clean['id_user']); + $this->m['ProfileModel']->insert(); + + } + } + } + + // var_dump($data['status_confirm']); + + $this->append($data); + $this->load('confirmation'); + $this->right(); + } + } + else + { + $this->redirect('users/login/'.$this->lang,0); + } + } + + public function change($lang = 'en', $id_user = 0, $forgot_token = '') + { + session_start(); + + $data['title'] = 'change password - '.Website::$generalName; + + if ( strcmp($this->_updating,'no') === 0 ) + { + if ($this->s['registered']->status['status'] === 'logged') + { + $this->redirect('home/index/'.$this->lang,2,'you are already logged..'); + } + else + { + $clean['id_user'] = (int)$id_user; + $clean['forgot_token'] = sanitizeAlphanum($forgot_token); + + $res = $this->m['UsersModel']->select('username,id_user,forgot_time,e_mail')->where(array("id_user"=>$clean['id_user'],"forgot_token"=>$clean['forgot_token'],"has_confirmed"=>0,"deleted"=>"no"))->send(); + + if (count($res) > 0) + { + $now = time(); + $checkTime = $res[0]['regusers']['forgot_time'] + Account::$confirmTime; + if ($checkTime > $now) + { + $username = $res[0]['regusers']['username']; + $email = $res[0]['regusers']['e_mail']; + + $newPassword = generateString(10); + $this->m['UsersModel']->values = array('password' => sha1($newPassword), 'forgot_time' => 0); + if ($this->m['UsersModel']->update($clean['id_user'])) + { + $result = Account::sendpassword($username,$email,$newPassword); + + if ($result) + { + $_SESSION['status'] = 'sent_new_password'; + } + else + { + $_SESSION['status'] = 'sent_new_password_error'; + } + + $hed = new HeaderObj(DOMAIN_NAME); + $hed->redirect('users/notice/'.Lang::$current,1); + + } + } + } + + $this->append($data); + $this->load('change'); + $this->right(); + } + } + else + { + $this->redirect('users/login/'.$this->lang,0); + } + } + + public function forgot($lang = 'en') + { + $data['title'] = 'request password - '.Website::$generalName; + + if ( strcmp($this->_updating,'no') === 0 ) + { + session_start(); + + if ( isset($_SESSION['status']) ) unset($_SESSION['status']); + + $this->shift(1); + + if ($this->s['registered']->status['status'] === 'logged') + { + $this->redirect('home/index/'.$this->lang,2,'you are already logged..'); + } + else + { + $data['notice'] = null; + + if (isset($_POST['forgotAction'])) + { + if (isset($_POST['username'])) + { + $this->m['UsersModel']->forgot($_POST['username']); + $data['notice'] = $this->m['UsersModel']->notice; + } + } + + $this->append($data); + + $this->load('forgot'); + $this->right(); + } + } + else + { + $this->redirect('users/login/'.$this->lang,0); + } + } + + public function notice($lang = 'en') + { + $data['title'] = 'notice - '.Website::$generalName; + + if ( strcmp($this->_updating,'no') === 0 ) + { + session_start(); + if ($this->s['registered']->status['status'] === 'logged') + { + $this->redirect('home/index/'.$this->lang,2,'you are already logged..'); + } + else + { + $this->load('notice'); + $this->right(); + } + } + else + { + $this->redirect('users/login/'.$this->lang,0); + } + } + +} \ No newline at end of file diff --git a/Application/Controllers/VideocardsController.php b/Application/Controllers/VideocardsController.php new file mode 100644 index 0000000..a27e723 --- /dev/null +++ b/Application/Controllers/VideocardsController.php @@ -0,0 +1,127 @@ +. + +if (!defined('EG')) die('Direct access not allowed!'); + +class VideocardsController extends GenericController +{ + + public function __construct($model, $controller, $queryString) + { + + parent::__construct($model, $controller, $queryString); + + //load the model + $this->model('HardwareModel'); + $this->model('RevisionsModel'); + $this->model('VideocardsModel'); + $this->model('TalkModel'); + + $this->mod = $this->m['VideocardsModel']; + + $this->m['HardwareModel']->id_user = $this->s['registered']->status['id_user']; + $this->m['HardwareModel']->type = 'videocard'; + + $this->m['HardwareModel']->setConditions(Videocard::videoList(),'video_card_works',Videocard::$interface); + + $this->m['HardwareModel']->setFields('model,kernel,description,distribution,video_card_works,comm_year,pci_id,interface,driver,other_names','sanitizeAll'); + + $argKeys = array( + 'page:forceNat' => 1, + 'history_page:forceNat' => 1, + 'vendor:sanitizeString' => 'undef', + 'comm_year:sanitizeString' => 'undef', + 'video_card_works:sanitizeString' => 'undef', + 'interface:sanitizeString' => 'undef', + 'sort-by:sanitizeString' => 'video-card-works', + 'search_string:sanitizeString' => 'undef' + ); + + $this->setArgKeys($argKeys); + + $data['title'] = 'Videocards'; + + $data['intefaceOptions'] = Videocard::$interface; + $data['worksOptions'] = Videocard::$videoSelect; + $data['worksField'] = 'video_card_works'; + + $data['notFoundString'] = "No video cards found"; + + $this->append($data); + } + + public function catalogue($lang = 'en') + { + $this->shift(1); + + $whereArray = array( + 'type' => $this->mod->type, + 'vendor' => $this->viewArgs['vendor'], + 'comm_year' => $this->viewArgs['comm_year'], + 'video_card_works' => $this->viewArgs['video_card_works'], + 'interface' => $this->viewArgs['interface'], + ); + + $this->mod->setWhereQueryClause($whereArray); + + parent::catalogue($lang); + } + + public function view($lang = 'en', $id = 0, $name = null) + { + parent::view($lang, $id, $name); + } + + public function history($lang = 'en', $id = 0) + { + parent::history($lang, $id); + } + + public function revision($lang = 'en', $id_rev = 0) + { + parent::revision($lang, $id_rev); + } + + public function insert($lang = 'en', $token = '') + { + parent::insert($lang, $token); + } + + public function update($lang = 'en', $token = '') + { + parent::update($lang, $token); + } + + public function differences($lang = 'en', $id_hard = 0, $id_rev = 0) + { + parent::differences($lang, $id_hard, $id_rev); + } + + public function climb($lang = 'en', $id_rev = 0, $token = '') + { + parent::climb($lang, $id_rev, $token); + } + + public function talk($lang = 'en', $id_hard = 0, $token = '') + { + parent::talk($lang, $id_hard, $token); + } + +} diff --git a/Application/Controllers/WebcamsController.php b/Application/Controllers/WebcamsController.php new file mode 100644 index 0000000..41807ed --- /dev/null +++ b/Application/Controllers/WebcamsController.php @@ -0,0 +1,127 @@ +. + +if (!defined('EG')) die('Direct access not allowed!'); + +class WebcamsController extends GenericController +{ + + public function __construct($model, $controller, $queryString) + { + + parent::__construct($model, $controller, $queryString); + + //load the model + $this->model('HardwareModel'); + $this->model('RevisionsModel'); + $this->model('WebcamsModel'); + $this->model('TalkModel'); + + $this->mod = $this->m['WebcamsModel']; + + $this->m['HardwareModel']->id_user = $this->s['registered']->status['id_user']; + $this->m['HardwareModel']->type = 'webcam'; + + $this->m['HardwareModel']->setConditions(Webcams::$select,'webcam_works',Webcams::$interface); + + $this->m['HardwareModel']->setFields('model,kernel,description,distribution,comm_year,webcam_works,pci_id,interface,driver,other_names','sanitizeAll'); + + $argKeys = array( + 'page:forceNat' => 1, + 'history_page:forceNat' => 1, + 'vendor:sanitizeString' => 'undef', + 'comm_year:sanitizeString' => 'undef', + 'webcam_works:sanitizeString' => 'undef', + 'interface:sanitizeString' => 'undef', + 'sort-by:sanitizeString' => 'webcam-works', + 'search_string:sanitizeString' => 'undef' + ); + + $this->setArgKeys($argKeys); + + $data['title'] = 'Webcam'; + + $data['intefaceOptions'] = Webcams::$interface; + $data['worksOptions'] = Webcams::$select; + $data['worksField'] = 'webcam_works'; + + $data['notFoundString'] = "No webcams found"; + + $this->append($data); + } + + public function catalogue($lang = 'en') + { + $this->shift(1); + + $whereArray = array( + 'type' => $this->mod->type, + 'vendor' => $this->viewArgs['vendor'], + 'comm_year' => $this->viewArgs['comm_year'], + 'webcam_works' => $this->viewArgs['webcam_works'], + 'interface' => $this->viewArgs['interface'], + ); + + $this->mod->setWhereQueryClause($whereArray); + + parent::catalogue($lang); + } + + public function view($lang = 'en', $id = 0, $name = null) + { + parent::view($lang, $id, $name); + } + + public function history($lang = 'en', $id = 0) + { + parent::history($lang, $id); + } + + public function revision($lang = 'en', $id_rev = 0) + { + parent::revision($lang, $id_rev); + } + + public function insert($lang = 'en', $token = '') + { + parent::insert($lang, $token); + } + + public function update($lang = 'en', $token = '') + { + parent::update($lang, $token); + } + + public function differences($lang = 'en', $id_hard = 0, $id_rev = 0) + { + parent::differences($lang, $id_hard, $id_rev); + } + + public function climb($lang = 'en', $id_rev = 0, $token = '') + { + parent::climb($lang, $id_rev, $token); + } + + public function talk($lang = 'en', $id_hard = 0, $token = '') + { + parent::talk($lang, $id_hard, $token); + } + +} diff --git a/Application/Controllers/WifiController.php b/Application/Controllers/WifiController.php new file mode 100644 index 0000000..8bf4c72 --- /dev/null +++ b/Application/Controllers/WifiController.php @@ -0,0 +1,127 @@ +. + +if (!defined('EG')) die('Direct access not allowed!'); + +class WifiController extends GenericController +{ + + public function __construct($model, $controller, $queryString) + { + + parent::__construct($model, $controller, $queryString); + + //load the model + $this->model('HardwareModel'); + $this->model('RevisionsModel'); + $this->model('WifiModel'); + $this->model('TalkModel'); + + $this->mod = $this->m['WifiModel']; + + $this->m['HardwareModel']->id_user = $this->s['registered']->status['id_user']; + $this->m['HardwareModel']->type = 'wifi'; + + $this->m['HardwareModel']->setConditions(Wifi::$wifiSelect,'wifi_works',ThreeGcards::interfaceList()); + + $this->m['HardwareModel']->setFields('model,kernel,description,distribution,comm_year,wifi_works,pci_id,interface,driver,other_names','sanitizeAll'); + + $argKeys = array( + 'page:forceNat' => 1, + 'history_page:forceNat' => 1, + 'vendor:sanitizeString' => 'undef', + 'comm_year:sanitizeString' => 'undef', + 'wifi_works:sanitizeString' => 'undef', + 'interface:sanitizeString' => 'undef', + 'sort-by:sanitizeString' => 'wifi-works', + 'search_string:sanitizeString' => 'undef' + ); + + $this->setArgKeys($argKeys); + + $data['title'] = 'Wifi'; + + $data['intefaceOptions'] = Wifi::$interface; + $data['worksOptions'] = Wifi::$wifiSelect; + $data['worksField'] = 'wifi_works'; + + $data['notFoundString'] = "No wifi cards found"; + + $this->append($data); + } + + public function catalogue($lang = 'en') + { + $this->shift(1); + + $whereArray = array( + 'type' => $this->mod->type, + 'vendor' => $this->viewArgs['vendor'], + 'comm_year' => $this->viewArgs['comm_year'], + 'wifi_works' => $this->viewArgs['wifi_works'], + 'interface' => $this->viewArgs['interface'], + ); + + $this->mod->setWhereQueryClause($whereArray); + + parent::catalogue($lang); + } + + public function view($lang = 'en', $id = 0, $name = null) + { + parent::view($lang, $id, $name); + } + + public function history($lang = 'en', $id = 0) + { + parent::history($lang, $id); + } + + public function revision($lang = 'en', $id_rev = 0) + { + parent::revision($lang, $id_rev); + } + + public function insert($lang = 'en', $token = '') + { + parent::insert($lang, $token); + } + + public function update($lang = 'en', $token = '') + { + parent::update($lang, $token); + } + + public function differences($lang = 'en', $id_hard = 0, $id_rev = 0) + { + parent::differences($lang, $id_hard, $id_rev); + } + + public function climb($lang = 'en', $id_rev = 0, $token = '') + { + parent::climb($lang, $id_rev, $token); + } + + public function talk($lang = 'en', $id_hard = 0, $token = '') + { + parent::talk($lang, $id_hard, $token); + } + +} diff --git a/Application/Controllers/WikiController.php b/Application/Controllers/WikiController.php new file mode 100644 index 0000000..f3da19f --- /dev/null +++ b/Application/Controllers/WikiController.php @@ -0,0 +1,644 @@ +. + +if (!defined('EG')) die('Direct access not allowed!'); + +class WikiController extends BaseController +{ + + public function __construct($model, $controller, $queryString) { + + $this->_topMenuClasses['wiki'] = " class='currentitem'"; + + parent::__construct($model, $controller, $queryString); + + $this->model('UsersModel'); + $this->model('WikiModel'); + $this->model('WikirevisionsModel'); + $this->model('WikitalkModel'); + + $this->m['WikiModel']->id_user = (int)$this->s['registered']->status['id_user']; + } + + public function insert($lang = 'en') + { + $this->shift(1); + + $data['pagePreview'] = null; + + $data['title'] = 'insert a wiki page - '.Website::$generalName; + + $this->m['WikiModel']->setFields('title,page','sanitizeAll'); + + $data['notice'] = null; + + $this->s['registered']->checkStatus(); + + if ($this->s['registered']->status['status'] === 'logged') + { + if ($this->m['UsersModel']->isBlocked($this->s['registered']->status['id_user'])) $this->redirect('my/home/'.$this->lang,2,'your account has been blocked..'); + + if (isset($_POST['insertAction'])) + { + //insert the new wiki page + $this->m['WikiModel']->updateTable('insert'); + + if ($this->m['WikiModel']->queryResult) + { + $domainName = rtrim(Url::getRoot(),"/"); + header('Location: '.$domainName.'/wiki/page/'.$this->lang.'/'.$this->m['WikiModel']->lastTitleClean); + die(); + } + } + + $data['pagePreview'] = $this->getPreview(); + + $data['notice'] = $this->m['WikiModel']->notice; + + $data['submitName'] = "insertAction"; + $data['hiddenInput'] = null; + + $data['values'] = $this->m['WikiModel']->getFormValues('insert','sanitizeHtml'); + $this->append($data); + + $this->load('form'); + $this->load('bottom_left'); + $this->right(); + } + else + { + $this->redirect("users/login/".$this->lang."?redirect=".$this->controller."/insert/".$this->lang,0); + } + } + + public function update($lang = 'en') + { + $this->shift(1); + + $data['pagePreview'] = null; + + $data['title'] = 'update a wiki page - '.Website::$generalName; + + $this->m['WikiModel']->setFields('title,page','sanitizeAll'); + + $data['notice'] = null; + $this->s['registered']->checkStatus(); + + if (isset($_POST['id_wiki'])) + { + //get the id + $clean['id_wiki'] = (int)$_POST['id_wiki']; + $title = $this->m['WikiModel']->getTheModelName($clean['id_wiki']); + + if ($this->s['registered']->status['status'] === 'logged') + { + + if ($this->m['UsersModel']->isBlocked($this->s['registered']->status['id_user'])) $this->redirect('my/home/'.$this->lang,2,'your account has been blocked..'); + + if ($this->m['WikiModel']->isBlocked($clean['id_wiki'])) $this->redirect('wiki/page/'.$this->lang,2,'this page has been blocked..'); + + if ($this->m['WikiModel']->isDeleted($clean['id_wiki'])) $this->redirect('wiki/page/'.$this->lang,2,'this page has been deleted..'); + + $deleted = $this->m['WikiModel']->select("wiki.deleted")->where(array("id_wiki"=>$clean['id_wiki']))->limit(1)->toList('wiki.deleted')->send(); + + $data['tree_name'] = $title; + + if (isset($_POST['updateAction'])) + { + //carry out the update database action + $this->m['WikiModel']->updateTable('update'); + + if ($this->m['WikiModel']->queryResult) + { + $domainName = rtrim(Url::getRoot(),"/"); + header('Location: '.$domainName.'/wiki/page/'.$this->lang.'/'.$this->m['WikiModel']->lastTitleClean); + die(); + } + } + + $data['pagePreview'] = $this->getPreview(); + + $data['notice'] = $this->m['WikiModel']->notice; + + $data['id_wiki'] = $clean['id_wiki']; + $data['submitName'] = "updateAction"; + + $data['values'] = $this->m['WikiModel']->getFormValues('update','sanitizeHtml'); + $data['hiddenInput'] = "\n"; + + $this->append($data); + + $this->load('form'); + $this->load('bottom_left'); + $this->right(); + } + else + { + $domainName = rtrim(Url::getRoot(),"/"); + header('Location: '.$domainName."/users/login/".$this->lang."?redirect=".$this->controller."/page/".$this->lang."/".titleForRedirect($title)); + die(); + } + } + else + { + $this->redirect($this->controller.'/page/'.$this->lang); + } + } + + //get the preview of the description entry + protected function getPreview() + { + if (isset($_POST['previewAction'])) + { + $this->m['WikiModel']->result = false; + return $this->request->post('page','','sanitizeHtml'); + } + return null; + } + + public function page($lang = 'en', $title_clean = null) + { + $this->shift(2); + + $data['title'] = 'main page - '.Website::$generalName; + $clean['title_clean'] = sanitizeAll($title_clean); + + $data['isDeleted'] = false; + $data['isBlocked'] = false; + + if (isset($title_clean)) + { + $res = $this->m['WikiModel']->select()->where(array('title_clean'=>$clean['title_clean']))->orderBy('id_wiki desc')->limit(1)->send(); + + if ( count($res) > 0 ) + { + $data['table'] = $res; + $data['tree_name'] = $res[0]['wiki']['title']; + $data['title'] = $res[0]['wiki']['title'] . ' - ' . Website::$generalName; + $data['isDeleted'] = $this->m['WikiModel']->isDeleted($res[0]['wiki']['id_wiki']); + $data['isBlocked'] = $this->m['WikiModel']->isBlocked($res[0]['wiki']['id_wiki']); + + if ( count($res) < 2 ) + { + $data['talk_number'] = $this->m['WikitalkModel']->select('count(*) as numb,id_wiki')->where(array('id_wiki'=>$res[0]['wiki']['id_wiki'],'deleted'=>'no'))->rowNumber(); + + $viewFile = 'wiki_page'; + $data['id_wiki'] = $res[0]['wiki']['id_wiki']; + } + else + { + $viewFile = 'select'; + } + } + else + { + $rev = new WikirevisionsModel(); + $res_rev = $rev->select()->where(array('title_clean'=>$clean['title_clean']))->orderBy('id_rev desc')->limit(1)->send(); + if ( count($res_rev) > 0 ) + { + $clean['idWiki'] = $rev->getIdPage($res_rev[0]['wiki_revisions']['id_rev']); + $newTitle = $this->m['WikiModel']->getTheModelName($clean['idWiki']); + $n = titleForRedirect($newTitle); + $domainName = rtrim(Url::getRoot(),"/"); + header('Location: '.$domainName.'/wiki/page/'.$this->lang.'/'.$n); + die(); + } + else + { + $viewFile = 'not_found'; + } + } + } + else + { + $this->redirect('wiki/page/'.$this->lang.'/Main-Page'); + } + + $data['md_javascript'] = "moderator_dialog(\"pageblock\",\"page\");moderator_dialog(\"pageunblock\",\"page\");moderator_dialog(\"pagehide\",\"page_del\");moderator_dialog(\"pageshow\",\"page_del\");"; + + $this->append($data); + + $this->load($viewFile); + $this->load('bottom_left'); + $this->load('moderator_dialog'); + $this->right(); + } + + public function history($lang = 'en', $id = 0) + { + $argKeys = array( + 'page:forceNat' => 1, + ); + + $this->setArgKeys($argKeys); + $this->shift(2); + + $clean['id'] = (int)$id; + $data['id'] = $clean['id']; + $data['tree_name'] = $this->m['WikiModel']->getTheModelName($clean['id']); + $data['isBlocked'] = $this->m['WikiModel']->isBlocked($clean['id']); + $data['isDeleted'] = $this->m['WikiModel']->isDeleted($clean['id']); + + $data['title'] = 'history - '.Website::$generalName; + + //get the first revision + $res = $this->m['WikirevisionsModel']->db->select('revisions','id_rev','id_wiki='.$clean['id'],null,'id_rev',1); + if (count($res) > 0) + { + $data['firstRev'] = $res[0]['wiki_revisions']['id_rev']; + } + + $res1 = $this->m['WikiModel']->db->select('wiki','update_date,created_by','id_wiki='.$clean['id']); + + $this->m['WikirevisionsModel']->setWhereQueryClause(array('id_wiki' => $clean['id'])); + + //load the Pages helper + $this->helper('Pages',$this->controller.'/history/'.$this->lang.'/'.$clean['id'],'page'); + //get the number of records + $recordNumber = $this->m['WikirevisionsModel']->rowNumber(); + $page = $this->viewArgs['page']; + //set the limit clause + $this->m['WikirevisionsModel']->limit = $this->h['Pages']->getLimit($page,$recordNumber,20); + $res2 = $this->m['WikirevisionsModel']->getFields('update_date,created_by,id_rev'); + + $data['pageList'] = $this->h['Pages']->render($page-3,7); + + $data['rev1'] = $res1; + $data['rev2'] = $res2; + + $this->append($data); + $this->load('history'); + $this->load('bottom_left'); + $this->right(); + } + + public function revision($lang = 'en', $id_rev = 0) + { + $argKeys = array( + 'page:forceNat' => 1, + ); + + $this->setArgKeys($argKeys); + $this->shift(2); + + $clean['id_rev'] = (int)$id_rev; + + $this->m['WikirevisionsModel']->setWhereQueryClause(array("id_rev" => $clean['id_rev'])); + $data['table'] = $this->m['WikirevisionsModel']->getAll(); + + $data['id_wiki'] = 0; + $data['created_by'] = null; + $data['update_date'] = null; + $data['tree_name'] = null; + $data['tree'] = null; + $data['tree'] = null; + $data['title'] = 'revision - '.Website::$generalName; + $data['isDeleted'] = false; + + if (count($data['table']) > 0) + { + $data['id_wiki'] = (int)$data['table'][0]['wiki_revisions']['id_wiki']; + $data['isDeleted'] = $this->m['WikiModel']->isDeleted($data['id_wiki']); + $data['tree_name'] = $this->m['WikiModel']->getTheModelName($data['id_wiki']); + $data['tree'] = $this->getSpecPageLink() . " » " . "toWikiPage($data['id_wiki'])."'>".$data['tree_name'].""." » " . $this->getHistoryLink($data['id_wiki']) . " » ".gtext('Revision'); + + $data['created_by'] = $data['table'][0]['wiki_revisions']['created_by']; + $data['update_date'] = $data['table'][0]['wiki_revisions']['update_date']; + } + + $this->append($data); + $this->load('wiki_page'); + $this->load('bottom_left'); + $this->right(); + } + + public function differences($lang = 'en', $id_wiki = 0, $id_rev = 0) + { + $this->shift(3); + + $data['title'] = 'differences - '.Website::$generalName; + + $clean['id_wiki'] = (int)$id_wiki; + $clean['id_rev'] = (int)$id_rev; + + $data['id_wiki'] = $clean['id_wiki']; + $tree_name = $this->m['WikiModel']->getTheModelName((int)$clean['id_wiki']); + $data['tree_name'] = $tree_name; + $data['tree'] = $this->getSpecPageLink() . " » " . "toWikiPage($clean['id_wiki'])."'>".$data['tree_name']."" ." » " . $this->getHistoryLink($data['id_wiki']) . " » ".gtext('Differences'); + + $data['isDeleted'] = $this->m['WikiModel']->isDeleted($clean['id_wiki']); + $data['showDiff'] = false; + + $diffArray = array(); + + if (strcmp($clean['id_wiki'],0) !== 0 and strcmp($clean['id_rev'],0) !== 0) + { + $this->m['WikirevisionsModel']->where(array('id_wiki' => $clean['id_wiki'],'id_rev' => '<='.$clean['id_rev'])); + $this->m['WikirevisionsModel']->limit = 2; + $res = $this->m['WikirevisionsModel']->getAll(); + if (count($res) > 1) + { + $newArray = $res[0]['wiki_revisions']; + $oldArray = $res[1]['wiki_revisions']; + + $data['update_new'] = $newArray['update_date']; + $data['update_old'] = $oldArray['update_date']; + $data['created_by'] = $newArray['created_by']; + + $diffArray = $this->m['WikiModel']->getDiffArray($oldArray, $newArray); + + $data['showDiff'] = true; + } + } + else if (strcmp($clean['id_wiki'],0) !== 0 and strcmp($clean['id_rev'],0) === 0) + { + $this->m['WikiModel']->where(array('id_wiki' => $clean['id_wiki'])); + $lastRes = $this->m['WikiModel']->getAll(); + + if (count($lastRes) > 0) + { + $this->m['WikirevisionsModel']->setWhereQueryClause(array('id_wiki' => $clean['id_wiki'])); + $this->m['WikirevisionsModel']->limit = 1; + $revRes = $this->m['WikirevisionsModel']->getAll(); + + if (count($revRes) > 0) + { + $newArray = $lastRes[0]['wiki']; + $oldArray = $revRes[0]['wiki_revisions']; + + $data['update_new'] = $newArray['update_date']; + $data['update_old'] = $oldArray['update_date']; + $data['created_by'] = $newArray['created_by']; + + $diffArray = $this->m['WikiModel']->getDiffArray($oldArray, $newArray); + + $data['showDiff'] = true; + } + } + + } + + $data['fieldsWithBreaks'] = $this->m['WikiModel']->fieldsWithBreaks; + $data['diffArray'] = $diffArray; + + $this->append($data); + $this->load('differences'); + $this->load('bottom_left'); + $this->right(); + } + + public function climb($lang = 'en', $id_rev = 0) + { + $this->shift(2); + + $this->m['WikiModel']->setFields('title,page','sanitizeAll'); + + $data['title'] = 'make current - '.Website::$generalName; + + $clean['id_rev'] = (int)$id_rev; + $clean['id_wiki'] = (int)$this->m['WikirevisionsModel']->getIdPage($clean['id_rev']); + + if ($clean['id_wiki'] !== 0) + { + + $data['isDeleted'] = $this->m['WikiModel']->isDeleted($clean['id_wiki']); + + $data['id_rev'] = $clean['id_rev']; + $data['id_wiki'] = $clean['id_wiki']; + $data['tree_name'] = $this->m['WikiModel']->getTheModelName($clean['id_wiki']); + $data['name'] = $data['tree_name']; + $data['tree'] = $this->getSpecPageLink() . " » " . "toWikiPage($clean['id_wiki'])."'>".$data['tree_name'].""." » " . $this->getHistoryLink($clean['id_wiki']) . " » " . gtext('Make current'); + + $data['notice'] = null; + $this->s['registered']->checkStatus(); + + if ($this->s['registered']->status['status'] === 'logged') + { + if ($this->m['UsersModel']->isBlocked($this->s['registered']->status['id_user'])) $this->redirect('my/home/'.$this->lang,2,'your account has been blocked..'); + + if ($this->m['WikiModel']->isBlocked($clean['id_wiki'])) $this->redirect('wiki/page/'.$this->lang,2,'this page has been blocked..'); + + if ($this->m['WikiModel']->isDeleted($clean['id_wiki'])) $this->redirect('wiki/page/'.$this->lang,2,'this page has been deleted..'); + + if (isset($_POST['confirmAction'])) + { + $this->m['WikiModel']->makeCurrent($clean['id_rev']); + + if ($this->m['WikiModel']->queryResult) + { + $domainName = rtrim(Url::getRoot(),"/"); + header('Location: '.$domainName.'/wiki/page/'.$this->lang.'/'.$this->m['WikiModel']->lastTitleClean); + die(); + } + + $data['notice'] = $this->m['WikiModel']->notice; + } + + $this->append($data); + $this->load('climb'); + $this->load('bottom_left'); + $this->right(); + } + else + { + $this->redirect("users/login/".$this->lang."?redirect=".$this->controller."/page/".$this->lang."/".encodeUrl($data['tree_name']),0); + } + } + } + + public function talk($lang = 'en', $id_wiki = 0) + { + $this->shift(2); + + $this->m['WikitalkModel']->setFields('title,message','sanitizeAll'); + + $data['title'] = 'talk - '.Website::$generalName; + + $clean['id_wiki'] = (int)$id_wiki; + $data['id_wiki'] = $clean['id_wiki']; + $data['tree_name'] = $this->m['WikiModel']->getTheModelName($clean['id_wiki']); + $data['isBlocked'] = $this->m['WikiModel']->isBlocked($clean['id_wiki']); + $data['isDeleted'] = $this->m['WikiModel']->isDeleted($clean['id_wiki']); + + $data['tree'] = $this->getSpecPageLink() . " » " . "toWikiPage($clean['id_wiki'])."'>".$data['tree_name'].""." » ".gtext('Talk'); + + if (isset($_POST['insertAction'])) + { + if ($this->s['registered']->status['status'] === 'logged') + { + if ($this->m['UsersModel']->isBlocked($this->s['registered']->status['id_user'])) $this->redirect('my/home/'.$this->lang,2,'your account has been blocked..'); + + if ($this->m['WikiModel']->isBlocked($clean['id_wiki'])) $this->redirect('wiki/page/'.$this->lang,2,'this page has been blocked..'); + + if ($this->m['WikiModel']->isDeleted($clean['id_wiki'])) $this->redirect('wiki/page/'.$this->lang,2,'this page has been deleted..'); + + $this->m['WikitalkModel']->values['created_by'] = $this->s['registered']->status['id_user']; + $this->m['WikitalkModel']->values['id_wiki'] = $clean['id_wiki']; + + $this->m['WikitalkModel']->updateTable('insert'); + +// if ($this->m['WikitalkModel']->queryResult) +// { +// header('Refresh: 0;url='.$_SERVER['REQUEST_URI']); +// die(); +// } + } + } + + $data['table'] = $this->m['WikitalkModel']->select()->where(array('id_wiki'=>$clean['id_wiki']))->orderBy('id_talk')->send(); + + $data['values'] = $this->m['WikitalkModel']->getFormValues('insert','sanitizeHtml'); + $data['notice'] = $this->m['WikitalkModel']->notice; + +// javascript for moderator + $data['md_javascript'] = "moderator_dialog(\"hide\",\"wiki_talk\");moderator_dialog(\"show\",\"wiki_talk\");"; + $data['go_to'] = $this->currPage."/".$this->lang."/".$clean['id_wiki']; + + $this->append($data); + $this->load('talk'); + $this->load('moderator_dialog'); + $this->right(); + } + + public function pages($lang = 'en') + { + $data['topString'] = 'list of pages'; + $data['title'] = gtext('list of pages').' - '.Website::$generalName; + + $this->setArgKeys(array('page:forceNat'=>1)); + + $this->shift(1); + + $this->helper('Pages','wiki/pages/'.$this->lang,'page'); + + $this->m['WikiModel']->clear()->select()->where(array('-deleted'=>'no'))->orderBy('id_wiki desc'); + + $recordNumber = $this->m['WikiModel']->rowNumber(); + $page = $this->viewArgs['page']; + + $this->m['WikiModel']->limit = $this->h['Pages']->getLimit($page,$recordNumber,30); + + $data['table'] = $this->m['WikiModel']->send(); + + $data['pageList'] = $this->h['Pages']->render($page-7,15); + + $this->append($data); + $this->load('pages'); + $this->right(); + } + + protected function see($lang = 'en', $status = 'blocked') + { + $this->s['registered']->check('admin'); + + switch ($status) + { + case 'deleted': + $data['topString'] = 'list of deleted pages'; + $data['title'] = gtext('list of deleted pages').' - '.Website::$generalName; + $whereClause = '-deleted'; + break; + case 'blocked': + $data['topString'] = 'list of blocked pages'; + $data['title'] = gtext('list of blocked pages').' - '.Website::$generalName; + $whereClause = 'blocked'; + break; + } + + $this->setArgKeys(array('page:forceNat'=>1)); + + $this->shift(1); + + $this->helper('Pages','wiki/'.$status.'/'.$this->lang,'page'); + + $this->m['WikiModel']->clear()->select()->where(array($whereClause=>'yes'))->orderBy('id_wiki desc'); + + $recordNumber = $this->m['WikiModel']->rowNumber(); + $page = $this->viewArgs['page']; + + $this->m['WikiModel']->limit = $this->h['Pages']->getLimit($page,$recordNumber,30); + + $data['table'] = $this->m['WikiModel']->send(); + + $data['pageList'] = $this->h['Pages']->render($page-7,15); + + $this->append($data); + $this->load('pages'); + $this->right(); + } + + public function deleted($lang = 'en') + { + $this->see($lang,'deleted'); + } + + public function blocked($lang = 'en') + { + $this->see($lang,'blocked'); + } + + //print all the modifications to the wiki + public function modifications($lang = 'en') + { + $data['title'] = gtext('last modifications').' - '.Website::$generalName; + + $this->setArgKeys(array('page:forceNat'=>1)); + + $this->shift(1); + + $whereClauseArray = array( + 'gr' => 'registered', + 'type' => 'wiki', + ); + + $this->helper('Pages','wiki/modifications/'.$this->lang,'page'); + + $this->m['HistoryModel']->clear()->select()->where($whereClauseArray)->orderBy('id_history desc'); + + $recordNumber = $this->m['HistoryModel']->rowNumber(); + $page = $this->viewArgs['page']; + + $this->m['HistoryModel']->limit = $this->h['Pages']->getLimit($page,$recordNumber,30); + + $data['table'] = $this->m['HistoryModel']->send(); + + $data['pageList'] = $this->h['Pages']->render($page-7,15); + + $this->append($data); + $this->load('modifications'); + $this->right(); + } + + protected function getViewLink($ne_name) + { + return "controller.'/page/'.$this->lang.'/'.encodeUrl($ne_name)."'>".$ne_name.""; + } + + protected function getHistoryLink($id) + { + return "controller.'/history/'.$this->lang.'/'.$id."'>".gtext('History').""; + } + + protected function getSpecPageLink() + { + return "controller.'/page/'.$this->lang."/Main-Page'>".ucfirst($this->controller).""; + } + +} \ No newline at end of file -- cgit v1.2.3