diff options
author | Yuchen Pei <hi@ypei.me> | 2021-10-15 09:52:00 +1100 |
---|---|---|
committer | Yuchen Pei <hi@ypei.me> | 2021-10-15 09:52:00 +1100 |
commit | 71b0e901f5fb1cfcd162d8acc23120d3f77a3152 (patch) | |
tree | 323c00faef1edc7dea2e88ff581cc2258b2b6432 /Application/Include/myFunctions.php | |
parent | 72cce24864b064b5762f4fe97fdf40d8d2ad4b51 (diff) | |
parent | 07f5140771388c9e0c8a99b0dd2e5d950bdb173b (diff) |
Merge branch 'development' into h-node
Diffstat (limited to 'Application/Include/myFunctions.php')
-rw-r--r-- | Application/Include/myFunctions.php | 542 |
1 files changed, 542 insertions, 0 deletions
diff --git a/Application/Include/myFunctions.php b/Application/Include/myFunctions.php new file mode 100644 index 0000000..b121424 --- /dev/null +++ b/Application/Include/myFunctions.php @@ -0,0 +1,542 @@ +<?php + +// h-source, a web software to build a community of people that want to share their hardware information. +// Copyright (C) 2010 Antonio Gallo (h-source-copyright.txt) +// +// This file is part of h-source +// +// h-source is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// h-source is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with h-source. If not, see <http://www.gnu.org/licenses/>. + +if (!defined('EG')) die('Direct access not allowed!'); + +function encodeUrl($url) +{ + $url = str_replace(' ','-',$url); + $url = str_replace('.','-',$url); + $url = str_replace(',','-',$url); + $url = str_replace('[','-',$url); + $url = str_replace(']','-',$url); + $url = str_replace('(','-',$url); + $url = str_replace(')','-',$url); + $url = str_replace('/','-',$url); + $url = str_replace(''','-',$url); + $url = str_replace('@','-at-',$url); + $url = str_replace('?','-',$url); + +// $temp = null; +// for ($i=0;$i<strlen($url); $i++) +// { +// if (strcmp($url[$i],' ') === 0) +// { +// $temp .= '-'; +// } +// else +// { +// if (preg_match('/^[a-zA-Z0-9\-]$/',$url[$i])) $temp .= $url[$i]; +// } +// } + +// $url = urlencode($url); +// $url = urlencode($url); + return $url; +} + +function titleForRedirect($title) +{ + return html_entity_decode(encodeUrl($title),ENT_QUOTES,DEFAULT_CHARSET); +} + +// function encodeUrl($url) +// { +// $url = str_replace(' ','-',$url); +// $url = str_replace('[','-',$url); +// $url = str_replace(']','-',$url); +// $url = str_replace('(','-',$url); +// $url = str_replace(')','-',$url); +// $url = str_replace('/','-',$url); +// $url = str_replace('@','-at-',$url); +// $url = urlencode($url); +// // $url = html_entity_decode($url, ENT_QUOTES); +// // $url = xml_encode($url); +// return $url; +// } + + +function smartDate($uglyDate = null, $lang = 'en') +{ + if (strcmp($lang,'en')) + { + return date('H:i, j F Y',strtotime($uglyDate)); + } + else + { + return date('H:i, j ',strtotime($uglyDate)).gtext(date('F',strtotime($uglyDate))).date(' Y',strtotime($uglyDate)); + } +} + +function pubDateFormat($uglyDate = null) +{ + return date('r',strtotime($uglyDate)); +} + +function sanitizeString($string) +{ + $string = preg_match('/^[a-zA-Z0-9\-\_\.\+\s]+$/',$string) ? sanitizeAll($string) : 'undef'; + return $string; +} + +function sanitizeAlphanum($string) +{ + $string = ctype_alnum($string) ? sanitizeAll($string) : 'undef'; + return $string; +} + +function sanitizePciid($string) +{ + $string = preg_match('/^[a-zA-Z0-9]{4}(\:)[a-zA-Z0-9]{4}$/',$string) ? sanitizeAll($string) : '0'; + return $string; +} + +function getOrderByClause($string) +{ + switch ($string) + { + case 'last-inserted': + $orderBy = 'hardware.id_hard desc'; + break; + case 'alphabetically': + $orderBy = 'model'; + break; + case 'alphabetically-desc': + $orderBy = 'model desc'; + break; + case 'compatibility': + $orderBy = 'compatibility, hardware.id_hard desc'; + break; + case 'compatibility-desc': + $orderBy = 'compatibility desc, hardware.id_hard desc'; + break; + case 'wifi-works': + $orderBy = 'wifi_works desc, hardware.id_hard desc'; + break; + case 'video-card-works': + $orderBy = 'video_card_works desc, hardware.id_hard desc'; + break; + case 'sound-card-works': + $orderBy = 'sound_card_works desc, hardware.id_hard desc'; + break; + case 'webcam-works': + $orderBy = 'webcam_works desc, hardware.id_hard desc'; + break; + case 'bluetooth-works': + $orderBy = 'bluetooth_works desc, hardware.id_hard desc'; + break; + case 'fingerprint-works': + $orderBy = 'fingerprint_works desc, hardware.id_hard desc'; + break; + case 'ethernet-works': + $orderBy = 'ethernet_card_works desc, hardware.id_hard desc'; + break; + case 'sdcard-works': + $orderBy = 'sd_card_works desc, hardware.id_hard desc'; + break; + case 'undef': + $orderBy = 'compatibility, hardware.id_hard desc'; + break; + default: + $orderBy = 'compatibility, hardware.id_hard desc'; + } + return $orderBy; +} + +//remove empty elements +function removeEmptyStrings($oArray) +{ + $nArray = array(); + foreach ($oArray as $oValue) + { + if (strcmp($oValue,'') !== 0) + { + $nArray[] = $oValue; + } + } + return $nArray; +} + +function diff($old, $new) +{ + $maxlen = 0; + foreach($old as $oindex => $ovalue) + { + $nkeys = array_keys($new, $ovalue); +// echo memory_get_peak_usage(true)."<br />"; + foreach($nkeys as $nindex) + { + $matrix[$oindex][$nindex] = isset($matrix[$oindex - 1][$nindex - 1]) ? + $matrix[$oindex - 1][$nindex - 1] + 1 : 1; + if($matrix[$oindex][$nindex] > $maxlen) + { + $maxlen = $matrix[$oindex][$nindex]; + $omax = $oindex + 1 - $maxlen; + $nmax = $nindex + 1 - $maxlen; + } + } + } + if($maxlen == 0) return array(array('d'=>$old, 'i'=>$new)); + return array_merge( + diff(array_slice($old, 0, $omax), array_slice($new, 0, $nmax)), + array_slice($new, $nmax, $maxlen), + diff(array_slice($old, $omax + $maxlen), array_slice($new, $nmax + $maxlen))); +} + +function htmlDiff($old, $new) +{ + $old = str_replace("\r\n"," \r\n ",$old); + $new = str_replace("\r\n"," \r\n ",$new); + + $ret = null; + $diff = diff(removeEmptyStrings(explode(' ', $old)),removeEmptyStrings(explode(' ', $new))); + foreach($diff as $k) + { + if(is_array($k)) + $ret .= (!empty($k['d'])?"<del>".implode(' ',$k['d'])."</del> ":''). + (!empty($k['i'])?"<ins>".implode(' ',$k['i'])."</ins> ":''); + else $ret .= $k . ' '; + } + return $ret; +} + + +function applyBreaks($values,$fields) +{ + $fieldsArray = explode(',',$fields); + + foreach ($fieldsArray as $field) + { + if (array_key_exists($field,$values)) + { + $values[$field] = nl2br($values[$field]); + } + } + return $values; +} + + +function getLinkToUser($user) +{ + if (strstr($user,'__')) + { + return str_replace('__',null,$user); + } + else + { + return "<a href='".Url::getRoot()."meet/user/".Lang::$current."/$user'>$user</a>"; + } +} + +function getUserName($id_user = 0) +{ + $clean['id_user'] = (int)$id_user; + $u = new UsersModel(); + return $u->getUser($clean['id_user']); +} + +function getMotivation($row,$controller) +{ + if (strcmp($row['deletion']['object'],'duplication') === 0) + { + $clean['id_hard'] = (int)$row['deletion']['id_duplicate']; + $hardware = new HardwareModel(); + $name = encodeUrl($hardware->getTheModelName($clean['id_hard'])); + return "<b>duplication</b> of the model having id <b><a href='".Url::getRoot().$controller."/view/".Lang::$current."/".$clean['id_hard']."/".$name."'>".$clean['id_hard']."</a></b>"; + } + else + { + return "<b>".$row['deletion']['object']."</b>"; + } +} + +//get the text in the right language +function gtext($string) +{ + if (isset(Lang::$i18n[Lang::$current][$string])) + { + return Lang::$i18n[Lang::$current][$string]; + } + return $string; +} + +function singular($string) +{ + if (isset(Lang::$singular[Lang::$current][$string])) + { + return Lang::$singular[Lang::$current][$string]; + } + return $string; +} + +function plural($string) +{ + if (isset(Lang::$plural[Lang::$current][$string])) + { + return Lang::$plural[Lang::$current][$string]; + } + return $string; +} + +//get the hardware info from the talk id +function getHardwareInfoFromTalkId($id = 0) +{ + $clean['id'] = (int)$id; + $talk = new TalkModel(); + $res = $talk->select('hardware.type,hardware.id_hard')->from('hardware inner join talk')->using('id_hard')->where(array('id_talk'=>$clean['id']))->send(); + return count($res) > 0 ? $res[0]['hardware'] : null; +} + +//get hardware info from id +function getHardwareInfoFromId($id = 0) +{ + $clean['id'] = (int)$id; + $hw = new HardwareModel(); + $res = $hw->select()->where(array('id_hard'=>$clean['id']))->send(); + $controller = 'home/index/en'; + $model = ''; + if (count($res) > 0) + { + $controller = Hardware::getControllerFromType($res[0]['hardware']['type']); + $controller = strcmp($controller,'') !== 0 ? $controller : 'home/index/en'; + $model = $res[0]['hardware']['model']; + } + + return array('controller'=>$controller,'model'=>$model); +} + +//get the wiki page info from the talk id +function getWikiPageInfoFromTalkId($id = 0) +{ + $clean['id'] = (int)$id; + $talk = new WikitalkModel(); + $res = $talk->select('wiki.id_wiki')->from('wiki inner join wiki_talk')->using('id_wiki')->where(array('id_talk'=>$clean['id']))->send(); + return count($res) > 0 ? $res[0]['wiki']['id_wiki'] : ''; +} + +//get the issue info from the message id +function getIssueNumberFromMessageId($id = 0) +{ + $clean['id'] = (int)$id; + $mess = new MessagesModel(); + $res = $mess->select('issues.id_issue')->from('issues inner join messages')->using('id_issue')->where(array('id_mes'=>$clean['id']))->toList('issues.id_issue')->send(); + return count($res) > 0 ? $res[0] : ''; +} + +//get thw wiki name from the id +function getWikiNameFromId($id = 0) +{ + $clean['id'] = (int)$id; + $wiki = new WikiModel(); + $name = $wiki->getTheModelName($clean['id']); + return $name; +} + +//return the URL to the moderated object page +function goToModeratedItem( $row = array() ) +{ + $url = null; + + switch ($row['type']) + { + case 'message': + $url = 'issues/view/'.Lang::$current.'/'.getIssueNumberFromMessageId($row['id']).'#message-'.$row['id']; + break; + case 'talk': + $hardInfo = getHardwareInfoFromTalkId($row['id']); + if (isset($hardInfo)) + { + $controller = Hardware::$typeToController[$hardInfo['type']]; + $url = $controller.'/talk/'.Lang::$current.'/'.$hardInfo['id_hard'].'#talk-'.$row['id']; + } + else + { + $url = 'last/modactions/'.Lang::$current; + } + break; + case 'user': + $url = 'meet/user/'.Lang::$current.'/'.getUserName($row['id']); + break; + case 'issue': + $url = 'issues/view/'.Lang::$current.'/'.$row['id']; + break; + case 'issue_del': + $url = 'issues/view/'.Lang::$current.'/'.$row['id']; + break; + case 'wiki_talk': + $url = 'wiki/talk/'.Lang::$current.'/'.getWikiPageInfoFromTalkId($row['id']).'#wiki-talk-'.$row['id']; + break; + case 'page': + $url = 'wiki/page/'.Lang::$current.'/'.encodeUrl(getWikiNameFromId($row['id'])); + break; + case 'page_del': + $url = 'wiki/page/'.Lang::$current.'/'.encodeUrl(getWikiNameFromId($row['id'])); + break; + case 'device': + $hardInfo = getHardwareInfoFromId($row['id']); + $url = $hardInfo['controller'].'/view/'.Lang::$current.'/'.$row['id'].'/'.encodeUrl($hardInfo['model']); + break; + case 'device_app': + $hardInfo = getHardwareInfoFromId($row['id']); + $url = $hardInfo['controller'].'/view/'.Lang::$current.'/'.$row['id'].'/'.encodeUrl($hardInfo['model']); + break; + case 'device_cl': + $hardInfo = getHardwareInfoFromId($row['id']); + $url = $hardInfo['controller'].'/view/'.Lang::$current.'/'.$row['id'].'/'.encodeUrl($hardInfo['model']); + break; + case 'message_ins': + $url = 'issues/view/'.Lang::$current.'/'.getIssueNumberFromMessageId($row['id']).'#message-'.$row['id']; + break; + case 'wiki_talk_ins': + $url = 'wiki/talk/'.Lang::$current.'/'.getWikiPageInfoFromTalkId($row['id']).'#wiki-talk-'.$row['id']; + break; + case 'issue_ins': + $url = 'issues/view/'.Lang::$current.'/'.$row['id']; + break; + case 'talk_ins': + $hardInfo = getHardwareInfoFromTalkId($row['id']); + if (isset($hardInfo)) + { + $controller = Hardware::$typeToController[$hardInfo['type']]; + $url = $controller.'/talk/'.Lang::$current.'/'.$hardInfo['id_hard'].'#talk-'.$row['id']; + } + else + { + $url = 'last/modactions/'.Lang::$current; + } + break; + case 'hardware': + $hardInfo = getHardwareInfoFromId($row['id']); + $url = $hardInfo['controller'].'/view/'.Lang::$current.'/'.$row['id'].'/'.encodeUrl($hardInfo['model']); + break; + case 'wiki': + $url = 'wiki/page/'.Lang::$current.'/'.encodeUrl(getWikiNameFromId($row['id'])); + break; + } + return Url::getRoot($url); +} + +function getUrlsFromIdHard($id_hard) +{ + $clean['id_hard'] = (int)$id_hard; + + $urlView = $urlTalk = Url::getRoot(); + + $deviceName = null; + + $hard = new HardwareModel(); + $res = $hard->select('type,model')->where(array('id_hard'=>$clean['id_hard']))->send(); + if (count($res) > 0) + { + $urlView = Url::getRoot().Hardware::$typeToController[$res[0]['hardware']['type']]."/view/".Lang::$current."/".$clean['id_hard']."/".encodeUrl($res[0]['hardware']['model']); + + $urlTalk = Url::getRoot().Hardware::$typeToController[$res[0]['hardware']['type']]."/talk/".Lang::$current."/".$clean['id_hard']; + + $deviceName = $res[0]['hardware']['model']; + } + + return array('urlView'=>$urlView,'urlTalk'=>$urlTalk,'modelName'=>$deviceName); + +} + +function getDiffArray($associativeArray, $oldArray, $newArray) +{ + $diffArray = array(); + foreach ($associativeArray as $field => $label) + { + if (array_key_exists($field,$oldArray) and array_key_exists($field,$newArray)) + { + $diffArray[$label] = htmlDiff($oldArray[$field], $newArray[$field]); + } + } + return $diffArray; +} + +//get the translation function +function getTranslationFunction($fieldName) +{ + $fieldsFunc = array( + "vendor" => "betterVendor", + "interface" => "translate_and_gtext", + "subtype" => "translate_and_gtext", + ); + + if (array_key_exists($fieldName,$fieldsFunc)) + { + return $fieldsFunc[$fieldName]; + } + + return "gtext"; +} + +//Map db type names to display names +function displayName($name) { + switch ($name) { + case '3G-card': + $name = '3G cards'; + break; + case 'bluetooth': + $name = 'Bluetooth'; + break; + case 'ethernet-card': + $name = 'Ethernet cards'; + break; + case 'fingerprint-reader': + $name = 'Fingerprint readers'; + break; + case 'host-controller': + $name = 'Host Controllers'; + break; + case 'modem': + $name = 'Modems'; + break; + case 'notebook': + $name = 'Notebooks'; + break; + case 'printer': + $name = 'Printers'; + break; + case 'RAID-adapter'; + $name = 'RAID adapters'; + break; + case 'scanner': + $name = 'Scanners'; + break; + case 'sd-card-reader': + $name = 'SD card readers'; + break; + case 'soundcard': + $name = 'Sound cards'; + break; + case 'videocard': + $name = 'Video cards'; + break; + case 'webcam': + $name = 'Webcams'; + break; + case 'wifi': + $name = 'Wifi cards'; + break; + case 'acquisition-card': + $name = 'Acquisition cards'; + break; + } + return $name; +} |