+
+function common_error_handler($errno, $errstr, $errfile, $errline, $errcontext) {
+ switch ($errno) {
+ case E_USER_ERROR:
+ common_log(LOG_ERR, "[$errno] $errstr ($errfile:$errline)");
+ exit(1);
+ break;
+
+ case E_USER_WARNING:
+ common_log(LOG_WARNING, "[$errno] $errstr ($errfile:$errline)");
+ break;
+
+ case E_USER_NOTICE:
+ common_log(LOG_NOTICE, "[$errno] $errstr ($errfile:$errline)");
+ break;
+ }
+
+ # FIXME: show error page if we're on the Web
+ /* Don't execute PHP internal error handler */
+ return true;
+}
+
+function common_session_token() {
+ common_ensure_session();
+ if (!array_key_exists('token', $_SESSION)) {
+ $_SESSION['token'] = common_good_rand(64);
+ }
+ return $_SESSION['token'];
+}
+
+function common_disfavor_form($notice) {
+ common_element_start('form', array('id' => 'disfavor-' . $notice->id,
+ 'method' => 'post',
+ 'class' => 'disfavor',
+ 'action' => common_local_url('disfavor')));
+ common_hidden('token', common_session_token());
+ common_hidden('notice', $notice->id);
+ common_element('input', array('type' => 'submit',
+ 'id' => 'disfavor-submit-' . $notice->id,
+ 'name' => 'disfavor-submit-' . $notice->id,
+ 'class' => 'disfavor',
+ 'value' => '♥'));
+ common_element_end('form');
+}
+
+function common_favor_form($notice) {
+ common_element_start('form', array('id' => 'favor-' . $notice->id,
+ 'method' => 'post',
+ 'class' => 'favor',
+ 'action' => common_local_url('favor')));
+ common_hidden('token', common_session_token());
+ common_hidden('notice', $notice->id);
+ common_element('input', array('type' => 'submit',
+ 'id' => 'favor-submit-' . $notice->id,
+ 'name' => 'favor-submit-' . $notice->id,
+ 'class' => 'favor',
+ 'value' => '♡'));
+ common_element_end('form');
+}
+
+function common_cache_key($extra) {
+ return 'laconica:' . common_keyize(common_config('site', 'name')) . ':' . $extra;
+}
+
+function common_keyize($str) {
+ $str = strtolower($str);
+ $str = preg_replace('/\s/', '_', $str);
+ return $str;
+}
+
+function common_message_form($content, $user, $to) {
+
+ common_element_start('form', array('id' => 'message_form',
+ 'method' => 'post',
+ 'action' => common_local_url('newmessage')));
+
+ $mutual_users = $user->mutuallySubscribedUsers();
+
+ $mutual = array();
+
+ while ($mutual_users->fetch()) {
+ if ($mutual_users->id != $user->id) {
+ $mutual[$mutual_users->id] = $mutual_users->nickname;
+ }
+ }
+
+ $mutual_users->free();
+ unset($mutual_users);
+
+ common_dropdown('to', _('To'), $mutual, NULL, FALSE, $to->id);
+
+ common_element_start('p');
+
+ common_element('textarea', array('id' => 'message_content',
+ 'cols' => 60,
+ 'rows' => 3,
+ 'name' => 'content'),
+ ($content) ? $content : '');
+
+ common_element('input', array('id' => 'message_send',
+ 'name' => 'message_send',
+ 'type' => 'submit',
+ 'value' => _('Send')));
+
+ common_hidden('token', common_session_token());
+
+ common_element_end('p');
+ common_element_end('form');
+}
+
+function common_memcache() {
+ static $cache = NULL;
+ if (!common_config('memcached', 'enabled')) {
+ return NULL;
+ } else {
+ if (!$cache) {
+ $cache = new Memcache();
+ $servers = common_config('memcached', 'server');
+ if (is_array($servers)) {
+ foreach($servers as $server) {
+ $cache->addServer($server);
+ }
+ } else {
+ $cache->addServer($servers);
+ }
+ }
+ return $cache;
+ }
+}