diff options
author | Mike Macgirvin <mike@macgirvin.com> | 2010-07-01 16:48:07 -0700 |
---|---|---|
committer | Mike Macgirvin <mike@macgirvin.com> | 2010-07-01 16:48:07 -0700 |
commit | 6348e70daa113e8b3203de8fbc919d08c90d972e (patch) | |
tree | 1bc3dd3bc85fe6136411086785cf6753960e22f9 /include | |
download | volse-hubzilla-6348e70daa113e8b3203de8fbc919d08c90d972e.tar.gz volse-hubzilla-6348e70daa113e8b3203de8fbc919d08c90d972e.tar.bz2 volse-hubzilla-6348e70daa113e8b3203de8fbc919d08c90d972e.zip |
Initial checkin
Diffstat (limited to 'include')
-rw-r--r-- | include/Photo.php | 171 | ||||
-rw-r--r-- | include/Scrape.php | 80 | ||||
-rw-r--r-- | include/bbcode.php | 105 | ||||
-rw-r--r-- | include/datetime.php | 145 | ||||
-rw-r--r-- | include/dba.php | 138 | ||||
-rw-r--r-- | include/login.php | 19 | ||||
-rw-r--r-- | include/security.php | 17 | ||||
-rw-r--r-- | include/session.php | 76 | ||||
-rw-r--r-- | include/system_unavailable.php | 6 |
9 files changed, 757 insertions, 0 deletions
diff --git a/include/Photo.php b/include/Photo.php new file mode 100644 index 000000000..95ccccc88 --- /dev/null +++ b/include/Photo.php @@ -0,0 +1,171 @@ +<?php + +if(! class_exists("Photo")) { +class Photo { + + private $image; + private $width; + private $height; + + public function __construct($data) { + $this->image = @imagecreatefromstring($data); + if($this->image !== FALSE) { + $this->width = imagesx($this->image); + $this->height = imagesy($this->image); + } + } + + public function __destruct() { + if($this->image) + imagedestroy($this->image); + } + + public function getWidth() { + return $this->width; + } + + public function getHeight() { + return $this->height; + } + + public function getImage() { + return $this->image; + } + + public function scaleImage($max) { + + $width = $this->width; + $height = $this->height; + + $dest_width = $dest_height = 0; + + if((! $width)|| (! $height)) + return FALSE; + + if($width > $max && $height > $max) { + if($width > $height) { + $dest_width = $max; + $dest_height = intval(( $height * $max ) / $width); + } + else { + $dest_width = intval(( $width * $max ) / $height); + $dest_height = $max; + } + } + else { + if( $width > $max ) { + $dest_width = $max; + $dest_height = intval(( $height * $max ) / $width); + } + else { + if( $height > $max ) { + $dest_width = intval(( $width * $max ) / $height); + $dest_height = $max; + } + else { + $dest_width = $width; + $dest_height = $height; + } + } + } + + + $dest = imagecreatetruecolor( $dest_width, $dest_height ); + imagecopyresampled($dest, $this->image, 0, 0, 0, 0, $dest_width, $dest_height, $width, $height); + if($this->image) + imagedestroy($this->image); + $this->image = $dest; + $this->width = imagesx($this->image); + $this->height = imagesy($this->image); + + } + + + + public function scaleImageUp($min) { + + $width = $this->width; + $height = $this->height; + + $dest_width = $dest_height = 0; + + if((! $width)|| (! $height)) + return FALSE; + + if($width < $min && $height < $min) { + if($width > $height) { + $dest_width = $min; + $dest_height = intval(( $height * $min ) / $width); + } + else { + $dest_width = intval(( $width * $min ) / $height); + $dest_height = $min; + } + } + else { + if( $width < $min ) { + $dest_width = $min; + $dest_height = intval(( $height * $min ) / $width); + } + else { + if( $height < $min ) { + $dest_width = intval(( $width * $min ) / $height); + $dest_height = $min; + } + else { + $dest_width = $width; + $dest_height = $height; + } + } + } + + + $dest = imagecreatetruecolor( $dest_width, $dest_height ); + imagecopyresampled($dest, $this->image, 0, 0, 0, 0, $dest_width, $dest_height, $width, $height); + if($this->image) + imagedestroy($this->image); + $this->image = $dest; + $this->width = imagesx($this->image); + $this->height = imagesy($this->image); + + } + + + + public function scaleImageSquare($dim) { + + $dest = imagecreatetruecolor( $dim, $dim ); + imagecopyresampled($dest, $this->image, 0, 0, 0, 0, $dim, $dim, $this->width, $this->height); + if($this->image) + imagedestroy($this->image); + $this->image = $dest; + $this->width = imagesx($this->image); + $this->height = imagesy($this->image); + } + + + public function cropImage($max,$x,$y,$w,$h) { + $dest = imagecreatetruecolor( $max, $max ); + imagecopyresampled($dest, $this->image, 0, 0, $x, $y, $max, $max, $w, $h); + if($this->image) + imagedestroy($this->image); + $this->image = $dest; + $this->width = imagesx($this->image); + $this->height = imagesy($this->image); + } + + public function saveImage($path) { + imagejpeg($this->image,$path,100); + } + + public function imageString() { + ob_start(); + imagejpeg($this->image,NULL,100); + $s = ob_get_contents(); + ob_end_clean(); + return $s; + } + + +}} + diff --git a/include/Scrape.php b/include/Scrape.php new file mode 100644 index 000000000..cc5015165 --- /dev/null +++ b/include/Scrape.php @@ -0,0 +1,80 @@ +<?php + +require_once('library/HTML5/Parser.php'); + +if(! function_exists('attribute_contains')) { +function attribute_contains($attr,$s) { + $a = explode(' ', $attr); + if(count($a) && in_array($s,$a)) + return true; + return false; +}} + + +if(! function_exists('scrape_dfrn')) { +function scrape_dfrn($url) { + + $ret = array(); + $s = fetch_url($url); + + if(! $s) + return $ret; + + $dom = HTML5_Parser::parse($s); + + if(! $dom) + return $ret; + + $items = $dom->getElementsByTagName('link'); + + // get DFRN link elements + + foreach($items as $item) { + $x = $item->getAttribute('rel'); + if(substr($x,0,5) == "dfrn-") + $ret[$x] = $item->getAttribute('href'); + } + + // Pull out hCard profile elements + + $items = $dom->getElementsByTagName('*'); + foreach($items as $item) { + if(attribute_contains($item->getAttribute('class'), 'vcard')) { + $level2 = $item->getElementsByTagName('*'); + foreach($level2 as $x) { + if(attribute_contains($x->getAttribute('class'),'fn')) + $ret['fn'] = $x->textContent; + if(attribute_contains($x->getAttribute('class'),'photo')) + $ret['photo'] = $x->getAttribute('src'); + if(attribute_contains($x->getAttribute('class'),'key')) + $ret['key'] = $x->textContent; + } + } + } + + return $ret; +}} + + + + + + +if(! function_exists('validate_dfrn')) { +function validate_dfrn($a) { + $errors = 0; + if(! x($a,'key')) + $errors ++; + if(! x($a,'dfrn-request')) + $errors ++; + if(! x($a,'dfrn-confirm')) + $errors ++; + if(! x($a,'dfrn-notify')) + $errors ++; + if(! x($a,'dfrn-poll')) + $errors ++; + return $errors; +}} + + + diff --git a/include/bbcode.php b/include/bbcode.php new file mode 100644 index 000000000..60809a7e2 --- /dev/null +++ b/include/bbcode.php @@ -0,0 +1,105 @@ +<?php + //BBcode 2 HTML was written by WAY2WEB.net + + function bbcode($Text) + { + // Replace any html brackets with HTML Entities to prevent executing HTML or script + // Don't use strip_tags here because it breaks [url] search by replacing & with amp + $Text = str_replace("<", "<", $Text); + $Text = str_replace(">", ">", $Text); + + // Convert new line chars to html <br /> tags + $Text = nl2br($Text); + + // Set up the parameters for a URL search string + $URLSearchString = " a-zA-Z0-9\:\/\-\?\&\.\=\_\~\#\'"; + // Set up the parameters for a MAIL search string + $MAILSearchString = $URLSearchString . " a-zA-Z0-9\.@"; + + // Perform URL Search + $Text = preg_replace("/\[url\]([$URLSearchString]*)\[\/url\]/", '<a href="$1" target="_blank">$1</a>', $Text); + $Text = preg_replace("(\[url\=([$URLSearchString]*)\](.+?)\[/url\])", '<a href="$1" target="_blank">$2</a>', $Text); + //$Text = preg_replace("(\[url\=([$URLSearchString]*)\]([$URLSearchString]*)\[/url\])", '<a href="$1" target="_blank">$2</a>', $Text); + + // Perform MAIL Search + $Text = preg_replace("(\[mail\]([$MAILSearchString]*)\[/mail\])", '<a href="mailto:$1">$1</a>', $Text); + $Text = preg_replace("/\[mail\=([$MAILSearchString]*)\](.+?)\[\/mail\]/", '<a href="mailto:$1">$2</a>', $Text); + + // Check for bold text + $Text = preg_replace("(\[b\](.+?)\[\/b])is",'<strong>$1</strong>',$Text); + + // Check for Italics text + $Text = preg_replace("(\[i\](.+?)\[\/i\])is",'<em>$1</em>',$Text); + + // Check for Underline text + $Text = preg_replace("(\[u\](.+?)\[\/u\])is",'<u>$1</u>',$Text); + + // Check for strike-through text + $Text = preg_replace("(\[s\](.+?)\[\/s\])is",'<strike>$1</strike>',$Text); + + // Check for over-line text + $Text = preg_replace("(\[o\](.+?)\[\/o\])is",'<span class="overline">$1</span>',$Text); + + // Check for colored text + $Text = preg_replace("(\[color=(.+?)\](.+?)\[\/color\])is","<span style=\"color: $1\">$2</span>",$Text); + + // Check for sized text + $Text = preg_replace("(\[size=(.+?)\](.+?)\[\/size\])is","<span style=\"font-size: $1px\">$2</span>",$Text); + + // Check for list text + $Text = preg_replace("/\[list\](.+?)\[\/list\]/is", '<ul class="listbullet">$1</ul>' ,$Text); + $Text = preg_replace("/\[list=1\](.+?)\[\/list\]/is", '<ul class="listdecimal">$1</ul>' ,$Text); + $Text = preg_replace("/\[list=i\](.+?)\[\/list\]/s",'<ul class="listlowerroman">$1</ul>' ,$Text); + $Text = preg_replace("/\[list=I\](.+?)\[\/list\]/s", '<ul class="listupperroman">$1</ul>' ,$Text); + $Text = preg_replace("/\[list=a\](.+?)\[\/list\]/s", '<ul class="listloweralpha">$1</ul>' ,$Text); + $Text = preg_replace("/\[list=A\](.+?)\[\/list\]/s", '<ul class="listupperalpha">$1</ul>' ,$Text); + $Text = str_replace("[*]", "<li>", $Text); + + // Check for font change text + $Text = preg_replace("(\[font=(.+?)\](.+?)\[\/font\])","<span style=\"font-family: $1;\">$2</span>",$Text); + + // Declare the format for [code] layout + $CodeLayout = '<table width="90%" border="0" align="center" cellpadding="0" cellspacing="0"> + <tr> + <td class="quotecodeheader"> Code:</td> + </tr> + <tr> + <td class="codebody">$1</td> + </tr> + </table>'; + // Check for [code] text + $Text = preg_replace("/\[code\](.+?)\[\/code\]/is","$CodeLayout", $Text); + // Declare the format for [php] layout + $phpLayout = '<table width="90%" border="0" align="center" cellpadding="0" cellspacing="0"> + <tr> + <td class="quotecodeheader"> Code:</td> + </tr> + <tr> + <td class="codebody">$1</td> + </tr> + </table>'; + // Check for [php] text + $Text = preg_replace("/\[php\](.+?)\[\/php\]/is",$phpLayout, $Text); + + // Declare the format for [quote] layout + $QuoteLayout = '<table width="90%" border="0" align="center" cellpadding="0" cellspacing="0"> + <tr> + <td class="quotecodeheader"> Quote:</td> + </tr> + <tr> + <td class="quotebody">$1</td> + </tr> + </table>'; + + // Check for [quote] text + $Text = preg_replace("/\[quote\](.+?)\[\/quote\]/is","$QuoteLayout", $Text); + + // Images + // [img]pathtoimage[/img] + $Text = preg_replace("/\[img\](.+?)\[\/img\]/", '<img src="$1">', $Text); + + // [img=widthxheight]image source[/img] + $Text = preg_replace("/\[img\=([0-9]*)x([0-9]*)\](.+?)\[\/img\]/", '<img src="$3" height="$2" width="$1">', $Text); + + return $Text; + } diff --git a/include/datetime.php b/include/datetime.php new file mode 100644 index 000000000..f75193b1b --- /dev/null +++ b/include/datetime.php @@ -0,0 +1,145 @@ +<?php + +if(! function_exists('timezone_cmp')) { +function timezone_cmp($a, $b) { + if(strstr($a,'/') && strstr($b,'/')) { + if ($a == $b) return 0; + return ($a < $b) ? -1 : 1; + } + if(strstr($a,'/')) return -1; + if(strstr($b,'/')) return 1; + if ($a == $b) return 0; + return ($a < $b) ? -1 : 1; +}} + + +if(! function_exists('select_timezone')) { +function select_timezone($current = 'America/Los_Angeles') { + + $timezone_identifiers = DateTimeZone::listIdentifiers(); + + $o ='<select id="timezone_select" name="timezone">'; + + usort($timezone_identifiers, 'timezone_cmp'); + $continent = ''; + foreach($timezone_identifiers as $value) { + $ex = explode("/", $value); + if(count($ex) > 1) { + if($ex[0] != $continent) { + if($continent != '') + $o .= '</optgroup>'; + $continent = $ex[0]; + $o .= "<optgroup label=\"$continent\">"; + } + if(count($ex) > 2) + $city = substr($value,strpos($value,'/')+1); + else + $city = $ex[1]; + } + else { + $city = $ex[0]; + if($continent != 'Miscellaneous') { + $o .= '</optgroup>'; + $continent = 'Miscellaneous'; + $o .= "<optgroup label=\"$continent\">"; + } + } + $city = str_replace('_', ' ', $city); + $selected = (($value == $current) ? " selected=\"selected\" " : ""); + $o .= "<option value=\"$value\" $selected >$city</option>"; + } + $o .= '</optgroup></select>'; + return $o; +}} + + +if(! function_exists('datetime_convert')) { +function datetime_convert($from = 'UTC', $to = 'UTC', $s = 'now', $fmt = "Y-m-d H:i:s") { + $d = new DateTime($s, new DateTimeZone($from)); + $d->setTimeZone(new DateTimeZone($to)); + return($d->format($fmt)); +}} + + + +if(! function_exists('datesel')) { +function datesel($pre,$ymin,$ymax,$allow_blank,$y,$m,$d) { + + $o = ''; + $o .= "<select name=\"{$pre}year\" class=\"{$pre}year\" size=\"1\">"; + if($allow_blank) { + $sel = (($y == '') ? " selected=\"selected\" " : ""); + $o .= "<option value=\"\" $sel></option>"; + } + + for($x = $ymin; $x <= $ymax; $x ++) { + $sel = (($x == $y) ? " selected=\"selected\" " : ""); + $o .= "<option value=\"$x\" $sel>$x</option>"; + } + + $o .= "</select>-<select name=\"{$pre}month\" class=\"{$pre}month\" size=\"1\">"; + for($x = 1; $x <= 12; $x ++) { + $sel = (($x == $m) ? " selected=\"selected\" " : ""); + $o .= "<option value=\"$x\" $sel>$x</option>"; + } + + $o .= "</select>-<select name=\"{$pre}day\" class=\"{$pre}day\" size=\"1\">"; + for($x = 1; $x <= 31; $x ++) { + $sel = (($x == $d) ? " selected=\"selected\" " : ""); + $o .= "<option value=\"$x\" $sel>$x</option>"; + } + + $o .= "</select>"; + return $o; +}} + + +// TODO rewrite this buggy sucker +function relative_date($posted_date) { + + $localtime = datetime_convert('UTC',date_default_timezone_get(),$posted_date); + + $in_seconds = strtotime($localtime); + + $diff = time() - $in_seconds; + + $months = floor($diff/2592000); + $diff -= $months*2419200; + $weeks = floor($diff/604800); + $diff -= $weeks*604800; + $days = floor($diff/86400); + $diff -= $days*86400; + $hours = floor($diff/3600); + $diff -= $hours*3600; + $minutes = floor($diff/60); + $diff -= $minutes*60; + $seconds = $diff; + + + if ($months>0) { + // over a month old, + return 'over a month ago'; + } else { + if ($weeks>0) { + // weeks and days + $relative_date .= ($relative_date?', ':'').$weeks.' week'.($weeks!=1 ?'s':''); + + } elseif ($days>0) { + // days and hours + $relative_date .= ($relative_date?', ':'').$days.' day'.($days!=1?'s':''); + + } elseif ($hours>0) { + // hours and minutes + $relative_date .= ($relative_date?', ':'').$hours.' hour'.($hours!=1?'s':''); + + } elseif ($minutes>0) { + // minutes only + $relative_date .= ($relative_date?', ':'').$minutes.' minute'.($minutes!=1?'s':''); + } else { + // seconds only + $relative_date .= ($relative_date?', ':'').$seconds.' second'.($seconds!=1?'s':''); + } + } + // show relative date and add proper verbiage + return $relative_date.' ago'; +} diff --git a/include/dba.php b/include/dba.php new file mode 100644 index 000000000..3cc41ebdd --- /dev/null +++ b/include/dba.php @@ -0,0 +1,138 @@ +<?php + +// MySQL database class +// +// For debugging, insert 'dbg(x);' anywhere in the program flow. +// x = 1: display db success/failure following content +// x = 2: display full queries following content +// x = 3: display full queries using echo; which will mess up display +// really bad but will return output in stubborn cases. + +if(! class_exists('dba')) { +class dba { + + private $debug = 0; + private $db; + + function __construct($server,$user,$pass,$db,$install = false) { + $this->db = @new mysqli($server,$user,$pass,$db); + if((mysqli_connect_errno()) && (! install)) + system_unavailable(); + } + + public function q($sql) { + global $debug_text; + + if(! $this->db ) + return false; + + $result = @$this->db->query($sql); + + if($this->debug) { + + $mesg = ''; + + if($this->db->mysqli->errno) + $debug_text .= $this->db->mysqli->error . EOL; + + if($result === false) + $mesg = 'false'; + elseif($result === true) + $mesg = 'true'; + else + $mesg = $result->num_rows.' results' . EOL; + + $str = 'SQL = ' . $sql . EOL . 'SQL returned ' . $mesg . EOL; + + switch($this->debug) { + case 3: + echo $str; + break; + default: + $debug_text .= $str; + break; + } + } + + if(($result === true) || ($result === false)) + return $result; + + $r = array(); + if($result->num_rows) { + while($x = $result->fetch_array(MYSQL_ASSOC)) + $r[] = $x; + $result->free_result(); + } + + if($this->debug == 2) + $debug_text .= print_r($r, true). EOL; +// $debug_text .= quoted_printable_encode(print_r($r, true). EOL); + elseif($this->debug == 3) + echo print_r($r, true) . EOL ; +// echo quoted_printable_encode(print_r($r, true) . EOL) ; + + return($r); + } + + public function dbg($dbg) { + $this->debug = $dbg; + } + + public function escape($str) { + return @$this->db->real_escape_string($str); + } + + function __destruct() { + @$this->db->close(); + } +}} + +// Procedural functions +if(! function_exists('dbg')) { +function dbg($state) { + global $db; + $db->dbg($state); +}} + +if(! function_exists('dbesc')) { +function dbesc($str) { + global $db; + return($db->escape($str)); +}} + + +// Function: q($sql,$args); +// Description: execute SQL query with printf style args. +// Example: $r = q("SELECT * FROM `%s` WHERE `uid` = %d", +// 'user', 1); + +if(! function_exists('q')) { +function q($sql) { + + global $db; + $args = func_get_args(); + unset($args[0]); + $ret = $db->q(vsprintf($sql,$args)); + return $ret; +}} + + +// Caller is responsible for ensuring that any integer arguments to +// dbesc_array are actually integers and not malformed strings containing +// SQL injection vectors. All integer array elements should be specifically +// cast to int to avoid trouble. + + +if(! function_exists('dbesc_array_cb')) { +function dbesc_array_cb(&$item, $key) { + if(is_string($item)) + $item = dbesc($item); +}} + + +if(! function_exists('dbesc_array')) { +function dbesc_array(&$a) { + if(is_array($a) && count($a)) { + array_walk($a,'dbesc_array_cb'); + } +}}
\ No newline at end of file diff --git a/include/login.php b/include/login.php new file mode 100644 index 000000000..b11ee1719 --- /dev/null +++ b/include/login.php @@ -0,0 +1,19 @@ + +<form action="process-login" method="post" > +<div class="login-name-wrapper"> + <label for="login-name" id="label-login-name">Email address: </label> + <input type="text" maxlength="60" name="login-name" id="login-name" value="" /> +</div> +<div class="login-password-wrapper"> + <label for="login-password" id="label-login-password">Password: </label> + <input type="password" maxlength="60" name="password" id="password" value="" /> +</div> +</div> +<div class="login-extra-links"> + <?php if($register) { ?> + <a href="register" name="Register" id="register" >Register</a> + <?php } ?> + <a href="lost-password" name="Lost your password?" id="lost-password">Password Reset</a> +</div> + <input type="submit" name="submit" id="login-submit" value="Login" /> +</form> diff --git a/include/security.php b/include/security.php new file mode 100644 index 000000000..8b3452534 --- /dev/null +++ b/include/security.php @@ -0,0 +1,17 @@ +<?php + +function can_write_wall(&$a,$owner) { + if((! (local_user())) && (! (remote_user()))) + return false; + if((local_user()) && ($_SESSION['uid'] == $owner)) + return true; + + $r = q("SELECT * FROM `contact` WHERE `uid` = %d AND `id` = %d AND `blocked` = 0", + intval($owner), + intval($_SESSION['visitor_id']) + ); + if(count($r)) + return true; + return false; + +} diff --git a/include/session.php b/include/session.php new file mode 100644 index 000000000..6c32e299f --- /dev/null +++ b/include/session.php @@ -0,0 +1,76 @@ +<?php + +// Session management functions. These provide database storage of PHP +// session info. + +$session_exists = 0; +$session_expire = 180000; + +if(! function_exists('ref_session_open')) { +function ref_session_open ($s,$n) { + return true; +}} + +if(! function_exists('ref_session_read')) { +function ref_session_read ($id) { + global $session_exists; + if(x($id)) + $r = q("SELECT `data` FROM `session` WHERE `sid`= '%s'", dbesc($id)); + if(count($r)) { + $session_exists = true; + return $r[0]['data']; + } + return ''; +}} + +if(! function_exists('ref_session_write')) { +function ref_session_write ($id,$data) { + global $session_exists, $session_expire; + if(! $id || ! $data) { + return false; + } + + $expire = time() + $session_expire; + $default_expire = time() + 300; + + if($session_exists) + $r = q("UPDATE `session` + SET `data` = '%s', `expire` = '%s' + WHERE `sid` = '%s' LIMIT 1", + dbesc($data), dbesc($expire), dbesc($id)); + else + $r = q("INSERT INTO `session` + SET `sid` = '%s', `expire` = '%s', `data` = '%s'", + dbesc($id), dbesc($default_expire), dbesc($data)); + + return true; +}} + +if(! function_exists('ref_session_close')) { +function ref_session_close() { + return true; +}} + +if(! function_exists('ref_session_destroy')) { +function ref_session_destroy ($id) { + q("DELETE FROM `session` WHERE `sid` = '%s'", dbesc($id)); + return true; +}} + +if(! function_exists('ref_session_gc')) { +function ref_session_gc($expire) { + q("DELETE FROM `session` WHERE `expire` < %d", dbesc(time())); + q("OPTIMIZE TABLE `sess_data`"); + return true; +}} + +$gc_probability = 50; + +ini_set('session.gc_probability', $gc_probability); +ini_set('session.use_only_cookies', 1); +ini_set('session.cookie_httponly', 1); + + +session_set_save_handler ('ref_session_open', 'ref_session_close', + 'ref_session_read', 'ref_session_write', + 'ref_session_destroy', 'ref_session_gc'); diff --git a/include/system_unavailable.php b/include/system_unavailable.php new file mode 100644 index 000000000..48da83793 --- /dev/null +++ b/include/system_unavailable.php @@ -0,0 +1,6 @@ +<html> +<head><title>System Unavailable</title></head> +<body> +Apologies but this site is unavailable at the moment. Please try again later. +</body> +</html>
\ No newline at end of file |