X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=lib%2Futil.php;h=9c288198cb79554f3b5be57f3bbea5422effd185;hb=de56ccca07e19c5163792c210ff5f6130e91d892;hp=24f0e5dd8b530e2e3d43097b4186f70add97339c;hpb=8e81943c2c6588be7e4c695172e757243b7a0d74;p=quix0rs-gnu-social.git diff --git a/lib/util.php b/lib/util.php index 24f0e5dd8b..9c288198cb 100644 --- a/lib/util.php +++ b/lib/util.php @@ -1,18 +1,18 @@ . */ @@ -65,25 +65,40 @@ function common_element($tag, $attrs=NULL, $content=NULL) { common_element_end($tag); } -function common_show_header($pagetitle) { - global $config, $xw; - - header('Content-Type: application/xhtml+xml'); - +function common_start_xml($doc=NULL, $public=NULL, $system=NULL) { + global $xw; $xw = new XMLWriter(); $xw->openURI('php://output'); + $xw->setIndent(true); $xw->startDocument('1.0', 'UTF-8'); - $xw->writeDTD('html', '-//W3C//DTD XHTML 1.0 Strict//EN', - 'http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd'); + if ($doc) { + $xw->writeDTD($doc, $public, $system); + } +} + +function common_end_xml() { + global $xw; + $xw->endDocument(); + $xw->flush(); +} + +function common_show_header($pagetitle, $callable=NULL, $data=NULL) { + global $config, $xw; + + header('Content-Type: application/xhtml+xml'); + + common_start_xml('html', + '-//W3C//DTD XHTML 1.0 Strict//EN', + 'http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd'); # FIXME: correct language for interface - + common_element_start('html', array('xmlns' => 'http://www.w3.org/1999/xhtml', 'xml:lang' => 'en', 'lang' => 'en')); - + common_element_start('head'); - common_element('title', NULL, + common_element('title', NULL, $pagetitle . " - " . $config['site']['name']); common_element('link', array('rel' => 'stylesheet', 'type' => 'text/css', @@ -97,11 +112,18 @@ function common_show_header($pagetitle) { 'type' => 'text/css', 'href' => $config['site']['path'] . 'theme/default/style/print.css', 'media' => 'print')); + if ($callable) { + if ($data) { + call_user_func($callable, $data); + } else { + call_user_func($callable); + } + } common_element_end('head'); common_element_start('body'); common_element_start('div', array('id' => 'wrapper')); common_element_start('div', array('id' => 'content')); - common_element_start('div', array('id' => 'header')); + common_element_start('div', array('id' => 'header')); common_element('h1', 'title', $pagetitle); common_element('h2', 'subtitle', $config['site']['name']); common_element_end('div'); @@ -111,17 +133,16 @@ function common_show_header($pagetitle) { function common_show_footer() { global $xw, $config; - common_element_start('p', 'footer'); + common_element_start('div', 'footer'); common_foot_menu(); common_license_block(); - common_element_end('p'); + common_element_end('div'); common_element_end('div'); common_element_end('div'); common_element_end('div'); common_element_end('body'); common_element_end('html'); - $xw->endDocument(); - $xw->flush(); + common_end_xml(); } function common_text($txt) { @@ -151,10 +172,9 @@ function common_license_block() { function common_head_menu() { $user = common_current_user(); common_element_start('ul', array('id' => 'menu', 'class' => ($user) ? 'five' : 'three')); - common_menu_item(common_local_url('doc', array('title' => 'help')), - _t('Help')); + common_menu_item(common_local_url('public'), _t('Public')); if ($user) { - common_menu_item(common_local_url('all', array('nickname' => + common_menu_item(common_local_url('all', array('nickname' => $user->nickname)), _t('Home')); common_menu_item(common_local_url('showstream', array('nickname' => @@ -174,13 +194,16 @@ function common_head_menu() { } function common_foot_menu() { - common_element_start('ul', 'footmenu'); + common_element_start('ul', 'footmenu menuish'); common_menu_item(common_local_url('doc', array('title' => 'about')), _t('About')); common_menu_item(common_local_url('doc', array('title' => 'help')), _t('Help')); common_menu_item(common_local_url('doc', array('title' => 'privacy')), _t('Privacy')); + common_menu_item(common_local_url('doc', array('title' => 'source')), + _t('Privacy')); + common_element_end('ul'); } function common_menu_item($url, $text, $title=NULL) { @@ -194,6 +217,7 @@ function common_menu_item($url, $text, $title=NULL) { } function common_input($id, $label, $value=NULL) { + common_element_start('p'); common_element('label', array('for' => $id), $label); $attrs = array('name' => $id, 'type' => 'text', @@ -202,14 +226,43 @@ function common_input($id, $label, $value=NULL) { $attrs['value'] = htmlspecialchars($value); } common_element('input', $attrs); + common_element_end('p'); } function common_password($id, $label) { + common_element_start('p'); common_element('label', array('for' => $id), $label); $attrs = array('name' => $id, 'type' => 'password', 'id' => $id); common_element('input', $attrs); + common_element_end('p'); +} + +function common_submit($id, $label) { + global $xw; + common_element_start('p'); + common_element_start('label', array('for' => $id)); + $xw->writeRaw(' '); + common_element_end('label'); + common_element('input', array('type' => 'submit', + 'id' => $id, + 'name' => $id, + 'value' => $label, + 'class' => 'button')); + common_element_end('p'); +} + +function common_textarea($id, $label, $content=NULL) { + common_element_start('p'); + common_element('label', array('for' => $id), $label); + common_element('textarea', array('rows' => 3, + 'cols' => 40, + 'name' => $id, + 'id' => $id, + 'class' => 'width50'), + ($content) ? $content : ' '); + common_element_end('p'); } # salted, hashed passwords are stored in the DB @@ -224,7 +277,7 @@ function common_check_user($nickname, $password) { if (is_null($user)) { return false; } else { - return (0 == strcmp(common_munge_password($password, $user->id), + return (0 == strcmp(common_munge_password($password, $user->id), $user->password)); } } @@ -296,13 +349,13 @@ function common_render_content($text) { // where should the avatar go for this user? -function common_avatar_filename($user, $extension, $size=NULL) { +function common_avatar_filename($user, $extension, $size=NULL, $extra=NULL) { global $config; if ($size) { - return $user->id . '-' . $size . $extension; + return $user->id . '-' . $size . (($extra) ? $extra : '') . $extension; } else { - return $user->id . '-original' . $extension; + return $user->id . '-original' . (($extra) ? $extra : '') . $extension; } } @@ -313,7 +366,15 @@ function common_avatar_path($filename) { function common_avatar_url($filename) { global $config; - return $config['avatar']['path'] . '/' . $filename; + return "http://".$config['site']['server'].$config['avatar']['path'].'/'.$filename; +} + +function common_default_avatar($size) { + static $sizenames = array(AVATAR_PROFILE_SIZE => 'profile', + AVATAR_STREAM_SIZE => 'stream', + AVATAR_MINI_SIZE => 'mini'); + global $config; + return "http://".$config['site']['server'].$config['site']['path'].'/'.$config['avatar']['default'][$sizenames[$size]]; } function common_local_url($action, $args=NULL) { @@ -335,6 +396,11 @@ function common_date_string($dt) { return $dt; } +function common_date_w3dtf($dt) { + $t = strtotime($dt); + return date(DATE_W3C, $t); +} + function common_redirect($url, $code=307) { static $status = array(301 => "Moved Permanently", 302 => "Found", @@ -345,7 +411,7 @@ function common_redirect($url, $code=307) { common_element('a', array('href' => $url), $url); } -function common_broadcast_notices($id) { +function common_broadcast_notice($notice) { // XXX: broadcast notices to remote subscribers // XXX: broadcast notices to SMS // XXX: broadcast notices to Jabber @@ -358,8 +424,67 @@ function common_profile_url($nickname) { return common_local_url('showstream', array('nickname' => $nickname)); } +function common_notice_form() { + common_element_start('form', array('id' => 'newnotice', 'method' => 'POST', + 'action' => common_local_url('newnotice'))); + common_textarea('noticecontent', _t('What\'s up?')); + common_submit('submit', _t('Send')); + common_element_end('form'); +} + +function common_mint_tag($extra) { + global $config; + return + 'tag:'.$config['tag']['authority'].','. + $config['tag']['date'].':'.$config['tag']['prefix'].$extra; +} + +# Should make up a reasonable root URL + +function common_root_url() { + global $config; + $pathpart = ($config['site']['path']) ? $config['site']['path']."/" : ''; + return "http://".$config['site']['server'].'/'.$pathpart; +} + +# returns $bytes bytes of random data as a hexadecimal string +# "good" here is a goal and not a guarantee + +function common_good_rand($bytes) { + # XXX: use random.org...? + if (file_exists('/dev/urandom')) { + return common_urandom($bytes); + } else { # FIXME: this is probably not good enough + return common_mtrand($bytes); + } +} + +function common_urandom($bytes) { + $h = fopen('/dev/urandom', 'rb'); + # should not block + $src = fread($h, $bytes); + fclose($h); + $enc = ''; + for ($i = 0; $i < $bytes; $i++) { + $enc .= sprintf("%02x", (ord($src[$i]))); + } + return $enc; +} + +function common_mtrand($bytes) { + $enc = ''; + for ($i = 0; $i < $bytes; $i++) { + $enc .= sprintf("%02x", mt_rand(0, 255)); + } + return $enc; +} + +function common_timestamp() { + return date('YmdHisu'); +} + // XXX: set up gettext -function _t($str) { +function _t($str) { return $str; }