X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=lib%2Fcommon.php;h=917fdeafa47f9d4dd646fea2d9265695f6307980;hb=2133d5a4e7fc694b097fe65282e557d99ee109ad;hp=b4c2f9b6e7e24ad60bdc1911700353a63fa6244a;hpb=3803cf2153091c4f319c379c3ac24cc8fc844b0a;p=quix0rs-gnu-social.git diff --git a/lib/common.php b/lib/common.php index b4c2f9b6e7..917fdeafa4 100644 --- a/lib/common.php +++ b/lib/common.php @@ -1,259 +1,246 @@ . */ -if (!defined('LACONICA')) { exit(1) } +if (!defined('LACONICA')) { exit(1); } + +define('LACONICA_VERSION', '0.7.1'); define('AVATAR_PROFILE_SIZE', 96); define('AVATAR_STREAM_SIZE', 48); define('AVATAR_MINI_SIZE', 24); -define('MAX_AVATAR_SIZE', 256 * 1024); - -# global configuration object - -// default configuration, overwritten in config.php - -$config = - array('site' => - array('name' => 'Just another µB'), - 'avatar' => - array('directory' => INSTALLDIR . 'files', - 'path' => '/files'), - '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 '>'; -} +define('NOTICES_PER_PAGE', 20); +define('PROFILES_PER_PAGE', 20); -function common_element_end($tag) { - print ""; -} +define('FOREIGN_NOTICE_SEND', 1); +define('FOREIGN_NOTICE_RECV', 2); +define('FOREIGN_NOTICE_SEND_REPLY', 4); -function common_element($tag, $attrs=NULL, $content=NULL) { - common_element_start($tag, $attrs); - if ($content) print htmlspecialchars($content); - common_element_end($tag); -} +define('FOREIGN_FRIEND_SEND', 1); +define('FOREIGN_FRIEND_RECV', 2); -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(); -} +define_syslog_variables(); -function common_show_footer() { - common_foot_menu(); - common_element_end('body'); - common_element_end('html'); -} +# append our extlib dir as the last-resort place to find libs -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('profilesettings'), - _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'); -} +set_include_path(get_include_path() . PATH_SEPARATOR . INSTALLDIR . '/extlib/'); -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'); -} - -function common_input($id, $label) { - common_element('label', array('for' => $id), $label); - common_element('input', array('name' => $id, - 'type' => 'text', - 'id' => $id)); -} - -# 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(); - } -} +# global configuration object -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; -} +require_once('PEAR.php'); +require_once('DB/DataObject.php'); +require_once('DB/DataObject/Cast.php'); # for dates -# 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; -} +require_once(INSTALLDIR.'/lib/language.php'); -# get canonical version of nickname for comparison -function common_canonical_nickname($nickname) { - # XXX: UTF-8 canonicalization (like combining chars) - return strtolower($nickname); -} +// This gets included before the config file, so that admin code and plugins +// can use it -function common_render_content($text) { - # XXX: @ messages - # XXX: # tags - # XXX: machine tags - return htmlspecialchars($text); -} +require_once(INSTALLDIR.'/lib/event.php'); +require_once(INSTALLDIR.'/lib/plugin.php'); -// where should the avatar go for this user? +// try to figure out where we are -function common_avatar_filename($user, $extension, $size=NULL) { - global $config; +$_server = array_key_exists('SERVER_NAME', $_SERVER) ? + strtolower($_SERVER['SERVER_NAME']) : + null; +$_path = array_key_exists('SCRIPT_NAME', $_SERVER) ? + substr($_SERVER['SCRIPT_NAME'], 1, strrpos($_SERVER['SCRIPT_NAME'], '/') - 1) : + null; - if ($size) { - return $user->id . '-' . $size . $extension; - } else { - return $user->id . '-original' . $extension; - } -} +// default configuration, overwritten in config.php -function common_avatar_path($filename) { - global $config; - return $config['avatar']['directory'] . '/' . $filename; -} +$config = + array('site' => + array('name' => 'Just another Laconica microblog', + 'server' => $_server, + 'theme' => 'default', + 'path' => $_path, + 'logfile' => null, + 'logdebug' => false, + 'fancy' => false, + 'locale_path' => INSTALLDIR.'/locale', + 'language' => 'en_US', + 'languages' => get_all_languages(), + 'email' => + array_key_exists('SERVER_ADMIN', $_SERVER) ? $_SERVER['SERVER_ADMIN'] : null, + 'broughtby' => null, + 'timezone' => 'UTC', + 'broughtbyurl' => null, + 'closed' => false, + 'inviteonly' => false, + 'private' => false, + 'dupelimit' => 60), # default for same person saying the same thing + 'syslog' => + array('appname' => 'laconica', # for syslog + 'priority' => 'debug'), # XXX: currently ignored + 'queue' => + array('enabled' => false), + 'license' => + array('url' => 'http://creativecommons.org/licenses/by/3.0/', + 'title' => 'Creative Commons Attribution 3.0', + 'image' => 'http://i.creativecommons.org/l/by/3.0/80x15.png'), + 'mail' => + array('backend' => 'mail', + 'params' => null), + 'nickname' => + array('blacklist' => array(), + 'featured' => array()), + 'profile' => + array('banned' => array()), + 'avatar' => + array('server' => null), + 'public' => + array('localonly' => true, + 'blacklist' => array(), + 'autosource' => array()), + 'theme' => + array('server' => null), + 'throttle' => + array('enabled' => false, // whether to throttle edits; false by default + 'count' => 20, // number of allowed messages in timespan + 'timespan' => 600), // timespan for throttling + 'xmpp' => + array('enabled' => false, + 'server' => 'INVALID SERVER', + 'port' => 5222, + 'user' => 'update', + 'encryption' => true, + 'resource' => 'uniquename', + 'password' => 'blahblahblah', + 'host' => null, # only set if != server + 'debug' => false, # print extra debug info + 'public' => array()), # JIDs of users who want to receive the public stream + 'sphinx' => + array('enabled' => false, + 'server' => 'localhost', + 'port' => 3312), + 'tag' => + array('dropoff' => 864000.0), + 'popular' => + array('dropoff' => 864000.0), + 'daemon' => + array('piddir' => '/var/run', + 'user' => false, + 'group' => false), + 'integration' => + array('source' => 'Laconica'), # source attribute for Twitter + 'memcached' => + array('enabled' => false, + 'server' => 'localhost', + 'port' => 11211), + 'ping' => + array('notify' => array()), + 'inboxes' => + array('enabled' => true), # on by default for new sites + ); + +$config['db'] = &PEAR::getStaticProperty('DB_DataObject','options'); + +$config['db'] = + array('database' => 'YOU HAVE TO SET THIS IN config.php', + 'schema_location' => INSTALLDIR . '/classes', + 'class_location' => INSTALLDIR . '/classes', + 'require_prefix' => 'classes/', + 'class_prefix' => '', + 'mirror' => null, + 'db_driver' => 'DB', # XXX: JanRain libs only work with DB + 'quote_identifiers' => false, + 'type' => 'mysql' ); + +if (function_exists('date_default_timezone_set')) { + /* Work internally in UTC */ + date_default_timezone_set('UTC'); +} + +// From most general to most specific: +// server-wide, then vhost-wide, then for a path, +// finally for a dir (usually only need one of the last two). + +$_config_files = array('/etc/laconica/laconica.php', + '/etc/laconica/'.$_server.'.php'); + +if (strlen($_path) > 0) { + $_config_files[] = '/etc/laconica/'.$_server.'_'.$_path.'.php'; +} + +$_config_files[] = INSTALLDIR.'/config.php'; + +$_have_a_config = false; + +foreach ($_config_files as $_config_file) { + if (file_exists($_config_file)) { + include_once($_config_file); + $_have_a_config = true; + } +} + +function _have_config() +{ + global $_have_a_config; + return $_have_a_config; +} + +// XXX: Throw a conniption if database not installed + +// Fixup for laconica.ini + +$_db_name = substr($config['db']['database'], strrpos($config['db']['database'], '/') + 1); + +if ($_db_name != 'laconica' && !array_key_exists('ini_'.$_db_name, $config['db'])) { + $config['db']['ini_'.$_db_name] = INSTALLDIR.'/classes/laconica.ini'; +} + +// XXX: how many of these could be auto-loaded on use? + +require_once('Validate.php'); +require_once('markdown.php'); + +require_once(INSTALLDIR.'/lib/util.php'); +require_once(INSTALLDIR.'/lib/action.php'); +require_once(INSTALLDIR.'/lib/theme.php'); +require_once(INSTALLDIR.'/lib/mail.php'); +require_once(INSTALLDIR.'/lib/subs.php'); +require_once(INSTALLDIR.'/lib/Shorturl_api.php'); +require_once(INSTALLDIR.'/lib/twitter.php'); + +require_once(INSTALLDIR.'/lib/clientexception.php'); +require_once(INSTALLDIR.'/lib/serverexception.php'); + +// XXX: other formats here + +define('NICKNAME_FMT', VALIDATE_NUM.VALIDATE_ALPHA_LOWER); -function common_avatar_url($filename) { - global $config; - return $config['avatar']['path'] . '/' . $filename; +function __autoload($class) +{ + if ($class == 'OAuthRequest') { + require_once('OAuth.php'); + } else if (file_exists(INSTALLDIR.'/classes/' . $class . '.php')) { + require_once(INSTALLDIR.'/classes/' . $class . '.php'); + } else if (file_exists(INSTALLDIR.'/lib/' . strtolower($class) . '.php')) { + require_once(INSTALLDIR.'/lib/' . strtolower($class) . '.php'); + } else if (mb_substr($class, -6) == 'Action' && + file_exists(INSTALLDIR.'/actions/' . strtolower(mb_substr($class, 0, -6)) . '.php')) { + require_once(INSTALLDIR.'/actions/' . strtolower(mb_substr($class, 0, -6)) . '.php'); + } } -// XXX: set up gettext +// Give plugins a chance to initialize in a fully-prepared environment -function _t($str) { $str } +Event::handle('InitializePlugin');