diff options
Diffstat (limited to 'lib')
-rw-r--r-- | lib/action.php | 23 | ||||
-rw-r--r-- | lib/common.php | 205 | ||||
-rw-r--r-- | lib/stream.php | 27 |
3 files changed, 255 insertions, 0 deletions
diff --git a/lib/action.php b/lib/action.php new file mode 100644 index 000000000..ed25ac9d8 --- /dev/null +++ b/lib/action.php @@ -0,0 +1,23 @@ +<?php + +if (!defined('MICROBLOG')) { exit(1) } + +class Action { // lawsuit + + var $args; + + function Action() { + } + + function arg($key) { + if (array_has_key($this->args, $key)) { + return $this->args[$key]; + } else { + return NULL; + } + } + + function handle($args) { + $this->args = copy($argarray); + } +} diff --git a/lib/common.php b/lib/common.php new file mode 100644 index 000000000..973b1c6e6 --- /dev/null +++ b/lib/common.php @@ -0,0 +1,205 @@ +<?php + +if (!defined('MICROBLOG')) { exit(1) } + +# global configuration object + +// default configuration, overwritten in config.php + +$config = + array('site' => + array('name' => 'Just another µB'), + 'dsn' => + array('phptype' => 'mysql', + 'username' => 'stoica', + 'password' => 'apasswd', + 'hostspec' => 'localhost', + 'database' => 'thedb') + 'dboptions' => + array('debug' => 2, + 'portability' => DB_PORTABILITY_ALL)); + +require_once(INSTALLDIR . '/config.php'); +require_once('DB.php'); + +# Show a server error + +function common_server_error($msg) { + header('Status: 500 Server Error'); + header('Content-type: text/plain'); + + print $msg; + exit(); +} + +# Show a user error +function common_user_error($msg, $code=200) { + common_show_header('Error'); + common_element('div', array('class' => 'error'), $msg); + common_show_footer(); +} + +# Start an HTML element +function common_element_start($tag, $attrs=NULL) { + print "<$tag"; + if (is_array($attrs)) { + foreach ($attrs as $name => $value) { + print " $name='$value'"; + } + } else if (is_string($attrs)) { + print " class='$attrs'"; + } + print '>'; +} + +function common_element_end($tag) { + print "</$tag>"; +} + +function common_element($tag, $attrs=NULL, $content=NULL) { + common_element_start($tag, $attrs); + if ($content) print htmlspecialchars($content); + common_element_end($tag); +} + +function common_show_header($pagetitle) { + global $config; + common_element_start('html'); + common_element_start('head'); + common_element('title', NULL, + $pagetitle . " - " . $config['site']['name']); + common_element_end('head'); + common_element_start('body'); + common_head_menu(); +} + +function common_show_footer() { + common_foot_menu(); + common_element_end('body'); + common_element_end('html'); +} + +function common_head_menu() { + $user = common_current_user(); + common_element_start('ul', 'headmenu'); + common_menu_item(common_local_url('doc', array('title' => 'help')), + _t('Help')); + if ($user) { + common_menu_item(common_local_url('all', array('nickname' => + $user->nickname)), + _t('Home')); + common_menu_item(common_local_url('showstream', array('nickname' => + $user->nickname)), + _t('Profile'), $user->fullname || $user->nickname); + common_menu_item(common_local_url('settings'), + _t('Settings')); + common_menu_item(common_local_url('logout'), + _t('Logout')); + } else { + common_menu_item(common_local_url('login'), + _t('Login')); + common_menu_item(common_local_url('register'), + _t('Register')); + } + common_element_end('ul'); +} + +function common_foot_menu() { + common_element_start('ul', 'footmenu'); + 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')); +} + +function common_menu_item($url, $text, $title=NULL) { + $attrs['href'] = $url; + if ($title) { + $attrs['title'] = $title; + } + common_element_start('li', 'menuitem'); + common_element('a', $attrs, $text); + common_element_end('li'); +} + +# salted, hashed passwords are stored in the DB + +function common_munge_password($id, $password) { + return md5($id . $password); +} + +# check if a username exists and has matching password +function common_check_user($nickname, $password) { + $user = User::staticGet('nickname', $nickname); + if (is_null($user)) { + return false; + } else { + return (0 == strcmp(common_munge_password($password, $user->id), + $user->password)); + } +} + +# is the current user logged in? +function common_logged_in() { + return (!is_null(common_current_user())); +} + +function common_have_session() { + return (0 != strcmp(session_id(), '')); +} + +function common_ensure_session() { + if (!common_have_session()) { + @session_start(); + } +} + +function common_set_user($nickname) { + if (is_null($nickname) && common_have_session()) { + unset($_SESSION['userid']); + return true; + } else { + $user = User::staticGet('nickname', $nickname); + if ($user) { + common_ensure_session(); + $_SESSION['userid'] = $user->id; + return true; + } else { + return false; + } + } + return false; +} + +# who is the current user? +function common_current_user() { + static $user = NULL; # FIXME: global memcached + if (is_null($user)) { + if (common_have_session()) { + $id = $_SESSION['userid']; + if ($id) { + $user = User::staticGet($id); + } + } + } + return $user; +} + +# get canonical version of nickname for comparison +function common_canonical_nickname($nickname) { + # XXX: UTF-8 canonicalization (like combining chars) + return strtolower($nickname); +} + +function common_render_content($text) { + # XXX: @ messages + # XXX: # tags + # XXX: machine tags + return htmlspecialchars($text); +} + +// XXX: set up gettext + +function _t($str) { $str } diff --git a/lib/stream.php b/lib/stream.php new file mode 100644 index 000000000..9f972d75e --- /dev/null +++ b/lib/stream.php @@ -0,0 +1,27 @@ +<?php + +if (!defined('MICROBLOG')) { exit(1) } + +define('NOTICES_PER_PAGE', 20); + +class StreamAction extends Action { + + function handle($args) { + parent::handle($args); + } + + function show_notice($notice) { + $profile = $notice->getProfile(); + # XXX: RDFa + common_start_element('div', array('class' => 'notice')); + # FIXME: add the avatar + common_start_element('a', array('href' => $profile->profileurl, + 'class' => 'nickname'), + $profile->nickname); + # FIXME: URL, image, video, audio + common_element('span', array('class' => 'content'), $notice->content); + common_element('span', array('class' => 'date'), + common_date_string($notice->created)); + common_end_element('div'); + } +} |