diff --git a/CHANGELOG b/CHANGELOG index 4f0c23233..0aab0fe96 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,5 +1,33 @@ +Version 3.4 + + Optionally, "like" and "dislike" activities don't update thread timestamp (annando) + Updated markdown libraries (annando) + Updated jQuery (StefOfficiel) + Cache zrl verification requests to prevent DSoS (issue #1453) (annando) + "Verify SSL" options affects also VERIFYHOST (annando) + Better handling of hashtags (annando) + Updated translations (translation teams, tobias) + Access a contact directly from the contact-manager-page (FlxAlbroscheit) + Reworked GUID generation, remove db store (annando) + Improve search for tags and terms (annando) + Fix OAuth signature (thorsten23) + Fix utf8 characters in items (issue #1307) (hauke) + Ignore tag-likes char sequences in code blocks (issue #1041) (fabrixxm) + Fix sending email to CC recipients (issue #1437) (fabrixxm) + Fix signature check of likes from diaspora (issue #905) (mike, annando) + Fix pagination urls (issue #1341) (fabrixxm) + Add scheme if missing in "web link" dialog (issue #1362) (fabrixxm) + Don't detect Facebook and App.net RSS feeds as contacts (issue #1432) (annando) + Add cli command to generate database.sql from scheme description (issue #1370) (fabrixxm) + Fix warning trying to creating already existing itemcache dir (pztrn) + Send update to directory when account is removed (issue #1038) (annando) + Fix settings page's aside menu visibility (issue #1459) (fabrixxm) + Don't show past events in event reminder in profile page (issue #1306) (annando) + Add help text to explain the options for approving contacts (issue #1349) (silke) + API set as unseen only posts returned by the call (issue #1063) (annando) + Version 3.3.3 - + More separation between php and html in photo album (issue #1258) (rabuzarus) Enhanced community page shows public posts from public contacts of public profiles (annando) Support for IndieAuth/Web-sign-in (hauke) @@ -67,17 +95,17 @@ Version 3.3 API added support in the API to allow image uploads from Twidere support for the diaspora app in Firefox - - Themes + + Themes Stopped support of unmaintained themes. They will continue to work if enabled but are no longer displayed in the list of themes. - Merged all "zero" themes into a theme with variations. + Merged all "zero" themes into a theme with variations. new default avatar by Andi Stadler - + Usability network page as default page after login sections on users' settings page are now collapsable automatic updating the network stream was improved - + Interaction ignoring of threads for selected contects one can now get notifications when they post something, useful e.g. for forums @@ -85,8 +113,8 @@ Version 3.3 many improvement on all connectors, new app.net connector the algorithm for shortening postings when posting to limited platforms was improved improvements for the remote_self functionality for RSS/Atom feeds were done - - System stuff + + System stuff no more apc support due problems with PHP 5.5 privacy image cache moved from an addon into the core updated the following libraries: smarty 3.1.19, fullcalendar 1.6.4, jquery 1.11, jgrowl 1.3.0 @@ -99,8 +127,8 @@ Version 3.3 some bugs were fixed for the profile import function BBCode handling and reformatting to e.g. markdown was improved Internal PusH server for communication with OStatus contacts - - Addons + + Addons translation now done at transifex as well "newmemberwidget" adds widget with help links + welcome message to sidebar of network tab for new members new statistics addon to take part in the Diaspora* survey @@ -109,10 +137,10 @@ Version 3.3 new connector for the buffer service improvements for the connectors with Twitter, StatusNet/GNU Social, pump.io, google+ and facebook improvements to the cal and jappix-mini addons - + Change in the structure of the git repo The "master" branch will now contain stable stuff and hotfixes. - The new "develop" branch will contain the latest changes. + The new "develop" branch will contain the latest changes. Version 3.2 diff --git a/README.translate.md b/README.translate.md index 5575d5176..f43406361 100644 --- a/README.translate.md +++ b/README.translate.md @@ -18,7 +18,7 @@ others can use them. We do not include every translation from transifex in the source tree to avoid a scattered and disturbed overall experience. As an uneducated guess we have a lower limit of 50% translated strings before we include the language (for the -core message.po file, addont translation will be included once all strings of +core message.po file, addon translation will be included once all strings of an addon are translated. This limit is judging only by the amount of translated strings under the assumption that the most prominent strings for the UI will be translated first by a translation team. If you feel your translation useable @@ -47,10 +47,10 @@ view/de/message.po you would do the following. 2. Execute the po2php script, which will place the translation in the strings.php file that is used by friendica. - $> php util/po2php.php view/de/message.po + $> php util/po2php.php view/de/messages.po The output of the script will be placed at view/de/strings.php where - froemdoca os expecting it, so you can test your translation mmediately. + friendica is expecting it, so you can test your translation immediately. 3. Visit your friendica page to check if it still works in the language you just translated. If not try to find the error, most likely PHP will give @@ -71,7 +71,7 @@ Utilities Additional to the po2php script there are some more utilities for translation in the "util" directory of the friendica source tree. If you only want to -translate friendica into another language you wont need any of these tools most +translate friendica into another language you won't need any of these tools most likely but it gives you an idea how the translation process of friendica works. diff --git a/boot.php b/boot.php index 5a5437175..6da885117 100644 --- a/boot.php +++ b/boot.php @@ -15,8 +15,8 @@ require_once('update.php'); require_once('include/dbstructure.php'); define ( 'FRIENDICA_PLATFORM', 'Friendica'); -define ( 'FRIENDICA_CODENAME', 'Ginger'); -define ( 'FRIENDICA_VERSION', '3.3.3' ); +define ( 'FRIENDICA_CODENAME', 'Lily of the valley'); +define ( 'FRIENDICA_VERSION', '3.4.0' ); define ( 'DFRN_PROTOCOL_VERSION', '2.23' ); define ( 'DB_UPDATE_VERSION', 1182 ); define ( 'EOL', "
\r\n" ); @@ -1830,10 +1830,10 @@ if(! function_exists('get_events')) { $bd_short = t('F d'); $r = q("SELECT `event`.* FROM `event` - WHERE `event`.`uid` = %d AND `type` != 'birthday' AND `start` < '%s' AND `start` > '%s' + WHERE `event`.`uid` = %d AND `type` != 'birthday' AND `start` < '%s' AND `start` >= '%s' ORDER BY `start` ASC ", intval(local_user()), - dbesc(datetime_convert('UTC','UTC','now + 6 days')), + dbesc(datetime_convert('UTC','UTC','now + 7 days')), dbesc(datetime_convert('UTC','UTC','now - 1 days')) ); @@ -1850,6 +1850,7 @@ if(! function_exists('get_events')) { } $classtoday = (($istoday) ? 'event-today' : ''); + $skip = 0; foreach($r as &$rr) { if($rr['adjust']) @@ -1863,6 +1864,12 @@ if(! function_exists('get_events')) { $title = t('[No description]'); $strt = datetime_convert('UTC',$rr['convert'] ? $a->timezone : 'UTC',$rr['start']); + + if(substr($strt,0,10) < datetime_convert('UTC',$a->timezone,'now','Y-m-d')) { + $skip++; + continue; + } + $today = ((substr($strt,0,10) === datetime_convert('UTC',$a->timezone,'now','Y-m-d')) ? true : false); $rr['link'] = $md; @@ -1877,7 +1884,7 @@ if(! function_exists('get_events')) { return replace_macros($tpl, array( '$baseurl' => $a->get_baseurl(), '$classtoday' => $classtoday, - '$count' => count($r), + '$count' => count($r) - $skip, '$event_reminders' => t('Event Reminders'), '$event_title' => t('Events this week:'), '$events' => $r, @@ -2181,6 +2188,20 @@ function get_my_url() { function zrl_init(&$a) { $tmp_str = get_my_url(); if(validate_url($tmp_str)) { + + // Is it a DDoS attempt? + // The check fetches the cached value from gprobe to reduce the load for this system + $urlparts = parse_url($tmp_str); + + $result = Cache::get("gprobe:".$urlparts["host"]); + if (!is_null($result)) { + $result = unserialize($result); + if ($result["network"] == NETWORK_FEED) { + logger("DDoS attempt detected for ".$urlparts["host"]." by ".$_SERVER["REMOTE_ADDR"].". server data: ".print_r($_SERVER, true), LOGGER_DEBUG); + return; + } + } + proc_run('php','include/gprobe.php',bin2hex($tmp_str)); $arr = array('zrl' => $tmp_str, 'url' => $a->cmd); call_hooks('zrl_init',$arr); @@ -2347,7 +2368,9 @@ function get_itemcachepath() { if ($temppath != "") { $itemcache = $temppath."/itemcache"; - mkdir($itemcache); + if(!file_exists($itemcache) && !is_dir($itemcache)) { + mkdir($itemcache); + } if (is_dir($itemcache) AND is_writable($itemcache)) { set_config("system", "itemcache", $itemcache); diff --git a/database.sql b/database.sql index cbf8933f3..8babeb4d4 100644 --- a/database.sql +++ b/database.sql @@ -1,1235 +1,984 @@ --- phpMyAdmin SQL Dump --- version 3.3.10.4 --- http://www.phpmyadmin.net --- +-- ------------------------------------------ +-- Friendica 3.4.0 (Ginger) +-- DB_UPDATE_VERSION 1182 +-- ------------------------------------------ -SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO"; - --- -------------------------------------------------------- -- --- Table structure for table `addon` +-- TABLE addon -- - CREATE TABLE IF NOT EXISTS `addon` ( - `id` int(11) NOT NULL AUTO_INCREMENT, - `name` char(255) NOT NULL, - `version` char(255) NOT NULL, - `installed` tinyint(1) NOT NULL DEFAULT '0', - `hidden` tinyint(1) NOT NULL DEFAULT '0', - `timestamp` bigint(20) NOT NULL DEFAULT '0', - `plugin_admin` tinyint(1) NOT NULL DEFAULT '0', - PRIMARY KEY (`id`), - KEY `hidden` (`hidden`) -) ENGINE=MyISAM DEFAULT CHARSET=utf8; - --- -------------------------------------------------------- + `id` int(11) NOT NULL auto_increment PRIMARY KEY, + `name` varchar(255) NOT NULL DEFAULT '', + `version` varchar(255) NOT NULL DEFAULT '', + `installed` tinyint(1) NOT NULL DEFAULT 0, + `hidden` tinyint(1) NOT NULL DEFAULT 0, + `timestamp` bigint(20) NOT NULL DEFAULT 0, + `plugin_admin` tinyint(1) NOT NULL DEFAULT 0 +) DEFAULT CHARSET=utf8; -- --- Table structure for table `attach` +-- TABLE attach -- - CREATE TABLE IF NOT EXISTS `attach` ( - `id` int(11) NOT NULL AUTO_INCREMENT, - `uid` int(11) NOT NULL, - `hash` char(64) NOT NULL, - `filename` char(255) NOT NULL, - `filetype` char(64) NOT NULL, - `filesize` int(11) NOT NULL, - `data` longblob NOT NULL, - `created` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', - `edited` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', - `allow_cid` mediumtext NOT NULL, - `allow_gid` mediumtext NOT NULL, - `deny_cid` mediumtext NOT NULL, - `deny_gid` mediumtext NOT NULL, - PRIMARY KEY (`id`) -) ENGINE=MyISAM DEFAULT CHARSET=utf8; - --- -------------------------------------------------------- + `id` int(11) NOT NULL auto_increment PRIMARY KEY, + `uid` int(11) NOT NULL DEFAULT 0, + `hash` varchar(64) NOT NULL DEFAULT '', + `filename` varchar(255) NOT NULL DEFAULT '', + `filetype` varchar(64) NOT NULL DEFAULT '', + `filesize` int(11) NOT NULL DEFAULT 0, + `data` longblob NOT NULL, + `created` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + `edited` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + `allow_cid` mediumtext NOT NULL, + `allow_gid` mediumtext NOT NULL, + `deny_cid` mediumtext NOT NULL, + `deny_gid` mediumtext NOT NULL +) DEFAULT CHARSET=utf8; -- --- Table structure for table `auth_codes` +-- TABLE auth_codes -- - CREATE TABLE IF NOT EXISTS `auth_codes` ( - `id` varchar(40) NOT NULL, - `client_id` varchar(20) NOT NULL, - `redirect_uri` varchar(200) NOT NULL, - `expires` int(11) NOT NULL, - `scope` varchar(250) NOT NULL, - PRIMARY KEY (`id`) -) ENGINE=MyISAM DEFAULT CHARSET=utf8; - --- -------------------------------------------------------- + `id` varchar(40) NOT NULL PRIMARY KEY, + `client_id` varchar(20) NOT NULL DEFAULT '', + `redirect_uri` varchar(200) NOT NULL DEFAULT '', + `expires` int(11) NOT NULL DEFAULT 0, + `scope` varchar(250) NOT NULL DEFAULT '' +) DEFAULT CHARSET=utf8; -- --- Table structure for table `cache` +-- TABLE cache -- - CREATE TABLE IF NOT EXISTS `cache` ( - `k` char(255) NOT NULL, - `v` text NOT NULL, - `updated` datetime NOT NULL, - PRIMARY KEY (`k`) -) ENGINE=MyISAM DEFAULT CHARSET=utf8; - --- -------------------------------------------------------- + `k` varchar(255) NOT NULL PRIMARY KEY, + `v` text NOT NULL, + `updated` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + INDEX `updated` (`updated`) +) DEFAULT CHARSET=utf8; -- --- Table structure for table `challenge` +-- TABLE challenge -- - CREATE TABLE IF NOT EXISTS `challenge` ( - `id` int(10) unsigned NOT NULL AUTO_INCREMENT, - `challenge` char(255) NOT NULL, - `dfrn-id` char(255) NOT NULL, - `expire` int(11) NOT NULL, - `type` char(255) NOT NULL, - `last_update` char(255) NOT NULL, - PRIMARY KEY (`id`) -) ENGINE=MyISAM DEFAULT CHARSET=utf8; - --- -------------------------------------------------------- + `id` int(10) unsigned NOT NULL auto_increment PRIMARY KEY, + `challenge` varchar(255) NOT NULL DEFAULT '', + `dfrn-id` varchar(255) NOT NULL DEFAULT '', + `expire` int(11) NOT NULL DEFAULT 0, + `type` varchar(255) NOT NULL DEFAULT '', + `last_update` varchar(255) NOT NULL DEFAULT '' +) DEFAULT CHARSET=utf8; -- --- Table structure for table `clients` +-- TABLE clients -- - CREATE TABLE IF NOT EXISTS `clients` ( - `client_id` varchar(20) NOT NULL, - `pw` varchar(20) NOT NULL, - `redirect_uri` varchar(200) NOT NULL, - `name` text, - `icon` text, - `uid` int(11) NOT NULL DEFAULT '0', - PRIMARY KEY (`client_id`) -) ENGINE=MyISAM DEFAULT CHARSET=utf8; - --- -------------------------------------------------------- + `client_id` varchar(20) NOT NULL PRIMARY KEY, + `pw` varchar(20) NOT NULL DEFAULT '', + `redirect_uri` varchar(200) NOT NULL DEFAULT '', + `name` text, + `icon` text, + `uid` int(11) NOT NULL DEFAULT 0 +) DEFAULT CHARSET=utf8; -- --- Table structure for table `config` +-- TABLE config -- - CREATE TABLE IF NOT EXISTS `config` ( - `id` int(10) unsigned NOT NULL AUTO_INCREMENT, - `cat` char(255) CHARACTER SET ascii NOT NULL, - `k` char(255) CHARACTER SET ascii NOT NULL, - `v` text NOT NULL, - PRIMARY KEY (`id`), - UNIQUE KEY `access` (`cat`,`k`) -) ENGINE=MyISAM DEFAULT CHARSET=utf8; - --- -------------------------------------------------------- + `id` int(10) unsigned NOT NULL auto_increment PRIMARY KEY, + `cat` varchar(255) NOT NULL DEFAULT '', + `k` varchar(255) NOT NULL DEFAULT '', + `v` text NOT NULL, + INDEX `cat_k` (`cat`(30),`k`(30)) +) DEFAULT CHARSET=utf8; -- --- Table structure for table `contact` +-- TABLE contact -- - CREATE TABLE IF NOT EXISTS `contact` ( - `id` int(11) NOT NULL AUTO_INCREMENT, - `uid` int(11) NOT NULL COMMENT 'owner uid', - `created` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', - `self` tinyint(1) NOT NULL DEFAULT '0' COMMENT 'boolean 1 == info for local UID, primarily name and photo to use in item displays.', - `remote_self` tinyint(1) NOT NULL DEFAULT '0', - `rel` tinyint(1) NOT NULL DEFAULT '0', - `duplex` tinyint(1) NOT NULL DEFAULT '0', - `network` char(255) NOT NULL, - `name` char(255) NOT NULL, - `nick` char(255) NOT NULL, - `attag` char(255) NOT NULL, - `photo` text NOT NULL COMMENT 'remote photo URL initially until approved', - `thumb` text NOT NULL, - `micro` text NOT NULL, - `site-pubkey` text NOT NULL, - `issued-id` char(255) NOT NULL, - `dfrn-id` char(255) NOT NULL, - `url` char(255) NOT NULL, - `nurl` char(255) NOT NULL, - `addr` char(255) NOT NULL, - `alias` char(255) NOT NULL, - `pubkey` text NOT NULL, - `prvkey` text NOT NULL, - `batch` char(255) NOT NULL, - `request` text NOT NULL, - `notify` text NOT NULL, - `poll` text NOT NULL, - `confirm` text NOT NULL, - `poco` text NOT NULL, - `aes_allow` tinyint(1) NOT NULL DEFAULT '0', - `ret-aes` tinyint(1) NOT NULL DEFAULT '0', - `usehub` tinyint(1) NOT NULL DEFAULT '0', - `subhub` tinyint(1) NOT NULL DEFAULT '0', - `hub-verify` char(255) NOT NULL, - `last-update` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', - `success_update` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', - `name-date` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', - `uri-date` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', - `avatar-date` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', - `term-date` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', - `priority` tinyint(3) NOT NULL, - `blocked` tinyint(1) NOT NULL DEFAULT '1', - `readonly` tinyint(1) NOT NULL DEFAULT '0', - `writable` tinyint(1) NOT NULL DEFAULT '0', - `forum` tinyint(1) NOT NULL DEFAULT '0', - `prv` tinyint(1) NOT NULL DEFAULT '0', - `hidden` tinyint(1) NOT NULL DEFAULT '0', - `archive` tinyint(1) NOT NULL DEFAULT '0', - `pending` tinyint(1) NOT NULL DEFAULT '1', - `rating` tinyint(1) NOT NULL DEFAULT '0' COMMENT '0-5 reputation, 0 unknown, 1 call police, 5 inscrutable', - `reason` text NOT NULL COMMENT 'why a rating was given - will help friends decide to make friends or not', - `closeness` tinyint(2) NOT NULL DEFAULT '99', - `info` mediumtext NOT NULL, - `profile-id` int(11) NOT NULL DEFAULT '0' COMMENT 'which profile to display - 0 is public default', - `bdyear` char(4) NOT NULL COMMENT 'birthday notify flag', - `bd` date NOT NULL, - `notify_new_posts` TINYINT(1) NOT NULL DEFAULT '0', - `fetch_further_information` TINYINT(1) NOT NULL DEFAULT '0', - PRIMARY KEY (`id`), - KEY `uid` (`uid`), - KEY `self` (`self`), - KEY `issued-id` (`issued-id`), - KEY `dfrn-id` (`dfrn-id`), - KEY `blocked` (`blocked`), - KEY `readonly` (`readonly`), - KEY `network` (`network`), - KEY `name` (`name`), - KEY `nick` (`nick`), - KEY `attag` (`attag`), - KEY `addr` (`addr`), - KEY `url` (`url`), - KEY `batch` (`batch`), - KEY `nurl` (`nurl`), - KEY `pending` (`pending`), - KEY `hidden` (`hidden`), - KEY `archive` (`archive`), - KEY `forum` (`forum`) -) ENGINE=MyISAM DEFAULT CHARSET=utf8; - --- -------------------------------------------------------- + `id` int(11) NOT NULL auto_increment PRIMARY KEY, + `uid` int(11) NOT NULL DEFAULT 0, + `created` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + `self` tinyint(1) NOT NULL DEFAULT 0, + `remote_self` tinyint(1) NOT NULL DEFAULT 0, + `rel` tinyint(1) NOT NULL DEFAULT 0, + `duplex` tinyint(1) NOT NULL DEFAULT 0, + `network` varchar(255) NOT NULL DEFAULT '', + `name` varchar(255) NOT NULL DEFAULT '', + `nick` varchar(255) NOT NULL DEFAULT '', + `location` varchar(255) NOT NULL DEFAULT '', + `about` text NOT NULL, + `keywords` text NOT NULL, + `gender` varchar(32) NOT NULL DEFAULT '', + `attag` varchar(255) NOT NULL DEFAULT '', + `photo` text NOT NULL, + `thumb` text NOT NULL, + `micro` text NOT NULL, + `site-pubkey` text NOT NULL, + `issued-id` varchar(255) NOT NULL DEFAULT '', + `dfrn-id` varchar(255) NOT NULL DEFAULT '', + `url` varchar(255) NOT NULL DEFAULT '', + `nurl` varchar(255) NOT NULL DEFAULT '', + `addr` varchar(255) NOT NULL DEFAULT '', + `alias` varchar(255) NOT NULL DEFAULT '', + `pubkey` text NOT NULL, + `prvkey` text NOT NULL, + `batch` varchar(255) NOT NULL DEFAULT '', + `request` text NOT NULL, + `notify` text NOT NULL, + `poll` text NOT NULL, + `confirm` text NOT NULL, + `poco` text NOT NULL, + `aes_allow` tinyint(1) NOT NULL DEFAULT 0, + `ret-aes` tinyint(1) NOT NULL DEFAULT 0, + `usehub` tinyint(1) NOT NULL DEFAULT 0, + `subhub` tinyint(1) NOT NULL DEFAULT 0, + `hub-verify` varchar(255) NOT NULL DEFAULT '', + `last-update` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + `success_update` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + `name-date` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + `uri-date` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + `avatar-date` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + `term-date` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + `priority` tinyint(3) NOT NULL DEFAULT 0, + `blocked` tinyint(1) NOT NULL DEFAULT 1, + `readonly` tinyint(1) NOT NULL DEFAULT 0, + `writable` tinyint(1) NOT NULL DEFAULT 0, + `forum` tinyint(1) NOT NULL DEFAULT 0, + `prv` tinyint(1) NOT NULL DEFAULT 0, + `hidden` tinyint(1) NOT NULL DEFAULT 0, + `archive` tinyint(1) NOT NULL DEFAULT 0, + `pending` tinyint(1) NOT NULL DEFAULT 1, + `rating` tinyint(1) NOT NULL DEFAULT 0, + `reason` text NOT NULL, + `closeness` tinyint(2) NOT NULL DEFAULT 99, + `info` mediumtext NOT NULL, + `profile-id` int(11) NOT NULL DEFAULT 0, + `bdyear` varchar(4) NOT NULL DEFAULT '', + `bd` date NOT NULL DEFAULT '0000-00-00', + `notify_new_posts` tinyint(1) NOT NULL DEFAULT 0, + `fetch_further_information` tinyint(1) NOT NULL DEFAULT 0, + `ffi_keyword_blacklist` mediumtext NOT NULL, + INDEX `uid` (`uid`) +) DEFAULT CHARSET=utf8; -- --- Table structure for table `conv` +-- TABLE conv -- - CREATE TABLE IF NOT EXISTS `conv` ( - `id` int(10) unsigned NOT NULL AUTO_INCREMENT, - `guid` char(64) NOT NULL, - `recips` mediumtext NOT NULL, - `uid` int(11) NOT NULL, - `creator` char(255) NOT NULL, - `created` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', - `updated` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', - `subject` mediumtext NOT NULL, - PRIMARY KEY (`id`), - KEY `created` (`created`), - KEY `updated` (`updated`) -) ENGINE=MyISAM DEFAULT CHARSET=utf8; - --- -------------------------------------------------------- + `id` int(10) unsigned NOT NULL auto_increment PRIMARY KEY, + `guid` varchar(64) NOT NULL DEFAULT '', + `recips` mediumtext NOT NULL, + `uid` int(11) NOT NULL DEFAULT 0, + `creator` varchar(255) NOT NULL DEFAULT '', + `created` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + `updated` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + `subject` mediumtext NOT NULL, + INDEX `uid` (`uid`) +) DEFAULT CHARSET=utf8; -- --- Table structure for table `deliverq` +-- TABLE deliverq -- - CREATE TABLE IF NOT EXISTS `deliverq` ( - `id` int(10) unsigned NOT NULL AUTO_INCREMENT, - `cmd` char(32) NOT NULL, - `item` int(11) NOT NULL, - `contact` int(11) NOT NULL, - PRIMARY KEY (`id`) -) ENGINE=MyISAM DEFAULT CHARSET=utf8; - --- -------------------------------------------------------- + `id` int(10) unsigned NOT NULL auto_increment PRIMARY KEY, + `cmd` varchar(32) NOT NULL DEFAULT '', + `item` int(11) NOT NULL DEFAULT 0, + `contact` int(11) NOT NULL DEFAULT 0 +) DEFAULT CHARSET=utf8; -- --- Table structure for table `dsprphotoq` +-- TABLE dsprphotoq -- - -CREATE TABLE `dsprphotoq` ( - `id` int(10) unsigned NOT NULL AUTO_INCREMENT, - `uid` int(11) NOT NULL, - `msg` mediumtext NOT NULL, - `attempt` tinyint(4) NOT NULL, - PRIMARY KEY (`id`) -) ENGINE=MyISAM DEFAULT CHARSET=utf8; - --- -------------------------------------------------------- +CREATE TABLE IF NOT EXISTS `dsprphotoq` ( + `id` int(10) unsigned NOT NULL auto_increment PRIMARY KEY, + `uid` int(11) NOT NULL DEFAULT 0, + `msg` mediumtext NOT NULL, + `attempt` tinyint(4) NOT NULL DEFAULT 0 +) DEFAULT CHARSET=utf8; -- --- Table structure for table `event` +-- TABLE event -- - CREATE TABLE IF NOT EXISTS `event` ( - `id` int(11) NOT NULL AUTO_INCREMENT, - `uid` int(11) NOT NULL, - `cid` int(11) NOT NULL, - `uri` char(255) NOT NULL, - `created` datetime NOT NULL, - `edited` datetime NOT NULL, - `start` datetime NOT NULL, - `finish` datetime NOT NULL, - `summary` text NOT NULL, - `desc` text NOT NULL, - `location` text NOT NULL, - `type` char(255) NOT NULL, - `nofinish` tinyint(1) NOT NULL DEFAULT '0', - `adjust` tinyint(1) NOT NULL DEFAULT '1', - `ignore` tinyint(1) NOT NULL DEFAULT '0', - `allow_cid` mediumtext NOT NULL, - `allow_gid` mediumtext NOT NULL, - `deny_cid` mediumtext NOT NULL, - `deny_gid` mediumtext NOT NULL, - PRIMARY KEY (`id`), - KEY `uid` ( `uid` ), - KEY `cid` ( `cid` ), - KEY `uri` ( `uri` ), - KEY `type` ( `type` ), - KEY `start` ( `start` ), - KEY `finish` ( `finish` ), - KEY `adjust` ( `adjust` ), - KEY `ignore` ( `ignore` ) -) ENGINE=MyISAM DEFAULT CHARSET=utf8; - --- -------------------------------------------------------- + `id` int(11) NOT NULL auto_increment PRIMARY KEY, + `uid` int(11) NOT NULL DEFAULT 0, + `cid` int(11) NOT NULL DEFAULT 0, + `uri` varchar(255) NOT NULL DEFAULT '', + `created` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + `edited` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + `start` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + `finish` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + `summary` text NOT NULL, + `desc` text NOT NULL, + `location` text NOT NULL, + `type` varchar(255) NOT NULL DEFAULT '', + `nofinish` tinyint(1) NOT NULL DEFAULT 0, + `adjust` tinyint(1) NOT NULL DEFAULT 1, + `ignore` tinyint(1) unsigned NOT NULL DEFAULT 0, + `allow_cid` mediumtext NOT NULL, + `allow_gid` mediumtext NOT NULL, + `deny_cid` mediumtext NOT NULL, + `deny_gid` mediumtext NOT NULL, + INDEX `uid` (`uid`) +) DEFAULT CHARSET=utf8; -- --- Table structure for table `fcontact` +-- TABLE fcontact -- - CREATE TABLE IF NOT EXISTS `fcontact` ( - `id` int(10) unsigned NOT NULL AUTO_INCREMENT, - `url` char(255) NOT NULL, - `name` char(255) NOT NULL, - `photo` char(255) NOT NULL, - `request` char(255) NOT NULL, - `nick` char(255) NOT NULL, - `addr` char(255) NOT NULL, - `batch` char(255) NOT NULL, - `notify` char(255) NOT NULL, - `poll` char(255) NOT NULL, - `confirm` char(255) NOT NULL, - `priority` tinyint(1) NOT NULL, - `network` char(32) NOT NULL, - `alias` char(255) NOT NULL, - `pubkey` text NOT NULL, - `updated` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', - PRIMARY KEY (`id`), - KEY `addr` (`addr`), - KEY `network` (`network`) -) ENGINE=MyISAM DEFAULT CHARSET=utf8; - --- -------------------------------------------------------- + `id` int(10) unsigned NOT NULL auto_increment PRIMARY KEY, + `url` varchar(255) NOT NULL DEFAULT '', + `name` varchar(255) NOT NULL DEFAULT '', + `photo` varchar(255) NOT NULL DEFAULT '', + `request` varchar(255) NOT NULL DEFAULT '', + `nick` varchar(255) NOT NULL DEFAULT '', + `addr` varchar(255) NOT NULL DEFAULT '', + `batch` varchar(255) NOT NULL DEFAULT '', + `notify` varchar(255) NOT NULL DEFAULT '', + `poll` varchar(255) NOT NULL DEFAULT '', + `confirm` varchar(255) NOT NULL DEFAULT '', + `priority` tinyint(1) NOT NULL DEFAULT 0, + `network` varchar(32) NOT NULL DEFAULT '', + `alias` varchar(255) NOT NULL DEFAULT '', + `pubkey` text NOT NULL, + `updated` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + INDEX `addr` (`addr`) +) DEFAULT CHARSET=utf8; -- --- Table structure for table `ffinder` +-- TABLE ffinder -- - CREATE TABLE IF NOT EXISTS `ffinder` ( - `id` int(10) unsigned NOT NULL AUTO_INCREMENT, - `uid` int(10) unsigned NOT NULL, - `cid` int(10) unsigned NOT NULL, - `fid` int(10) unsigned NOT NULL, - PRIMARY KEY (`id`) -) ENGINE=MyISAM DEFAULT CHARSET=utf8; - --- -------------------------------------------------------- + `id` int(10) unsigned NOT NULL auto_increment PRIMARY KEY, + `uid` int(10) unsigned NOT NULL DEFAULT 0, + `cid` int(10) unsigned NOT NULL DEFAULT 0, + `fid` int(10) unsigned NOT NULL DEFAULT 0 +) DEFAULT CHARSET=utf8; -- --- Table structure for table `fserver` +-- TABLE fserver -- - CREATE TABLE IF NOT EXISTS `fserver` ( - `id` int(11) NOT NULL AUTO_INCREMENT, - `server` char(255) NOT NULL, - `posturl` char(255) NOT NULL, - `key` text NOT NULL, - PRIMARY KEY (`id`), - KEY `server` (`server`) -) ENGINE=MyISAM DEFAULT CHARSET=utf8; - --- -------------------------------------------------------- + `id` int(11) NOT NULL auto_increment PRIMARY KEY, + `server` varchar(255) NOT NULL DEFAULT '', + `posturl` varchar(255) NOT NULL DEFAULT '', + `key` text NOT NULL, + INDEX `server` (`server`) +) DEFAULT CHARSET=utf8; -- --- Table structure for table `fsuggest` +-- TABLE fsuggest -- - CREATE TABLE IF NOT EXISTS `fsuggest` ( - `id` int(11) NOT NULL AUTO_INCREMENT, - `uid` int(11) NOT NULL, - `cid` int(11) NOT NULL, - `name` char(255) NOT NULL, - `url` char(255) NOT NULL, - `request` char(255) NOT NULL, - `photo` char(255) NOT NULL, - `note` text NOT NULL, - `created` datetime NOT NULL, - PRIMARY KEY (`id`) -) ENGINE=MyISAM DEFAULT CHARSET=utf8; - --- -------------------------------------------------------- + `id` int(11) NOT NULL auto_increment PRIMARY KEY, + `uid` int(11) NOT NULL DEFAULT 0, + `cid` int(11) NOT NULL DEFAULT 0, + `name` varchar(255) NOT NULL DEFAULT '', + `url` varchar(255) NOT NULL DEFAULT '', + `request` varchar(255) NOT NULL DEFAULT '', + `photo` varchar(255) NOT NULL DEFAULT '', + `note` text NOT NULL, + `created` datetime NOT NULL DEFAULT '0000-00-00 00:00:00' +) DEFAULT CHARSET=utf8; -- --- Table structure for table `gcign` +-- TABLE gcign -- - CREATE TABLE IF NOT EXISTS `gcign` ( - `id` int(11) NOT NULL AUTO_INCREMENT, - `uid` int(11) NOT NULL, - `gcid` int(11) NOT NULL, - PRIMARY KEY (`id`), - KEY `uid` (`uid`), - KEY `gcid` (`gcid`) -) ENGINE=MyISAM DEFAULT CHARSET=utf8; - --- -------------------------------------------------------- + `id` int(11) NOT NULL auto_increment PRIMARY KEY, + `uid` int(11) NOT NULL DEFAULT 0, + `gcid` int(11) NOT NULL DEFAULT 0, + INDEX `uid` (`uid`), + INDEX `gcid` (`gcid`) +) DEFAULT CHARSET=utf8; -- --- Table structure for table `gcontact` +-- TABLE gcontact -- - CREATE TABLE IF NOT EXISTS `gcontact` ( - `id` int(10) unsigned NOT NULL AUTO_INCREMENT, - `name` char(255) NOT NULL, - `url` char(255) NOT NULL, - `nurl` char(255) NOT NULL, - `photo` char(255) NOT NULL, - `connect` char(255) NOT NULL, - PRIMARY KEY (`id`), - KEY `nurl` (`nurl`) -) ENGINE=MyISAM DEFAULT CHARSET=utf8; - --- -------------------------------------------------------- + `id` int(10) unsigned NOT NULL auto_increment PRIMARY KEY, + `name` varchar(255) NOT NULL DEFAULT '', + `url` varchar(255) NOT NULL DEFAULT '', + `nurl` varchar(255) NOT NULL DEFAULT '', + `photo` varchar(255) NOT NULL DEFAULT '', + `connect` varchar(255) NOT NULL DEFAULT '', + `updated` datetime DEFAULT '0000-00-00 00:00:00', + `location` varchar(255) NOT NULL DEFAULT '', + `about` text NOT NULL, + `keywords` text NOT NULL, + `gender` varchar(32) NOT NULL DEFAULT '', + `network` varchar(255) NOT NULL DEFAULT '', + `generation` tinyint(3) NOT NULL DEFAULT 0, + INDEX `nurl` (`nurl`) +) DEFAULT CHARSET=utf8; -- --- Table structure for table `glink` +-- TABLE glink -- - CREATE TABLE IF NOT EXISTS `glink` ( - `id` int(10) unsigned NOT NULL AUTO_INCREMENT, - `cid` int(11) NOT NULL, - `uid` int(11) NOT NULL, - `gcid` int(11) NOT NULL, - `zcid` int(11) NOT NULL, - `updated` datetime NOT NULL, - PRIMARY KEY (`id`), - KEY `cid` (`cid`), - KEY `uid` (`uid`), - KEY `gcid` (`gcid`), - KEY `zcid` (`zcid`), - KEY `updated` (`updated`) -) ENGINE=MyISAM DEFAULT CHARSET=utf8; - --- -------------------------------------------------------- + `id` int(10) unsigned NOT NULL auto_increment PRIMARY KEY, + `cid` int(11) NOT NULL DEFAULT 0, + `uid` int(11) NOT NULL DEFAULT 0, + `gcid` int(11) NOT NULL DEFAULT 0, + `zcid` int(11) NOT NULL DEFAULT 0, + `updated` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + INDEX `cid_uid_gcid_zcid` (`cid`,`uid`,`gcid`,`zcid`), + INDEX `gcid` (`gcid`), + INDEX `zcid` (`zcid`) +) DEFAULT CHARSET=utf8; -- --- Table structure for table `group` +-- TABLE group -- - CREATE TABLE IF NOT EXISTS `group` ( - `id` int(10) unsigned NOT NULL AUTO_INCREMENT, - `uid` int(10) unsigned NOT NULL, - `visible` tinyint(1) NOT NULL DEFAULT '0', - `deleted` tinyint(1) NOT NULL DEFAULT '0', - `name` char(255) NOT NULL, - PRIMARY KEY (`id`) -) ENGINE=MyISAM DEFAULT CHARSET=utf8; - --- -------------------------------------------------------- + `id` int(10) unsigned NOT NULL auto_increment PRIMARY KEY, + `uid` int(10) unsigned NOT NULL DEFAULT 0, + `visible` tinyint(1) NOT NULL DEFAULT 0, + `deleted` tinyint(1) NOT NULL DEFAULT 0, + `name` varchar(255) NOT NULL DEFAULT '', + INDEX `uid` (`uid`) +) DEFAULT CHARSET=utf8; -- --- Table structure for table `group_member` +-- TABLE group_member -- - CREATE TABLE IF NOT EXISTS `group_member` ( - `id` int(10) unsigned NOT NULL AUTO_INCREMENT, - `uid` int(10) unsigned NOT NULL, - `gid` int(10) unsigned NOT NULL, - `contact-id` int(10) unsigned NOT NULL, - PRIMARY KEY (`id`) -) ENGINE=MyISAM DEFAULT CHARSET=utf8; - --- -------------------------------------------------------- + `id` int(10) unsigned NOT NULL auto_increment PRIMARY KEY, + `uid` int(10) unsigned NOT NULL DEFAULT 0, + `gid` int(10) unsigned NOT NULL DEFAULT 0, + `contact-id` int(10) unsigned NOT NULL DEFAULT 0, + INDEX `uid_gid_contactid` (`uid`,`gid`,`contact-id`) +) DEFAULT CHARSET=utf8; -- --- Table structure for table `guid` +-- TABLE guid -- - CREATE TABLE IF NOT EXISTS `guid` ( - `id` int(10) unsigned NOT NULL AUTO_INCREMENT, - `guid` char(64) NOT NULL, - PRIMARY KEY (`id`), - KEY `guid` (`guid`) -) ENGINE=MyISAM DEFAULT CHARSET=utf8; - --- -------------------------------------------------------- + `id` int(10) unsigned NOT NULL auto_increment PRIMARY KEY, + `guid` varchar(255) NOT NULL DEFAULT '', + INDEX `guid` (`guid`) +) DEFAULT CHARSET=utf8; -- --- Table structure for table `hook` +-- TABLE hook -- - CREATE TABLE IF NOT EXISTS `hook` ( - `id` int(11) NOT NULL AUTO_INCREMENT, - `hook` char(255) NOT NULL, - `file` char(255) NOT NULL, - `function` char(255) NOT NULL, - `priority` int(11) UNSIGNED NOT NULL DEFAULT '0', - PRIMARY KEY (`id`) -) ENGINE=MyISAM DEFAULT CHARSET=utf8; - --- -------------------------------------------------------- + `id` int(11) NOT NULL auto_increment PRIMARY KEY, + `hook` varchar(255) NOT NULL DEFAULT '', + `file` varchar(255) NOT NULL DEFAULT '', + `function` varchar(255) NOT NULL DEFAULT '', + `priority` int(11) unsigned NOT NULL DEFAULT 0, + INDEX `hook_file_function` (`hook`(30),`file`(60),`function`(30)) +) DEFAULT CHARSET=utf8; -- --- Table structure for table `intro` +-- TABLE intro -- - CREATE TABLE IF NOT EXISTS `intro` ( - `id` int(10) unsigned NOT NULL AUTO_INCREMENT, - `uid` int(10) unsigned NOT NULL, - `fid` int(11) NOT NULL DEFAULT '0', - `contact-id` int(11) NOT NULL, - `knowyou` tinyint(1) NOT NULL, - `duplex` tinyint(1) NOT NULL DEFAULT '0', - `note` text NOT NULL, - `hash` char(255) NOT NULL, - `datetime` datetime NOT NULL, - `blocked` tinyint(1) NOT NULL DEFAULT '1', - `ignore` tinyint(1) NOT NULL DEFAULT '0', - PRIMARY KEY (`id`) -) ENGINE=MyISAM DEFAULT CHARSET=utf8; - --- -------------------------------------------------------- + `id` int(10) unsigned NOT NULL auto_increment PRIMARY KEY, + `uid` int(10) unsigned NOT NULL DEFAULT 0, + `fid` int(11) NOT NULL DEFAULT 0, + `contact-id` int(11) NOT NULL DEFAULT 0, + `knowyou` tinyint(1) NOT NULL DEFAULT 0, + `duplex` tinyint(1) NOT NULL DEFAULT 0, + `note` text NOT NULL, + `hash` varchar(255) NOT NULL DEFAULT '', + `datetime` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + `blocked` tinyint(1) NOT NULL DEFAULT 1, + `ignore` tinyint(1) NOT NULL DEFAULT 0 +) DEFAULT CHARSET=utf8; -- --- Table structure for table `item` +-- TABLE item -- - CREATE TABLE IF NOT EXISTS `item` ( - `id` int(10) unsigned NOT NULL AUTO_INCREMENT, - `guid` char(255) NOT NULL, - `uri` char(255) CHARACTER SET ascii NOT NULL, - `uid` int(10) unsigned NOT NULL DEFAULT '0', - `contact-id` int(10) unsigned NOT NULL DEFAULT '0', - `type` char(255) NOT NULL, - `wall` tinyint(1) NOT NULL DEFAULT '0', - `gravity` tinyint(1) NOT NULL DEFAULT '0', - `parent` int(10) unsigned NOT NULL DEFAULT '0', - `parent-uri` char(255) CHARACTER SET ascii NOT NULL, - `extid` char(255) NOT NULL, - `thr-parent` char(255) NOT NULL, - `created` datetime NOT NULL, - `edited` datetime NOT NULL, - `commented` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', - `received` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', - `changed` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', - `owner-name` char(255) NOT NULL, - `owner-link` char(255) NOT NULL, - `owner-avatar` char(255) NOT NULL, - `author-name` char(255) NOT NULL, - `author-link` char(255) NOT NULL, - `author-avatar` char(255) NOT NULL, - `title` char(255) NOT NULL, - `body` mediumtext NOT NULL, - `app` char(255) NOT NULL, - `verb` char(255) NOT NULL, - `object-type` char(255) NOT NULL, - `object` text NOT NULL, - `target-type` char(255) NOT NULL, - `target` text NOT NULL, - `postopts` text NOT NULL, - `plink` char(255) NOT NULL, - `resource-id` char(255) NOT NULL, - `event-id` int(11) NOT NULL, - `tag` mediumtext NOT NULL, - `attach` mediumtext NOT NULL, - `inform` mediumtext NOT NULL, - `file` mediumtext NOT NULL, - `location` char(255) NOT NULL, - `coord` char(255) NOT NULL, - `allow_cid` mediumtext NOT NULL, - `allow_gid` mediumtext NOT NULL, - `deny_cid` mediumtext NOT NULL, - `deny_gid` mediumtext NOT NULL, - `private` tinyint(1) NOT NULL DEFAULT '0', - `pubmail` tinyint(1) NOT NULL DEFAULT '0', - `moderated` tinyint(1) NOT NULL DEFAULT '0', - `visible` tinyint(1) NOT NULL DEFAULT '0', - `spam` tinyint(1) NOT NULL DEFAULT '0', - `starred` tinyint(1) NOT NULL DEFAULT '0', - `bookmark` tinyint(1) NOT NULL DEFAULT '0', - `unseen` tinyint(1) NOT NULL DEFAULT '1', - `deleted` tinyint(1) NOT NULL DEFAULT '0', - `origin` tinyint(1) NOT NULL DEFAULT '0', - `forum_mode` tinyint(1) NOT NULL DEFAULT '0', - `mention` tinyint(1) NOT NULL DEFAULT '0', - `last-child` tinyint(1) unsigned NOT NULL DEFAULT '1', - `network` char(32) NOT NULL, - PRIMARY KEY (`id`), - KEY `uri` (`uri`), - KEY `uid` (`uid`), - KEY `contact-id` (`contact-id`), - KEY `type` (`type`), - KEY `parent` (`parent`), - KEY `parent-uri` (`parent-uri`), - KEY `created` (`created`), - KEY `edited` (`edited`), - KEY `visible` (`visible`), - KEY `deleted` (`deleted`), - KEY `last-child` (`last-child`), - KEY `unseen` (`unseen`), - KEY `extid` (`extid`), - KEY `received` (`received`), - KEY `starred` (`starred`), - KEY `guid` (`guid`), - KEY `origin` (`origin`), - KEY `wall` (`wall`), - KEY `forum_mode` (`forum_mode`), - KEY `author-link` (`author-link`), - KEY `bookmark` (`bookmark`), - KEY `moderated` (`moderated`), - KEY `spam` (`spam`), - KEY `author-name` (`author-name`), - KEY `uid_commented` (`uid`, `commented`), - KEY `uid_created` (`uid`, `created`), - KEY `uid_unseen` (`uid`, `unseen`), - KEY `mention` (`mention`), - KEY `resource-id` (`resource-id`), - KEY `event_id` (`event-id`), - KEY `network` (`network`), - FULLTEXT KEY `title` (`title`), - FULLTEXT KEY `body` (`body`), - FULLTEXT KEY `allow_cid` (`allow_cid`), - FULLTEXT KEY `allow_gid` (`allow_gid`), - FULLTEXT KEY `deny_cid` (`deny_cid`), - FULLTEXT KEY `deny_gid` (`deny_gid`), - FULLTEXT KEY `tag` (`tag`), - FULLTEXT KEY `file` (`file`) -) ENGINE=MyISAM DEFAULT CHARSET=utf8; - --- -------------------------------------------------------- + `id` int(10) unsigned NOT NULL auto_increment PRIMARY KEY, + `guid` varchar(255) NOT NULL DEFAULT '', + `uri` varchar(255) NOT NULL DEFAULT '', + `uid` int(10) unsigned NOT NULL DEFAULT 0, + `contact-id` int(11) NOT NULL DEFAULT 0, + `type` varchar(255) NOT NULL DEFAULT '', + `wall` tinyint(1) NOT NULL DEFAULT 0, + `gravity` tinyint(1) NOT NULL DEFAULT 0, + `parent` int(10) unsigned NOT NULL DEFAULT 0, + `parent-uri` varchar(255) NOT NULL DEFAULT '', + `extid` varchar(255) NOT NULL DEFAULT '', + `thr-parent` varchar(255) NOT NULL DEFAULT '', + `created` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + `edited` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + `commented` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + `received` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + `changed` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + `owner-name` varchar(255) NOT NULL DEFAULT '', + `owner-link` varchar(255) NOT NULL DEFAULT '', + `owner-avatar` varchar(255) NOT NULL DEFAULT '', + `author-name` varchar(255) NOT NULL DEFAULT '', + `author-link` varchar(255) NOT NULL DEFAULT '', + `author-avatar` varchar(255) NOT NULL DEFAULT '', + `title` varchar(255) NOT NULL DEFAULT '', + `body` mediumtext NOT NULL, + `app` varchar(255) NOT NULL DEFAULT '', + `verb` varchar(255) NOT NULL DEFAULT '', + `object-type` varchar(255) NOT NULL DEFAULT '', + `object` text NOT NULL, + `target-type` varchar(255) NOT NULL DEFAULT '', + `target` text NOT NULL, + `postopts` text NOT NULL, + `plink` varchar(255) NOT NULL DEFAULT '', + `resource-id` varchar(255) NOT NULL DEFAULT '', + `event-id` int(11) NOT NULL DEFAULT 0, + `tag` mediumtext NOT NULL, + `attach` mediumtext NOT NULL, + `inform` mediumtext NOT NULL, + `file` mediumtext NOT NULL, + `location` varchar(255) NOT NULL DEFAULT '', + `coord` varchar(255) NOT NULL DEFAULT '', + `allow_cid` mediumtext NOT NULL, + `allow_gid` mediumtext NOT NULL, + `deny_cid` mediumtext NOT NULL, + `deny_gid` mediumtext NOT NULL, + `private` tinyint(1) NOT NULL DEFAULT 0, + `pubmail` tinyint(1) NOT NULL DEFAULT 0, + `moderated` tinyint(1) NOT NULL DEFAULT 0, + `visible` tinyint(1) NOT NULL DEFAULT 0, + `spam` tinyint(1) NOT NULL DEFAULT 0, + `starred` tinyint(1) NOT NULL DEFAULT 0, + `bookmark` tinyint(1) NOT NULL DEFAULT 0, + `unseen` tinyint(1) NOT NULL DEFAULT 1, + `deleted` tinyint(1) NOT NULL DEFAULT 0, + `origin` tinyint(1) NOT NULL DEFAULT 0, + `forum_mode` tinyint(1) NOT NULL DEFAULT 0, + `last-child` tinyint(1) unsigned NOT NULL DEFAULT 1, + `mention` tinyint(1) NOT NULL DEFAULT 0, + `network` varchar(32) NOT NULL DEFAULT '', + `rendered-hash` varchar(32) NOT NULL DEFAULT '', + `rendered-html` mediumtext NOT NULL, + `global` tinyint(1) NOT NULL DEFAULT 0, + INDEX `guid` (`guid`), + INDEX `uri` (`uri`), + INDEX `parent` (`parent`), + INDEX `parent-uri` (`parent-uri`), + INDEX `extid` (`extid`), + INDEX `uid_id` (`uid`,`id`), + INDEX `uid_created` (`uid`,`created`), + INDEX `uid_unseen` (`uid`,`unseen`), + INDEX `uid_network_received` (`uid`,`network`,`received`), + INDEX `uid_received` (`uid`,`received`), + INDEX `uid_network_commented` (`uid`,`network`,`commented`), + INDEX `uid_commented` (`uid`,`commented`), + INDEX `uid_title` (`uid`,`title`), + INDEX `uid_thrparent` (`uid`,`thr-parent`), + INDEX `uid_parenturi` (`uid`,`parent-uri`), + INDEX `uid_contactid_created` (`uid`,`contact-id`,`created`), + INDEX `wall_body` (`wall`,`body`(6)), + INDEX `uid_visible_moderated_created` (`uid`,`visible`,`moderated`,`created`), + INDEX `uid_uri` (`uid`,`uri`), + INDEX `uid_wall_created` (`uid`,`wall`,`created`), + INDEX `resource-id` (`resource-id`), + INDEX `uid_type` (`uid`,`type`), + INDEX `uid_starred` (`uid`,`starred`), + INDEX `contactid_allowcid_allowpid_denycid_denygid` (`contact-id`,`allow_cid`(10),`allow_gid`(10),`deny_cid`(10),`deny_gid`(10)), + INDEX `uid_wall_parent_created` (`uid`,`wall`,`parent`,`created`), + INDEX `uid_type_changed` (`uid`,`type`,`changed`), + INDEX `contactid_verb` (`contact-id`,`verb`), + INDEX `deleted_changed` (`deleted`,`changed`), + INDEX `uid_wall_changed` (`uid`,`wall`,`changed`), + INDEX `uid_eventid` (`uid`,`event-id`), + INDEX `uid_authorlink` (`uid`,`author-link`), + INDEX `uid_ownerlink` (`uid`,`owner-link`) +) DEFAULT CHARSET=utf8; -- --- Table structure for table `item_id` +-- TABLE item_id -- - CREATE TABLE IF NOT EXISTS `item_id` ( - `id` int(11) NOT NULL AUTO_INCREMENT, - `iid` int(11) NOT NULL, - `uid` int(11) NOT NULL, - `sid` char(255) NOT NULL, - `service` char(255) NOT NULL, - PRIMARY KEY (`id`), - KEY `iid` (`iid`), - KEY `uid` (`uid`), - KEY `sid` (`sid`), - KEY `service` (`service`) -) ENGINE=MyISAM DEFAULT CHARSET=utf8; - --- -------------------------------------------------------- + `id` int(11) NOT NULL auto_increment PRIMARY KEY, + `iid` int(11) NOT NULL DEFAULT 0, + `uid` int(11) NOT NULL DEFAULT 0, + `sid` varchar(255) NOT NULL DEFAULT '', + `service` varchar(255) NOT NULL DEFAULT '', + INDEX `uid` (`uid`), + INDEX `sid` (`sid`), + INDEX `service` (`service`), + INDEX `iid` (`iid`) +) DEFAULT CHARSET=utf8; -- --- Table structure for table `locks` +-- TABLE locks -- - CREATE TABLE IF NOT EXISTS `locks` ( - `id` int(11) NOT NULL AUTO_INCREMENT, - `name` char(128) NOT NULL, - `locked` tinyint(1) NOT NULL DEFAULT '0', - PRIMARY KEY (`id`) -) ENGINE=MyISAM DEFAULT CHARSET=utf8; - --- -------------------------------------------------------- + `id` int(11) NOT NULL auto_increment PRIMARY KEY, + `name` varchar(128) NOT NULL DEFAULT '', + `locked` tinyint(1) NOT NULL DEFAULT 0, + `created` datetime DEFAULT '0000-00-00 00:00:00' +) DEFAULT CHARSET=utf8; -- --- Table structure for table `mail` +-- TABLE mail -- - CREATE TABLE IF NOT EXISTS `mail` ( - `id` int(10) unsigned NOT NULL AUTO_INCREMENT, - `uid` int(10) unsigned NOT NULL, - `guid` char(64) NOT NULL, - `from-name` char(255) NOT NULL, - `from-photo` char(255) NOT NULL, - `from-url` char(255) NOT NULL, - `contact-id` char(255) NOT NULL, - `convid` int(11) NOT NULL, - `title` char(255) NOT NULL, - `body` mediumtext NOT NULL, - `seen` tinyint(1) NOT NULL, - `reply` tinyint(1) NOT NULL DEFAULT '0', - `replied` tinyint(1) NOT NULL, - `unknown` tinyint(1) NOT NULL DEFAULT '0', - `uri` char(255) NOT NULL, - `parent-uri` char(255) NOT NULL, - `created` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', - PRIMARY KEY (`id`), - KEY `reply` (`reply`), - KEY `uid` (`uid`), - KEY `guid` (`guid`), - KEY `seen` (`seen`), - KEY `uri` (`uri`), - KEY `parent-uri` (`parent-uri`), - KEY `created` (`created`), - KEY `convid` (`convid`), - KEY `unknown` (`unknown`) -) ENGINE=MyISAM DEFAULT CHARSET=utf8; - --- -------------------------------------------------------- + `id` int(10) unsigned NOT NULL auto_increment PRIMARY KEY, + `uid` int(10) unsigned NOT NULL DEFAULT 0, + `guid` varchar(64) NOT NULL DEFAULT '', + `from-name` varchar(255) NOT NULL DEFAULT '', + `from-photo` varchar(255) NOT NULL DEFAULT '', + `from-url` varchar(255) NOT NULL DEFAULT '', + `contact-id` varchar(255) NOT NULL DEFAULT '', + `convid` int(11) unsigned NOT NULL DEFAULT 0, + `title` varchar(255) NOT NULL DEFAULT '', + `body` mediumtext NOT NULL, + `seen` tinyint(1) NOT NULL DEFAULT 0, + `reply` tinyint(1) NOT NULL DEFAULT 0, + `replied` tinyint(1) NOT NULL DEFAULT 0, + `unknown` tinyint(1) NOT NULL DEFAULT 0, + `uri` varchar(255) NOT NULL DEFAULT '', + `parent-uri` varchar(255) NOT NULL DEFAULT '', + `created` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + INDEX `uid` (`uid`), + INDEX `guid` (`guid`), + INDEX `convid` (`convid`), + INDEX `reply` (`reply`), + INDEX `uri` (`uri`), + INDEX `parent-uri` (`parent-uri`) +) DEFAULT CHARSET=utf8; -- --- Table structure for table `mailacct` +-- TABLE mailacct -- - CREATE TABLE IF NOT EXISTS `mailacct` ( - `id` int(11) NOT NULL AUTO_INCREMENT, - `uid` int(11) NOT NULL, - `server` char(255) NOT NULL, - `port` int(11) NOT NULL, - `ssltype` char(16) NOT NULL, - `mailbox` char(255) NOT NULL, - `user` char(255) NOT NULL, - `pass` text NOT NULL, - `action` int(11) NOT NULL, - `movetofolder` char(255) NOT NULL, - `reply_to` char(255) NOT NULL, - `pubmail` tinyint(1) NOT NULL DEFAULT '0', - `last_check` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', - PRIMARY KEY (`id`) -) ENGINE=MyISAM DEFAULT CHARSET=utf8; - --- -------------------------------------------------------- + `id` int(11) NOT NULL auto_increment PRIMARY KEY, + `uid` int(11) NOT NULL DEFAULT 0, + `server` varchar(255) NOT NULL DEFAULT '', + `port` int(11) NOT NULL DEFAULT 0, + `ssltype` varchar(16) NOT NULL DEFAULT '', + `mailbox` varchar(255) NOT NULL DEFAULT '', + `user` varchar(255) NOT NULL DEFAULT '', + `pass` text NOT NULL, + `reply_to` varchar(255) NOT NULL DEFAULT '', + `action` int(11) NOT NULL DEFAULT 0, + `movetofolder` varchar(255) NOT NULL DEFAULT '', + `pubmail` tinyint(1) NOT NULL DEFAULT 0, + `last_check` datetime NOT NULL DEFAULT '0000-00-00 00:00:00' +) DEFAULT CHARSET=utf8; -- --- Table structure for table `manage` +-- TABLE manage -- - CREATE TABLE IF NOT EXISTS `manage` ( - `id` int(11) NOT NULL AUTO_INCREMENT, - `uid` int(11) NOT NULL, - `mid` int(11) NOT NULL, - PRIMARY KEY (`id`), - KEY `uid` (`uid`), - KEY `mid` (`mid`) -) ENGINE=MyISAM DEFAULT CHARSET=utf8; - --- -------------------------------------------------------- + `id` int(11) NOT NULL auto_increment PRIMARY KEY, + `uid` int(11) NOT NULL DEFAULT 0, + `mid` int(11) NOT NULL DEFAULT 0, + INDEX `uid_mid` (`uid`,`mid`) +) DEFAULT CHARSET=utf8; -- --- Table structure for table `notify` +-- TABLE notify -- - CREATE TABLE IF NOT EXISTS `notify` ( - `id` int(11) NOT NULL AUTO_INCREMENT, - `hash` char(64) NOT NULL, - `name` char(255) NOT NULL, - `url` char(255) NOT NULL, - `photo` char(255) NOT NULL, - `date` datetime NOT NULL, - `msg` mediumtext NOT NULL, - `uid` int(11) NOT NULL, - `link` char(255) NOT NULL, - `parent` int(11) NOT NULL, - `seen` tinyint(1) NOT NULL DEFAULT '0', - `type` int(11) NOT NULL, - `verb` char(255) NOT NULL, - `otype` char(16) NOT NULL, - PRIMARY KEY (`id`), - KEY `type` (`type`), - KEY `seen` (`seen`), - KEY `uid` (`uid`), - KEY `date` (`date`), - KEY `hash` (`hash`), - KEY `parent` (`parent`), - KEY `link` (`link`), - KEY `otype` (`otype`) -) ENGINE=MyISAM DEFAULT CHARSET=utf8; - --- -------------------------------------------------------- + `id` int(11) NOT NULL auto_increment PRIMARY KEY, + `hash` varchar(64) NOT NULL DEFAULT '', + `type` int(11) NOT NULL DEFAULT 0, + `name` varchar(255) NOT NULL DEFAULT '', + `url` varchar(255) NOT NULL DEFAULT '', + `photo` varchar(255) NOT NULL DEFAULT '', + `date` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + `msg` mediumtext NOT NULL, + `uid` int(11) NOT NULL DEFAULT 0, + `link` varchar(255) NOT NULL DEFAULT '', + `parent` int(11) NOT NULL DEFAULT 0, + `seen` tinyint(1) NOT NULL DEFAULT 0, + `verb` varchar(255) NOT NULL DEFAULT '', + `otype` varchar(16) NOT NULL DEFAULT '', + INDEX `uid` (`uid`) +) DEFAULT CHARSET=utf8; -- --- Table structure for table `notify-threads` +-- TABLE notify-threads -- - CREATE TABLE IF NOT EXISTS `notify-threads` ( - `id` int(11) NOT NULL AUTO_INCREMENT, - `notify-id` int(11) NOT NULL, - `master-parent-item` int(10) unsigned NOT NULL DEFAULT '0', - `parent-item` int(10) unsigned NOT NULL DEFAULT '0', - `receiver-uid` int(11) NOT NULL, - PRIMARY KEY (`id`), - KEY `master-parent-item` (`master-parent-item`), - KEY `receiver-uid` (`receiver-uid`) -) ENGINE=MyISAM DEFAULT CHARSET=utf8; - --- -------------------------------------------------------- + `id` int(11) NOT NULL auto_increment PRIMARY KEY, + `notify-id` int(11) NOT NULL DEFAULT 0, + `master-parent-item` int(10) unsigned NOT NULL DEFAULT 0, + `parent-item` int(10) unsigned NOT NULL DEFAULT 0, + `receiver-uid` int(11) NOT NULL DEFAULT 0, + INDEX `master-parent-item` (`master-parent-item`), + INDEX `receiver-uid` (`receiver-uid`) +) DEFAULT CHARSET=utf8; -- --- Table structure for table `pconfig` +-- TABLE pconfig -- - CREATE TABLE IF NOT EXISTS `pconfig` ( - `id` int(11) NOT NULL AUTO_INCREMENT, - `uid` int(11) NOT NULL DEFAULT '0', - `cat` char(255) CHARACTER SET ascii NOT NULL, - `k` char(255) CHARACTER SET ascii NOT NULL, - `v` mediumtext NOT NULL, - PRIMARY KEY (`id`), - UNIQUE KEY `access` (`uid`,`cat`,`k`) -) ENGINE=MyISAM DEFAULT CHARSET=utf8; - --- -------------------------------------------------------- + `id` int(11) NOT NULL auto_increment PRIMARY KEY, + `uid` int(11) NOT NULL DEFAULT 0, + `cat` varchar(255) NOT NULL DEFAULT '', + `k` varchar(255) NOT NULL DEFAULT '', + `v` mediumtext NOT NULL, + INDEX `uid_cat_k` (`uid`,`cat`(30),`k`(30)) +) DEFAULT CHARSET=utf8; -- --- Table structure for table `photo` +-- TABLE photo -- - CREATE TABLE IF NOT EXISTS `photo` ( - `id` int(10) unsigned NOT NULL AUTO_INCREMENT, - `uid` int(10) unsigned NOT NULL, - `contact-id` int(10) unsigned NOT NULL DEFAULT '0', - `guid` char(64) NOT NULL, - `resource-id` char(255) NOT NULL, - `created` datetime NOT NULL, - `edited` datetime NOT NULL, - `title` char(255) NOT NULL, - `desc` text NOT NULL, - `album` char(255) NOT NULL, - `filename` char(255) NOT NULL, - `type` CHAR(128) NOT NULL DEFAULT 'image/jpeg', - `height` smallint(6) NOT NULL, - `width` smallint(6) NOT NULL, - `datasize` int(10) unsigned NOT NULL DEFAULT '0', - `data` mediumblob NOT NULL, - `scale` tinyint(3) NOT NULL, - `profile` tinyint(1) NOT NULL DEFAULT '0', - `allow_cid` mediumtext NOT NULL, - `allow_gid` mediumtext NOT NULL, - `deny_cid` mediumtext NOT NULL, - `deny_gid` mediumtext NOT NULL, - PRIMARY KEY (`id`), - KEY `uid` (`uid`), - KEY `resource-id` (`resource-id`), - KEY `album` (`album`), - KEY `scale` (`scale`), - KEY `datasize` (`datasize`), - KEY `profile` (`profile`) -) ENGINE=MyISAM DEFAULT CHARSET=utf8; - --- -------------------------------------------------------- + `id` int(10) unsigned NOT NULL auto_increment PRIMARY KEY, + `uid` int(10) unsigned NOT NULL DEFAULT 0, + `contact-id` int(10) unsigned NOT NULL DEFAULT 0, + `guid` varchar(64) NOT NULL DEFAULT '', + `resource-id` varchar(255) NOT NULL DEFAULT '', + `created` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + `edited` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + `title` varchar(255) NOT NULL DEFAULT '', + `desc` text NOT NULL, + `album` varchar(255) NOT NULL DEFAULT '', + `filename` varchar(255) NOT NULL DEFAULT '', + `type` varchar(128) NOT NULL DEFAULT 'image/jpeg', + `height` smallint(6) NOT NULL DEFAULT 0, + `width` smallint(6) NOT NULL DEFAULT 0, + `datasize` int(10) unsigned NOT NULL DEFAULT 0, + `data` mediumblob NOT NULL, + `scale` tinyint(3) NOT NULL DEFAULT 0, + `profile` tinyint(1) NOT NULL DEFAULT 0, + `allow_cid` mediumtext NOT NULL, + `allow_gid` mediumtext NOT NULL, + `deny_cid` mediumtext NOT NULL, + `deny_gid` mediumtext NOT NULL, + INDEX `uid` (`uid`), + INDEX `resource-id` (`resource-id`), + INDEX `guid` (`guid`) +) DEFAULT CHARSET=utf8; -- --- Table structure for table `poll` +-- TABLE poll -- - CREATE TABLE IF NOT EXISTS `poll` ( - `id` int(11) NOT NULL AUTO_INCREMENT, - `uid` int(11) NOT NULL, - `q0` mediumtext NOT NULL, - `q1` mediumtext NOT NULL, - `q2` mediumtext NOT NULL, - `q3` mediumtext NOT NULL, - `q4` mediumtext NOT NULL, - `q5` mediumtext NOT NULL, - `q6` mediumtext NOT NULL, - `q7` mediumtext NOT NULL, - `q8` mediumtext NOT NULL, - `q9` mediumtext NOT NULL, - PRIMARY KEY (`id`), - KEY `uid` (`uid`) -) ENGINE=MyISAM DEFAULT CHARSET=utf8; - --- -------------------------------------------------------- + `id` int(11) NOT NULL auto_increment PRIMARY KEY, + `uid` int(11) NOT NULL DEFAULT 0, + `q0` mediumtext NOT NULL, + `q1` mediumtext NOT NULL, + `q2` mediumtext NOT NULL, + `q3` mediumtext NOT NULL, + `q4` mediumtext NOT NULL, + `q5` mediumtext NOT NULL, + `q6` mediumtext NOT NULL, + `q7` mediumtext NOT NULL, + `q8` mediumtext NOT NULL, + `q9` mediumtext NOT NULL, + INDEX `uid` (`uid`) +) DEFAULT CHARSET=utf8; -- --- Table structure for table `poll_result` +-- TABLE poll_result -- - CREATE TABLE IF NOT EXISTS `poll_result` ( - `id` int(11) NOT NULL AUTO_INCREMENT, - `poll_id` int(11) NOT NULL, - `choice` int(11) NOT NULL, - PRIMARY KEY (`id`), - KEY `poll_id` (`poll_id`), - KEY `choice` (`choice`) -) ENGINE=MyISAM DEFAULT CHARSET=utf8; - --- -------------------------------------------------------- + `id` int(11) NOT NULL auto_increment PRIMARY KEY, + `poll_id` int(11) NOT NULL DEFAULT 0, + `choice` int(11) NOT NULL DEFAULT 0, + INDEX `poll_id` (`poll_id`), + INDEX `choice` (`choice`) +) DEFAULT CHARSET=utf8; -- --- Table structure for table `profile` +-- TABLE profile -- - CREATE TABLE IF NOT EXISTS `profile` ( - `id` int(11) NOT NULL AUTO_INCREMENT, - `uid` int(11) NOT NULL, - `profile-name` char(255) NOT NULL, - `is-default` tinyint(1) NOT NULL DEFAULT '0', - `hide-friends` tinyint(1) NOT NULL DEFAULT '0', - `name` char(255) NOT NULL, - `pdesc` char(255) NOT NULL, - `dob` char(32) NOT NULL DEFAULT '0000-00-00', - `address` char(255) NOT NULL, - `locality` char(255) NOT NULL, - `region` char(255) NOT NULL, - `postal-code` char(32) NOT NULL, - `country-name` char(255) NOT NULL, - `hometown` char(255) NOT NULL, - `gender` char(32) NOT NULL, - `marital` char(255) NOT NULL, - `with` text NOT NULL, - `howlong` datetime NOT NULL default '0000-00-00 00:00:00', - `sexual` char(255) NOT NULL, - `politic` char(255) NOT NULL, - `religion` char(255) NOT NULL, - `pub_keywords` text NOT NULL, - `prv_keywords` text NOT NULL, - `likes` text NOT NULL, - `dislikes` text NOT NULL, - `about` text NOT NULL, - `summary` char(255) NOT NULL, - `music` text NOT NULL, - `book` text NOT NULL, - `tv` text NOT NULL, - `film` text NOT NULL, - `interest` text NOT NULL, - `romance` text NOT NULL, - `work` text NOT NULL, - `education` text NOT NULL, - `contact` text NOT NULL, - `homepage` char(255) NOT NULL, - `photo` char(255) NOT NULL, - `thumb` char(255) NOT NULL, - `publish` tinyint(1) NOT NULL DEFAULT '0', - `net-publish` tinyint(1) NOT NULL DEFAULT '0', - PRIMARY KEY (`id`), - FULLTEXT KEY `pub_keywords` (`pub_keywords`), - FULLTEXT KEY `prv_keywords` (`prv_keywords`) -) ENGINE=MyISAM DEFAULT CHARSET=utf8; - --- -------------------------------------------------------- + `id` int(11) NOT NULL auto_increment PRIMARY KEY, + `uid` int(11) NOT NULL DEFAULT 0, + `profile-name` varchar(255) NOT NULL DEFAULT '', + `is-default` tinyint(1) NOT NULL DEFAULT 0, + `hide-friends` tinyint(1) NOT NULL DEFAULT 0, + `name` varchar(255) NOT NULL DEFAULT '', + `pdesc` varchar(255) NOT NULL DEFAULT '', + `dob` varchar(32) NOT NULL DEFAULT '0000-00-00', + `address` varchar(255) NOT NULL DEFAULT '', + `locality` varchar(255) NOT NULL DEFAULT '', + `region` varchar(255) NOT NULL DEFAULT '', + `postal-code` varchar(32) NOT NULL DEFAULT '', + `country-name` varchar(255) NOT NULL DEFAULT '', + `hometown` varchar(255) NOT NULL DEFAULT '', + `gender` varchar(32) NOT NULL DEFAULT '', + `marital` varchar(255) NOT NULL DEFAULT '', + `with` text NOT NULL, + `howlong` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + `sexual` varchar(255) NOT NULL DEFAULT '', + `politic` varchar(255) NOT NULL DEFAULT '', + `religion` varchar(255) NOT NULL DEFAULT '', + `pub_keywords` text NOT NULL, + `prv_keywords` text NOT NULL, + `likes` text NOT NULL, + `dislikes` text NOT NULL, + `about` text NOT NULL, + `summary` varchar(255) NOT NULL DEFAULT '', + `music` text NOT NULL, + `book` text NOT NULL, + `tv` text NOT NULL, + `film` text NOT NULL, + `interest` text NOT NULL, + `romance` text NOT NULL, + `work` text NOT NULL, + `education` text NOT NULL, + `contact` text NOT NULL, + `homepage` varchar(255) NOT NULL DEFAULT '', + `photo` varchar(255) NOT NULL DEFAULT '', + `thumb` varchar(255) NOT NULL DEFAULT '', + `publish` tinyint(1) NOT NULL DEFAULT 0, + `net-publish` tinyint(1) NOT NULL DEFAULT 0, + INDEX `hometown` (`hometown`) +) DEFAULT CHARSET=utf8; -- --- Table structure for table `profile_check` +-- TABLE profile_check -- - CREATE TABLE IF NOT EXISTS `profile_check` ( - `id` int(10) unsigned NOT NULL AUTO_INCREMENT, - `uid` int(10) unsigned NOT NULL, - `cid` int(10) unsigned NOT NULL DEFAULT '0', - `dfrn_id` char(255) NOT NULL, - `sec` char(255) NOT NULL, - `expire` int(11) NOT NULL, - PRIMARY KEY (`id`) -) ENGINE=MyISAM DEFAULT CHARSET=utf8; - --- -------------------------------------------------------- + `id` int(10) unsigned NOT NULL auto_increment PRIMARY KEY, + `uid` int(10) unsigned NOT NULL DEFAULT 0, + `cid` int(10) unsigned NOT NULL DEFAULT 0, + `dfrn_id` varchar(255) NOT NULL DEFAULT '', + `sec` varchar(255) NOT NULL DEFAULT '', + `expire` int(11) NOT NULL DEFAULT 0 +) DEFAULT CHARSET=utf8; -- --- Table structure for table `queue` +-- TABLE push_subscriber -- - -CREATE TABLE IF NOT EXISTS `queue` ( - `id` int(11) NOT NULL AUTO_INCREMENT, - `cid` int(11) NOT NULL, - `network` char(32) NOT NULL, - `created` datetime NOT NULL, - `last` datetime NOT NULL, - `content` mediumtext NOT NULL, - `batch` tinyint(1) NOT NULL DEFAULT '0', - PRIMARY KEY (`id`), - KEY `cid` (`cid`), - KEY `network` (`network`), - KEY `created` (`created`), - KEY `last` (`last`), - KEY `batch` (`batch`) -) ENGINE=MyISAM DEFAULT CHARSET=utf8; - --- -------------------------------------------------------- - --- --- Table structure for table `register` --- - -CREATE TABLE IF NOT EXISTS `register` ( - `id` int(10) unsigned NOT NULL AUTO_INCREMENT, - `hash` char(255) NOT NULL, - `created` datetime NOT NULL, - `uid` int(10) unsigned NOT NULL, - `password` char(255) NOT NULL, - `language` char(16) NOT NULL, - PRIMARY KEY (`id`) -) ENGINE=MyISAM DEFAULT CHARSET=utf8; - --- -------------------------------------------------------- - --- --- Table structure for table `search` --- - -CREATE TABLE IF NOT EXISTS `search` ( - `id` int(11) NOT NULL AUTO_INCREMENT, - `uid` int(11) NOT NULL, - `term` char(255) NOT NULL, - PRIMARY KEY (`id`), - KEY `uid` (`uid`), - KEY `term` (`term`) -) ENGINE=MyISAM DEFAULT CHARSET=utf8; - --- -------------------------------------------------------- - --- --- Table structure for table `session` --- - -CREATE TABLE IF NOT EXISTS `session` ( - `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT, - `sid` char(255) NOT NULL, - `data` text NOT NULL, - `expire` int(10) unsigned NOT NULL, - PRIMARY KEY (`id`), - KEY `sid` (`sid`), - KEY `expire` (`expire`) -) ENGINE=MyISAM DEFAULT CHARSET=utf8; - --- -------------------------------------------------------- - --- --- Table structure for table `sign` --- - -CREATE TABLE IF NOT EXISTS `sign` ( - `id` int(10) unsigned NOT NULL AUTO_INCREMENT, - `iid` int(10) unsigned NOT NULL DEFAULT '0', - `retract_iid` int(10) unsigned NOT NULL DEFAULT '0', - `signed_text` mediumtext NOT NULL, - `signature` text NOT NULL, - `signer` char(255) NOT NULL, - PRIMARY KEY (`id`), - KEY `iid` (`iid`), - KEY `retract_iid` (`retract_iid`) -) ENGINE=MyISAM DEFAULT CHARSET=utf8; - --- -------------------------------------------------------- - --- --- Table structure for table `spam` --- - -CREATE TABLE IF NOT EXISTS `spam` ( - `id` int(11) NOT NULL AUTO_INCREMENT, - `uid` int(11) NOT NULL, - `spam` int(11) NOT NULL DEFAULT '0', - `ham` int(11) NOT NULL DEFAULT '0', - `term` char(255) NOT NULL, - `date` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', - PRIMARY KEY (`id`), - KEY `uid` (`uid`), - KEY `spam` (`spam`), - KEY `ham` (`ham`), - KEY `term` (`term`) -) ENGINE=MyISAM DEFAULT CHARSET=utf8; - --- -------------------------------------------------------- - --- --- Table structure for table `term` --- - -CREATE TABLE IF NOT EXISTS `term` ( - `tid` int(10) unsigned NOT NULL AUTO_INCREMENT, - `aid` int(10) unsigned NOT NULL DEFAULT '0', - `uid` int(10) unsigned NOT NULL DEFAULT '0', - `oid` int(10) unsigned NOT NULL, - `otype` tinyint(3) unsigned NOT NULL, - `type` tinyint(3) unsigned NOT NULL, - `term` char(255) NOT NULL, - `url` char(255) NOT NULL, - PRIMARY KEY (`tid`), - KEY `oid` (`oid`), - KEY `otype` (`otype`), - KEY `type` (`type`), - KEY `term` (`term`), - KEY `uid` (`uid`), - KEY `aid` (`aid`) -) ENGINE=MyISAM DEFAULT CHARSET=utf8; - --- -------------------------------------------------------- - --- --- Table structure for table `tokens` --- - -CREATE TABLE IF NOT EXISTS `tokens` ( - `id` varchar(40) NOT NULL, - `secret` text NOT NULL, - `client_id` varchar(20) NOT NULL, - `expires` int(11) NOT NULL, - `scope` varchar(200) NOT NULL, - `uid` int(11) NOT NULL, - PRIMARY KEY (`id`) -) ENGINE=MyISAM DEFAULT CHARSET=utf8; - --- -------------------------------------------------------- - --- --- Table structure for table `user` --- - -CREATE TABLE IF NOT EXISTS `user` ( - `uid` int(11) NOT NULL AUTO_INCREMENT, - `guid` char(16) NOT NULL, - `username` char(255) NOT NULL, - `password` char(255) NOT NULL, - `nickname` char(255) NOT NULL, - `email` char(255) NOT NULL, - `openid` char(255) NOT NULL, - `timezone` char(128) NOT NULL, - `language` char(16) NOT NULL DEFAULT 'en', - `register_date` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', - `login_date` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', - `default-location` char(255) NOT NULL, - `allow_location` tinyint(1) NOT NULL DEFAULT '0', - `theme` char(255) NOT NULL, - `pubkey` text NOT NULL, - `prvkey` text NOT NULL, - `spubkey` text NOT NULL, - `sprvkey` text NOT NULL, - `verified` tinyint(1) unsigned NOT NULL DEFAULT '0', - `blocked` tinyint(1) unsigned NOT NULL DEFAULT '0', - `blockwall` tinyint(1) NOT NULL DEFAULT '0', - `hidewall` tinyint(1) NOT NULL DEFAULT '0', - `blocktags` tinyint(1) NOT NULL DEFAULT '0', - `unkmail` tinyint(1) NOT NULL DEFAULT '0', - `cntunkmail` int(11) NOT NULL DEFAULT '10', - `notify-flags` int(11) unsigned NOT NULL DEFAULT '65535', - `page-flags` int(11) NOT NULL DEFAULT '0', - `prvnets` tinyint(1) NOT NULL DEFAULT '0', - `pwdreset` char(255) NOT NULL, - `maxreq` int(11) NOT NULL DEFAULT '10', - `expire` int(10) unsigned NOT NULL DEFAULT '0', - `account_removed` tinyint(1) NOT NULL DEFAULT '0', - `account_expired` tinyint(1) NOT NULL DEFAULT '0', - `account_expires_on` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', - `expire_notification_sent` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', - `service_class` char(32) NOT NULL, - `def_gid` int(11) NOT NULL DEFAULT '0', - `allow_cid` mediumtext NOT NULL, - `allow_gid` mediumtext NOT NULL, - `deny_cid` mediumtext NOT NULL, - `deny_gid` mediumtext NOT NULL, - `openidserver` text NOT NULL, - PRIMARY KEY (`uid`), - KEY `nickname` (`nickname`), - KEY `login_date` (`login_date`), - KEY `account_expired` (`account_expired`), - KEY `hidewall` (`hidewall`), - KEY `blockwall` (`blockwall`), - KEY `blocked` (`blocked`), - KEY `verified` (`verified`), - KEY `unkmail` (`unkmail`), - KEY `cntunkmail` (`cntunkmail`), - KEY `account_removed` (`account_removed`), - KEY `service_class` (`service_class`) -) ENGINE=MyISAM DEFAULT CHARSET=utf8; - --- -------------------------------------------------------- - --- --- Table structure for table `userd` --- - -CREATE TABLE IF NOT EXISTS `userd` ( - `id` int(11) NOT NULL AUTO_INCREMENT, - `username` char(255) NOT NULL, - PRIMARY KEY (`id`) -) ENGINE=MyISAM DEFAULT CHARSET=utf8; - --- -------------------------------------------------------- - --- --- Table structure for table `tag` --- - -CREATE TABLE IF NOT EXISTS `tag` ( - `iid` int(11) NOT NULL, - `tag` char(255) NOT NULL, - `link` char(255) NOT NULL, - PRIMARY KEY (`iid`, `tag`), - KEY `tag` (`tag`) -) ENGINE=MyISAM DEFAULT CHARSET=utf8; - --- -------------------------------------------------------- - --- --- Table structure for table `push_subscriber` --- - CREATE TABLE IF NOT EXISTS `push_subscriber` ( - `id` int(11) NOT NULL AUTO_INCREMENT, - `uid` int(11) NOT NULL, - `callback_url` char(255) NOT NULL, - `topic` char(255) NOT NULL, - `nickname` char(255) NOT NULL, - `push` int(11) NOT NULL, - `last_update` datetime NOT NULL, - `secret` char(255) NOT NULL, - PRIMARY KEY (`id`) -) ENGINE=MyISAM DEFAULT CHARSET=utf8; - --- -------------------------------------------------------- + `id` int(11) NOT NULL auto_increment PRIMARY KEY, + `uid` int(11) NOT NULL DEFAULT 0, + `callback_url` varchar(255) NOT NULL DEFAULT '', + `topic` varchar(255) NOT NULL DEFAULT '', + `nickname` varchar(255) NOT NULL DEFAULT '', + `push` int(11) NOT NULL DEFAULT 0, + `last_update` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + `secret` varchar(255) NOT NULL DEFAULT '' +) DEFAULT CHARSET=utf8; -- --- Table structure for table `unique_contacts` +-- TABLE queue -- - -CREATE TABLE IF NOT EXISTS `unique_contacts` ( - `id` INT NOT NULL AUTO_INCREMENT, - `url` CHAR(255) NOT NULL, - `nick` CHAR(255) NOT NULL, - `name` CHAR(255) NOT NULL, - `avatar` CHAR(255) NOT NULL, - PRIMARY KEY (`id`), - KEY `url` (`url`) -) ENGINE=MyISAM DEFAULT CHARSET=utf8; - --- -------------------------------------------------------- +CREATE TABLE IF NOT EXISTS `queue` ( + `id` int(11) NOT NULL auto_increment PRIMARY KEY, + `cid` int(11) NOT NULL DEFAULT 0, + `network` varchar(32) NOT NULL DEFAULT '', + `created` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + `last` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + `content` mediumtext NOT NULL, + `batch` tinyint(1) NOT NULL DEFAULT 0, + INDEX `cid` (`cid`), + INDEX `created` (`created`), + INDEX `last` (`last`), + INDEX `network` (`network`), + INDEX `batch` (`batch`) +) DEFAULT CHARSET=utf8; -- --- Table structure for table `thread` +-- TABLE register -- +CREATE TABLE IF NOT EXISTS `register` ( + `id` int(11) unsigned NOT NULL auto_increment PRIMARY KEY, + `hash` varchar(255) NOT NULL DEFAULT '', + `created` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + `uid` int(11) unsigned NOT NULL DEFAULT 0, + `password` varchar(255) NOT NULL DEFAULT '', + `language` varchar(16) NOT NULL DEFAULT '' +) DEFAULT CHARSET=utf8; +-- +-- TABLE search +-- +CREATE TABLE IF NOT EXISTS `search` ( + `id` int(11) NOT NULL auto_increment PRIMARY KEY, + `uid` int(11) NOT NULL DEFAULT 0, + `term` varchar(255) NOT NULL DEFAULT '', + INDEX `uid` (`uid`), + INDEX `term` (`term`) +) DEFAULT CHARSET=utf8; + +-- +-- TABLE session +-- +CREATE TABLE IF NOT EXISTS `session` ( + `id` bigint(20) unsigned NOT NULL auto_increment PRIMARY KEY, + `sid` varchar(255) NOT NULL DEFAULT '', + `data` text NOT NULL, + `expire` int(10) unsigned NOT NULL DEFAULT 0, + INDEX `sid` (`sid`), + INDEX `expire` (`expire`) +) DEFAULT CHARSET=utf8; + +-- +-- TABLE sign +-- +CREATE TABLE IF NOT EXISTS `sign` ( + `id` int(10) unsigned NOT NULL auto_increment PRIMARY KEY, + `iid` int(10) unsigned NOT NULL DEFAULT 0, + `retract_iid` int(10) unsigned NOT NULL DEFAULT 0, + `signed_text` mediumtext NOT NULL, + `signature` text NOT NULL, + `signer` varchar(255) NOT NULL DEFAULT '', + INDEX `iid` (`iid`), + INDEX `retract_iid` (`retract_iid`) +) DEFAULT CHARSET=utf8; + +-- +-- TABLE spam +-- +CREATE TABLE IF NOT EXISTS `spam` ( + `id` int(11) NOT NULL auto_increment PRIMARY KEY, + `uid` int(11) NOT NULL DEFAULT 0, + `spam` int(11) NOT NULL DEFAULT 0, + `ham` int(11) NOT NULL DEFAULT 0, + `term` varchar(255) NOT NULL DEFAULT '', + `date` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + INDEX `uid` (`uid`), + INDEX `spam` (`spam`), + INDEX `ham` (`ham`), + INDEX `term` (`term`) +) DEFAULT CHARSET=utf8; + +-- +-- TABLE term +-- +CREATE TABLE IF NOT EXISTS `term` ( + `tid` int(10) unsigned NOT NULL auto_increment PRIMARY KEY, + `oid` int(10) unsigned NOT NULL DEFAULT 0, + `otype` tinyint(3) unsigned NOT NULL DEFAULT 0, + `type` tinyint(3) unsigned NOT NULL DEFAULT 0, + `term` varchar(255) NOT NULL DEFAULT '', + `url` varchar(255) NOT NULL DEFAULT '', + `guid` varchar(255) NOT NULL DEFAULT '', + `created` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + `received` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + `global` tinyint(1) NOT NULL DEFAULT 0, + `aid` int(10) unsigned NOT NULL DEFAULT 0, + `uid` int(10) unsigned NOT NULL DEFAULT 0, + INDEX `oid_otype_type_term` (`oid`,`otype`,`type`,`term`), + INDEX `uid_term_tid` (`uid`,`term`,`tid`), + INDEX `type_term` (`type`,`term`), + INDEX `uid_otype_type_term_global_created` (`uid`,`otype`,`type`,`term`,`global`,`created`), + INDEX `otype_type_term_tid` (`otype`,`type`,`term`,`tid`), + INDEX `guid` (`guid`) +) DEFAULT CHARSET=utf8; + +-- +-- TABLE thread +-- CREATE TABLE IF NOT EXISTS `thread` ( - `iid` int(10) unsigned NOT NULL DEFAULT '0', - `uid` int(10) unsigned NOT NULL DEFAULT '0', - `contact-id` int(11) unsigned NOT NULL DEFAULT '0', - `created` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', - `edited` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', - `commented` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', - `received` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', - `changed` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', - `wall` tinyint(1) NOT NULL DEFAULT '0', - `private` tinyint(1) NOT NULL DEFAULT '0', - `pubmail` tinyint(1) NOT NULL DEFAULT '0', - `moderated` tinyint(1) NOT NULL DEFAULT '0', - `visible` tinyint(1) NOT NULL DEFAULT '0', - `spam` tinyint(1) NOT NULL DEFAULT '0', - `starred` tinyint(1) NOT NULL DEFAULT '0', - `bookmark` tinyint(1) NOT NULL DEFAULT '0', - `unseen` tinyint(1) NOT NULL DEFAULT '1', - `deleted` tinyint(1) NOT NULL DEFAULT '0', - `origin` tinyint(1) NOT NULL DEFAULT '0', - `forum_mode` tinyint(1) NOT NULL DEFAULT '0', - `mention` tinyint(1) NOT NULL DEFAULT '0', - `network` char(32) NOT NULL, - PRIMARY KEY (`iid`), - KEY `created` (`created`), - KEY `commented` (`commented`), - KEY `uid_network_commented` (`uid`,`network`,`commented`), - KEY `uid_network_created` (`uid`,`network`,`created`), - KEY `uid_contactid_commented` (`uid`,`contact-id`,`commented`), - KEY `uid_contactid_created` (`uid`,`contact-id`,`created`), - KEY `wall_private_received` (`wall`,`private`,`received`), - KEY `uid_created` (`uid`,`created`), - KEY `uid_commented` (`uid`,`commented`) -) ENGINE=MyISAM DEFAULT CHARSET=utf8; + `iid` int(10) unsigned NOT NULL DEFAULT 0 PRIMARY KEY, + `uid` int(10) unsigned NOT NULL DEFAULT 0, + `contact-id` int(11) unsigned NOT NULL DEFAULT 0, + `created` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + `edited` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + `commented` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + `received` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + `changed` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + `wall` tinyint(1) NOT NULL DEFAULT 0, + `private` tinyint(1) NOT NULL DEFAULT 0, + `pubmail` tinyint(1) NOT NULL DEFAULT 0, + `moderated` tinyint(1) NOT NULL DEFAULT 0, + `visible` tinyint(1) NOT NULL DEFAULT 0, + `spam` tinyint(1) NOT NULL DEFAULT 0, + `starred` tinyint(1) NOT NULL DEFAULT 0, + `ignored` tinyint(1) NOT NULL DEFAULT 0, + `bookmark` tinyint(1) NOT NULL DEFAULT 0, + `unseen` tinyint(1) NOT NULL DEFAULT 1, + `deleted` tinyint(1) NOT NULL DEFAULT 0, + `origin` tinyint(1) NOT NULL DEFAULT 0, + `forum_mode` tinyint(1) NOT NULL DEFAULT 0, + `mention` tinyint(1) NOT NULL DEFAULT 0, + `network` varchar(32) NOT NULL DEFAULT '', + INDEX `created` (`created`), + INDEX `commented` (`commented`), + INDEX `uid_network_commented` (`uid`,`network`,`commented`), + INDEX `uid_network_created` (`uid`,`network`,`created`), + INDEX `uid_contactid_commented` (`uid`,`contact-id`,`commented`), + INDEX `uid_contactid_created` (`uid`,`contact-id`,`created`), + INDEX `wall_private_received` (`wall`,`private`,`received`), + INDEX `uid_created` (`uid`,`created`), + INDEX `uid_commented` (`uid`,`commented`) +) DEFAULT CHARSET=utf8; + +-- +-- TABLE tokens +-- +CREATE TABLE IF NOT EXISTS `tokens` ( + `id` varchar(40) NOT NULL PRIMARY KEY, + `secret` text NOT NULL, + `client_id` varchar(20) NOT NULL DEFAULT '', + `expires` int(11) NOT NULL DEFAULT 0, + `scope` varchar(200) NOT NULL DEFAULT '', + `uid` int(11) NOT NULL DEFAULT 0 +) DEFAULT CHARSET=utf8; + +-- +-- TABLE unique_contacts +-- +CREATE TABLE IF NOT EXISTS `unique_contacts` ( + `id` int(11) NOT NULL auto_increment PRIMARY KEY, + `url` varchar(255) NOT NULL DEFAULT '', + `nick` varchar(255) NOT NULL DEFAULT '', + `name` varchar(255) NOT NULL DEFAULT '', + `avatar` varchar(255) NOT NULL DEFAULT '', + `location` varchar(255) NOT NULL DEFAULT '', + `about` text NOT NULL, + INDEX `url` (`url`) +) DEFAULT CHARSET=utf8; + +-- +-- TABLE user +-- +CREATE TABLE IF NOT EXISTS `user` ( + `uid` int(11) NOT NULL auto_increment PRIMARY KEY, + `guid` varchar(64) NOT NULL DEFAULT '', + `username` varchar(255) NOT NULL DEFAULT '', + `password` varchar(255) NOT NULL DEFAULT '', + `nickname` varchar(255) NOT NULL DEFAULT '', + `email` varchar(255) NOT NULL DEFAULT '', + `openid` varchar(255) NOT NULL DEFAULT '', + `timezone` varchar(128) NOT NULL DEFAULT '', + `language` varchar(32) NOT NULL DEFAULT 'en', + `register_date` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + `login_date` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + `default-location` varchar(255) NOT NULL DEFAULT '', + `allow_location` tinyint(1) NOT NULL DEFAULT 0, + `theme` varchar(255) NOT NULL DEFAULT '', + `pubkey` text NOT NULL, + `prvkey` text NOT NULL, + `spubkey` text NOT NULL, + `sprvkey` text NOT NULL, + `verified` tinyint(1) unsigned NOT NULL DEFAULT 0, + `blocked` tinyint(1) unsigned NOT NULL DEFAULT 0, + `blockwall` tinyint(1) unsigned NOT NULL DEFAULT 0, + `hidewall` tinyint(1) unsigned NOT NULL DEFAULT 0, + `blocktags` tinyint(1) unsigned NOT NULL DEFAULT 0, + `unkmail` tinyint(1) NOT NULL DEFAULT 0, + `cntunkmail` int(11) NOT NULL DEFAULT 10, + `notify-flags` int(11) unsigned NOT NULL DEFAULT 65535, + `page-flags` int(11) unsigned NOT NULL DEFAULT 0, + `prvnets` tinyint(1) NOT NULL DEFAULT 0, + `pwdreset` varchar(255) NOT NULL DEFAULT '', + `maxreq` int(11) NOT NULL DEFAULT 10, + `expire` int(11) unsigned NOT NULL DEFAULT 0, + `account_removed` tinyint(1) NOT NULL DEFAULT 0, + `account_expired` tinyint(1) NOT NULL DEFAULT 0, + `account_expires_on` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + `expire_notification_sent` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + `service_class` varchar(32) NOT NULL DEFAULT '', + `def_gid` int(11) NOT NULL DEFAULT 0, + `allow_cid` mediumtext NOT NULL, + `allow_gid` mediumtext NOT NULL, + `deny_cid` mediumtext NOT NULL, + `deny_gid` mediumtext NOT NULL, + `openidserver` text NOT NULL, + INDEX `nickname` (`nickname`) +) DEFAULT CHARSET=utf8; + +-- +-- TABLE userd +-- +CREATE TABLE IF NOT EXISTS `userd` ( + `id` int(11) NOT NULL auto_increment PRIMARY KEY, + `username` varchar(255) NOT NULL, + INDEX `username` (`username`) +) DEFAULT CHARSET=utf8; + diff --git a/doc/Developers-Intro.md b/doc/Developers-Intro.md index 727d3be92..23aff4f01 100644 --- a/doc/Developers-Intro.md +++ b/doc/Developers-Intro.md @@ -18,25 +18,24 @@ Remember the questions you had when you first tried Friendica? A good place to s **Translations** -The documentation contains help on how to translate Friendica in the /help/translations page. - -* Check if the user interface has already been translated to your language. -* If not, we might want to start with translating the /help pages. +The documentation contains help on how to translate Friendica in the [at Transifex](/help/translations) where the UI is translated. +If you don't want to translate the UI, or it is already done to your satisfaction, you might want to work on the translation of the /help files? **Design** Are you good at designing things? If you have seen Friendica you probably have ideas to improve it, haven't you? +* If you would like to work with us on enhancing the user interface, please join the [UX Watchdogs forum](https://fc.oscp.info/profile/ux-watchdogs) * Make plans for a better Friendica interface design and share them with us. * Tell us if you are able to realize your ideas or what kind of help you need. We can't promise we have the right skills in the group but we'll try. * Choose a thing to start with, e.g. work on the icon set of your favourite theme **Programming** -* **Issues:** Have a look at our issue tracker on gihub! +* **Issues:** Have a look at our [issue tracker](https://github.com/friendica/friendica) on gihub! * Try to reproduce a bug that needs more inquries and write down what you find out. * If a bug looks fixed, ask the bug reporters for feedback to find out if the bug can be closed. - * Fix a bug if you can. + * Fix a bug if you can. Please make the pull request against the *develop* branch of the repository. * **Web interface:** The thing many people want most is a better interface, preferably a responsive Friendica theme. This is a piece of work! If you want to get involved here: * Look at the first steps that were made (e.g. the clean theme). Ask us to find out whom to talk to about their experiences. diff --git a/include/Contact.php b/include/Contact.php index 6777df65a..633936025 100644 --- a/include/Contact.php +++ b/include/Contact.php @@ -46,6 +46,10 @@ function user_remove($uid) { // q("DELETE FROM `user` WHERE `uid` = %d", intval($uid)); q("UPDATE `user` SET `account_removed` = 1, `account_expires_on` = UTC_TIMESTAMP() WHERE `uid` = %d", intval($uid)); proc_run('php', "include/notifier.php", "removeme", $uid); + + // Send an update to the directory + proc_run('php', "include/directory.php", $r[0]['url']); + if($uid == local_user()) { unset($_SESSION['authenticated']); unset($_SESSION['uid']); diff --git a/include/Scrape.php b/include/Scrape.php index c2917d589..ce18bb103 100644 --- a/include/Scrape.php +++ b/include/Scrape.php @@ -364,17 +364,6 @@ function probe_url($url, $mode = PROBE_NORMAL) { $network = NETWORK_TWITTER; } - if (strpos($url,'www.facebook.com')) { - $connectornetworks = true; - $network = NETWORK_FACEBOOK; - } - - if (strpos($url,'alpha.app.net')) { - $appnet = true; - $network = NETWORK_APPNET; - } - - // Twitter is deactivated since twitter closed its old API //$twitter = ((strpos($url,'twitter.com') !== false) ? true : false); $lastfm = ((strpos($url,'last.fm/user') !== false) ? true : false); diff --git a/include/api.php b/include/api.php index 4d714e583..cf75428a3 100644 --- a/include/api.php +++ b/include/api.php @@ -7,6 +7,9 @@ require_once("include/conversation.php"); require_once("include/oauth.php"); require_once("include/html2plain.php"); + require_once("mod/share.php"); + require_once("include/Photo.php"); + /* * Twitter-Like API * @@ -821,6 +824,18 @@ $_REQUEST['body'] .= "\n\n".$media; } + // To-Do: Multiple IDs + if (requestdata('media_ids')) { + $r = q("SELECT `resource-id`, `scale`, `nickname`, `type` FROM `photo` INNER JOIN `user` ON `user`.`uid` = `photo`.`uid` WHERE `resource-id` IN (SELECT `resource-id` FROM `photo` WHERE `id` = %d) AND `scale` > 0 AND `photo`.`uid` = %d ORDER BY `photo`.`width` DESC LIMIT 1", + intval(requestdata('media_ids')), api_user()); + if ($r) { + $phototypes = Photo::supportedTypes(); + $ext = $phototypes[$r[0]['type']]; + $_REQUEST['body'] .= "\n\n".'[url='.$a->get_baseurl().'/photos/'.$r[0]['nickname'].'/image/'.$r[0]['resource-id'].']'; + $_REQUEST['body'] .= '[img]'.$a->get_baseurl()."/photo/".$r[0]['resource-id']."-".$r[0]['scale'].".".$ext."[/img][/url]"; + } + } + // set this so that the item_post() function is quiet and doesn't redirect or emit json $_REQUEST['api_source'] = true; @@ -840,6 +855,41 @@ api_register_func('api/statuses/update_with_media','api_statuses_update', true); + function api_media_upload(&$a, $type) { + if (api_user()===false) { + logger('no user'); + return false; + } + + $user_info = api_get_user($a); + + if(!x($_FILES,'media')) { + // Output error + return false; + } + + require_once('mod/wall_upload.php'); + $media = wall_upload_post($a, false); + if(!$media) { + // Output error + return false; + } + + $returndata = array(); + $returndata["media_id"] = $media["id"]; + $returndata["media_id_string"] = (string)$media["id"]; + $returndata["size"] = $media["size"]; + $returndata["image"] = array("w" => $media["width"], + "h" => $media["height"], + "image_type" => $media["type"]); + + logger("Media uploaded: ".print_r($returndata, true), LOGGER_DEBUG); + + return array("media" => $returndata); + } + + api_register_func('api/media/upload','api_media_upload', true); + function api_status_show(&$a, $type){ $user_info = api_get_user($a); @@ -1129,15 +1179,15 @@ $ret = api_format_items($r,$user_info); - // We aren't going to try to figure out at the item, group, and page - // level which items you've seen and which you haven't. If you're looking - // at the network timeline just mark everything seen. + // Set all posts from the query above to seen + $idarray = array(); + foreach ($r AS $item) + $idarray[] = intval($item["id"]); - $r = q("UPDATE `item` SET `unseen` = 0 - WHERE `unseen` = 1 AND `uid` = %d", - //intval($user_info['uid']) - intval(api_user()) - ); + $idlist = implode(",", $idarray); + + if ($idlist != "") + $r = q("UPDATE `item` SET `unseen` = 0 WHERE `unseen` AND `id` IN (%s)", $idlist); $data = array('$statuses' => $ret); @@ -1390,10 +1440,8 @@ $pos = strpos($r[0]['body'], "[share"); $post = substr($r[0]['body'], $pos); } else { - $post = "[share author='".str_replace("'", "'", $r[0]['author-name']). - "' profile='".$r[0]['author-link']. - "' avatar='".$r[0]['author-avatar']. - "' link='".$r[0]['plink']."']"; + $post = share_header($r[0]['author-name'], $r[0]['author-link'], $r[0]['author-avatar'], $r[0]['guid'], $r[0]['created'], $r[0]['plink']); + $post .= $r[0]['body']; $post .= "[/share]"; } @@ -1877,8 +1925,6 @@ if (!$ret) return false; - require_once("include/Photo.php"); - $attachments = array(); foreach ($images[1] AS $image) { @@ -2004,7 +2050,6 @@ $start = iconv_strpos($text, $url, $offset, "UTF-8"); if (!($start === false)) { - require_once("include/Photo.php"); $image = get_photo_info($url); if ($image) { // If image cache is activated, then use the following sizes: diff --git a/include/bbcode.php b/include/bbcode.php index 3cf67af69..ef791d9e7 100644 --- a/include/bbcode.php +++ b/include/bbcode.php @@ -42,7 +42,7 @@ function bb_attachment($Text, $plaintext = false, $tryoembed = true) { $title = $matches[1]; //$title = htmlentities($title, ENT_QUOTES, 'UTF-8', false); - $title = bbcode(html_entity_decode($title), false, false, true); + $title = bbcode(html_entity_decode($title, ENT_QUOTES, 'UTF-8'), false, false, true); $title = str_replace(array("[", "]"), array("[", "]"), $title); $image = ""; @@ -509,9 +509,7 @@ function bb_ShareAttributes($share, $simplehtml) { $text = $preshare.html_entity_decode("♲ ", ENT_QUOTES, 'UTF-8').' '.$userid_compact.":
".$share[3]; break; case 3: // Diaspora - $headline = '
'; - $headline .= ''.html_entity_decode("♲ ", ENT_QUOTES, 'UTF-8').$userid.':'; - $headline .= "
"; + $headline .= ''.html_entity_decode("♲ ", ENT_QUOTES, 'UTF-8').$userid.':
'; $text = trim($share[1]); @@ -519,7 +517,7 @@ function bb_ShareAttributes($share, $simplehtml) { $text .= "
"; if (substr(normalise_link($link), 0, 19) != "http://twitter.com/") { - $text .= $headline.'
'.trim($share[3])."

"; + $text .= $headline.'
'.trim($share[3])."

"; if ($link != "") $text .= '
[l]'; diff --git a/include/dbstructure.php b/include/dbstructure.php index 0e78694a7..f131abe64 100644 --- a/include/dbstructure.php +++ b/include/dbstructure.php @@ -106,29 +106,17 @@ function table_structure($table) { } function print_structure($database) { + echo "-- ------------------------------------------\n"; + echo "-- ".FRIENDICA_PLATFORM." ".FRIENDICA_VERSION." (".FRIENDICA_CODENAME,")\n"; + echo "-- DB_UPDATE_VERSION ".DB_UPDATE_VERSION."\n"; + echo "-- ------------------------------------------\n\n\n"; foreach ($database AS $name => $structure) { - echo "\t".'$database["'.$name."\"] = array(\n"; + echo "--\n"; + echo "-- TABLE $name\n"; + echo "--\n"; + db_create_table($name, $structure['fields'], true, false, $structure["indexes"]); - echo "\t\t\t".'"fields" => array('."\n"; - foreach ($structure["fields"] AS $fieldname => $parameters) { - echo "\t\t\t\t\t".'"'.$fieldname.'" => array('; - - $data = ""; - foreach ($parameters AS $name => $value) { - if ($data != "") - $data .= ", "; - $data .= '"'.$name.'" => "'.$value.'"'; - } - - echo $data."),\n"; - } - echo "\t\t\t\t\t),\n"; - echo "\t\t\t".'"indexes" => array('."\n"; - foreach ($structure["indexes"] AS $indexname => $fieldnames) { - echo "\t\t\t\t\t".'"'.$indexname.'" => array("'.implode($fieldnames, '","').'"'."),\n"; - } - echo "\t\t\t\t\t)\n"; - echo "\t\t\t);\n"; + echo "\n"; } } @@ -231,9 +219,13 @@ function db_field_command($parameters, $create = true) { if ($parameters["not null"]) $fieldstruct .= " NOT NULL"; - if (isset($parameters["default"])) - $fieldstruct .= " DEFAULT '".$parameters["default"]."'"; - + if (isset($parameters["default"])){ + if (strpos(strtolower($parameters["type"]),"int")!==false) { + $fieldstruct .= " DEFAULT ".$parameters["default"]; + } else { + $fieldstruct .= " DEFAULT '".$parameters["default"]."'"; + } + } if ($parameters["extra"] != "") $fieldstruct .= " ".$parameters["extra"]; @@ -243,20 +235,28 @@ function db_field_command($parameters, $create = true) { return($fieldstruct); } -function db_create_table($name, $fields, $verbose, $action) { +function db_create_table($name, $fields, $verbose, $action, $indexes=null) { global $a, $db; $r = true; $sql = ""; + $sql_rows = array(); foreach($fields AS $fieldname => $field) { - if ($sql != "") - $sql .= ",\n"; - - $sql .= "`".dbesc($fieldname)."` ".db_field_command($field); + $sql_rows[] = "`".dbesc($fieldname)."` ".db_field_command($field); } - $sql = sprintf("CREATE TABLE IF NOT EXISTS `%s` (\n", dbesc($name)).$sql."\n) DEFAULT CHARSET=utf8"; + if (!is_null($indexes)) { + + foreach ($indexes AS $indexname => $fieldnames) { + $sql_index = db_create_index($indexname, $fieldnames, ""); + if (!is_null($sql_index)) $sql_rows[] = $sql_index; + } + } + + $sql = implode(",\n\t", $sql_rows); + + $sql = sprintf("CREATE TABLE IF NOT EXISTS `%s` (\n\t", dbesc($name)).$sql."\n) DEFAULT CHARSET=utf8"; if ($verbose) echo $sql.";\n"; @@ -282,7 +282,7 @@ function db_drop_index($indexname) { return($sql); } -function db_create_index($indexname, $fieldnames) { +function db_create_index($indexname, $fieldnames, $method="ADD") { if ($indexname == "PRIMARY") return; @@ -298,7 +298,13 @@ function db_create_index($indexname, $fieldnames) { $names .= "`".dbesc($fieldname)."`"; } - $sql = sprintf("ADD INDEX `%s` (%s)", dbesc($indexname), $names); + $method = strtoupper(trim($method)); + if ($method!="" && $method!="ADD") { + throw new Exception("Invalid parameter 'method' in db_create_index(): '$method'"); + killme(); + } + + $sql = sprintf("%s INDEX `%s` (%s)", $method, dbesc($indexname), $names); return($sql); } @@ -1357,7 +1363,29 @@ function dbstructure_run(&$argv, &$argc) { unset($db_host, $db_user, $db_pass, $db_data); } - update_structure(true, true); + if ($argc==2) { + switch ($argv[1]) { + case "update": + update_structure(true, true); + return; + case "dumpsql": + print_structure(db_definition()); + return; + } + } + + + // print help + echo $argv[0]." \n"; + echo "\n"; + echo "commands:\n"; + echo "update update database schema\n"; + echo "dumpsql dump database schema\n"; + return; + + + + } if (array_search(__file__,get_included_files())===0){ diff --git a/include/diaspora.php b/include/diaspora.php index 1202a3a55..6b42e3c55 100755 --- a/include/diaspora.php +++ b/include/diaspora.php @@ -6,6 +6,8 @@ require_once('include/bb2diaspora.php'); require_once('include/contact_selectors.php'); require_once('include/queue_fn.php'); require_once('include/lock.php'); +require_once('include/threads.php'); +require_once('mod/share.php'); function diaspora_dispatch_public($msg) { @@ -777,6 +779,18 @@ function diaspora_post_allow($importer,$contact) { return false; } +function diaspora_plink($addr, $guid) { + $r = q("SELECT `url`, `nick` FROM `fcontact` WHERE `addr`='%s' LIMIT 1", $addr); + + // Fallback + if (!$r) + return 'https://'.substr($addr,strpos($addr,'@')+1).'/posts/'.$guid; + + if (strstr($r[0]["url"], "/channel/")) + return $r[0]["url"]."/?f=&mid=".$guid; + + return 'https://'.substr($addr,strpos($addr,'@')+1).'/posts/'.$guid; +} function diaspora_post($importer,$xml,$msg) { @@ -842,7 +856,7 @@ function diaspora_post($importer,$xml,$msg) { } } - $plink = 'https://'.substr($diaspora_handle,strpos($diaspora_handle,'@')+1).'/posts/'.$guid; + $plink = diaspora_plink($diaspora_handle, $guid); $datarray['uid'] = $importer['uid']; $datarray['contact-id'] = $contact['id']; @@ -935,7 +949,7 @@ function diaspora_store_by_guid($guid, $server) { $datarray['changed'] = $datarray['created'] = $datarray['edited'] = datetime_convert('UTC','UTC',$created); $datarray['private'] = $private; $datarray['parent'] = 0; - $datarray['plink'] = 'https://'.substr($author,strpos($author,'@')+1).'/posts/'.$guid; + $datarray['plink'] = diaspora_plink($author, $guid); $datarray['author-name'] = $person['name']; $datarray['author-link'] = $person['url']; $datarray['author-avatar'] = ((x($person,'thumb')) ? $person['thumb'] : $person['photo']); @@ -1148,7 +1162,7 @@ function diaspora_reshare($importer,$xml,$msg) { $datarray = array(); - $plink = 'https://'.substr($diaspora_handle,strpos($diaspora_handle,'@')+1).'/posts/'.$guid; + $plink = diaspora_plink($diaspora_handle, $guid); $datarray['uid'] = $importer['uid']; $datarray['contact-id'] = $contact['id']; @@ -1164,12 +1178,8 @@ function diaspora_reshare($importer,$xml,$msg) { $datarray['owner-link'] = $contact['url']; $datarray['owner-avatar'] = ((x($contact,'thumb')) ? $contact['thumb'] : $contact['photo']); if (!intval(get_config('system','wall-to-wall_share'))) { - $prefix = "[share author='".str_replace(array("'", "[", "]"), array("'", "[", "]"),$person['name']). - "' profile='".$person['url']. - "' avatar='".((x($person,'thumb')) ? $person['thumb'] : $person['photo']). - "' guid='".$orig_guid. - "' posted='".$orig_created. - "' link='".str_replace(array("'", "[", "]"), array("'", "[", "]"),$orig_url)."']"; + $prefix = share_header($person['name'], $person['url'], ((x($person,'thumb')) ? $person['thumb'] : $person['photo']), $orig_guid, $orig_created, $orig_url); + $datarray['author-name'] = $contact['name']; $datarray['author-link'] = $contact['url']; $datarray['author-avatar'] = $contact['thumb']; @@ -1198,8 +1208,8 @@ function diaspora_reshare($importer,$xml,$msg) { $datarray2['contact-id'] = get_contact($person['url'], 0); $datarray2['guid'] = $orig_guid; $datarray2['uri'] = $datarray2['parent-uri'] = $orig_author.':'.$orig_guid; - $datarray2['changed'] = $datarray2['created'] = $datarray2['edited'] = datetime_convert('UTC','UTC',$orig_created); - $datarray2['plink'] = 'https://'.substr($orig_author,strpos($orig_author,'@')+1).'/posts/'.$orig_guid; + $datarray2['changed'] = $datarray2['created'] = $datarray2['edited'] = $datarray2['commented'] = $datarray2['received'] = datetime_convert('UTC','UTC',$orig_created); + $datarray2['plink'] = diaspora_plink($orig_author, $orig_guid); $datarray2['author-name'] = $person['name']; $datarray2['author-link'] = $person['url']; @@ -1283,7 +1293,7 @@ function diaspora_asphoto($importer,$xml,$msg) { return; } - $plink = 'https://'.substr($diaspora_handle,strpos($diaspora_handle,'@')+1).'/posts/'.$guid; + $plink = diaspora_plink($diaspora_handle, $guid); $datarray = array(); @@ -1855,11 +1865,12 @@ function diaspora_photo($importer,$xml,$msg,$attempt=1) { array($remote_photo_name, 'scaled_full_' . $remote_photo_name)); if(strpos($parent_item['body'],$link_text) === false) { - $r = q("update item set `body` = '%s', `visible` = 1 where `id` = %d and `uid` = %d", + $r = q("UPDATE `item` SET `body` = '%s', `visible` = 1 WHERE `id` = %d AND `uid` = %d", dbesc($link_text . $parent_item['body']), intval($parent_item['id']), intval($parent_item['uid']) ); + update_thread($parent_item['id']); } return; @@ -1934,7 +1945,7 @@ function diaspora_like($importer,$xml,$msg) { if($positive === 'false') { logger('diaspora_like: received a like with positive set to "false"'); logger('diaspora_like: unlike received with no corresponding like...ignoring'); - return; + return; } @@ -1950,26 +1961,28 @@ function diaspora_like($importer,$xml,$msg) { who sent the salmon */ - $signed_data = $guid . ';' . $target_type . ';' . $parent_guid . ';' . $positive . ';' . $diaspora_handle; + // Diaspora has changed the way they are signing the likes. + // Just to make sure that we don't miss any likes we will check the old and the current way. + $old_signed_data = $guid . ';' . $target_type . ';' . $parent_guid . ';' . $positive . ';' . $diaspora_handle; + + $signed_data = $positive . ';' . $guid . ';' . $target_type . ';' . $parent_guid . ';' . $diaspora_handle; + $key = $msg['key']; - if($parent_author_signature) { + if ($parent_author_signature) { // If a parent_author_signature exists, then we've received the like // relayed from the top-level post owner. There's no need to check the // author_signature if the parent_author_signature is valid $parent_author_signature = base64_decode($parent_author_signature); - if(! rsa_verify($signed_data,$parent_author_signature,$key,'sha256')) { - if (intval(get_config('system','ignore_diaspora_like_signature'))) - logger('diaspora_like: top-level owner verification failed. Proceeding anyway.'); - else { - logger('diaspora_like: top-level owner verification failed.'); - return; - } + if (!rsa_verify($signed_data,$parent_author_signature,$key,'sha256') AND + !rsa_verify($old_signed_data,$parent_author_signature,$key,'sha256')) { + + logger('diaspora_like: top-level owner verification failed.'); + return; } - } - else { + } else { // If there's no parent_author_signature, then we've received the like // from the like creator. In that case, the person is "like"ing // our post, so he/she must be a contact of ours and his/her public key @@ -1977,13 +1990,11 @@ function diaspora_like($importer,$xml,$msg) { $author_signature = base64_decode($author_signature); - if(! rsa_verify($signed_data,$author_signature,$key,'sha256')) { - if (intval(get_config('system','ignore_diaspora_like_signature'))) - logger('diaspora_like: like creator verification failed. Proceeding anyway'); - else { - logger('diaspora_like: like creator verification failed.'); - return; - } + if (!rsa_verify($signed_data,$author_signature,$key,'sha256') AND + !rsa_verify($old_signed_data,$author_signature,$key,'sha256')) { + + logger('diaspora_like: like creator verification failed.'); + return; } } @@ -2510,6 +2521,26 @@ function diaspora_is_reshare($body) { if ($body == $attributes) return(false); + $guid = ""; + preg_match("/guid='(.*?)'/ism", $attributes, $matches); + if ($matches[1] != "") + $guid = $matches[1]; + + preg_match('/guid="(.*?)"/ism', $attributes, $matches); + if ($matches[1] != "") + $guid = $matches[1]; + + if ($guid != "") { + $r = q("SELECT `contact-id` FROM `item` WHERE `guid` = '%s' AND `network` IN ('%s', '%s') LIMIT 1", + dbesc($guid), NETWORK_DFRN, NETWORK_DIASPORA); + if ($r) { + $ret= array(); + $ret["root_handle"] = diaspora_handle_from_contact($r[0]["contact-id"]); + $ret["root_guid"] = $guid; + return($ret); + } + } + $profile = ""; preg_match("/profile='(.*?)'/ism", $attributes, $matches); if ($matches[1] != "") diff --git a/include/gprobe.php b/include/gprobe.php index 52c5483c8..03cdbd072 100644 --- a/include/gprobe.php +++ b/include/gprobe.php @@ -41,7 +41,23 @@ function gprobe_run(&$argv, &$argc){ if(! count($r)) { + // Is it a DDoS attempt? + $urlparts = parse_url($url); + + $result = Cache::get("gprobe:".$urlparts["host"]); + if (!is_null($result)) { + $result = unserialize($result); + if ($result["network"] == NETWORK_FEED) { + logger("DDoS attempt detected for ".$urlparts["host"]." by ".$_SERVER["REMOTE_ADDR"].". server data: ".print_r($_SERVER, true), LOGGER_DEBUG); + return; + } + } + $arr = probe_url($url); + + if (is_null($result)) + Cache::set("gprobe:".$urlparts["host"],serialize($arr)); + if(count($arr) && x($arr,'network') && $arr['network'] === NETWORK_DFRN) { q("insert into `gcontact` (`name`,`url`,`nurl`,`photo`) values ( '%s', '%s', '%s', '%s') ", diff --git a/include/items.php b/include/items.php index 95ff40714..3832b80b3 100644 --- a/include/items.php +++ b/include/items.php @@ -12,6 +12,7 @@ require_once('include/email.php'); require_once('include/ostatus_conversation.php'); require_once('include/threads.php'); require_once('include/socgraph.php'); +require_once('mod/share.php'); function get_feed_for(&$a, $dfrn_id, $owner_nick, $last_update, $direction = 0) { @@ -838,10 +839,7 @@ function get_atom_elements($feed, $item, $contact = array()) { logger('get_atom_elements: fixing sender of repeated message.'); if (!intval(get_config('system','wall-to-wall_share'))) { - $prefix = "[share author='".str_replace("'", "'",$name). - "' profile='".$uri. - "' avatar='".$avatar. - "' link='".$orig_uri."']"; + $prefix = share_header($name, $uri, $avatar, "", "", $orig_uri); $res["body"] = $prefix.html2bbcode($message)."[/share]"; } else { @@ -1183,9 +1181,9 @@ function item_store($arr,$force_parent = false, $notify = false, $dontcache = fa $arr['owner-avatar'] = ((x($arr,'owner-avatar')) ? notags(trim($arr['owner-avatar'])) : ''); $arr['created'] = ((x($arr,'created') !== false) ? datetime_convert('UTC','UTC',$arr['created']) : datetime_convert()); $arr['edited'] = ((x($arr,'edited') !== false) ? datetime_convert('UTC','UTC',$arr['edited']) : datetime_convert()); - $arr['commented'] = datetime_convert(); - $arr['received'] = datetime_convert(); - $arr['changed'] = datetime_convert(); + $arr['commented'] = ((x($arr,'commented') !== false) ? datetime_convert('UTC','UTC',$arr['commented']) : datetime_convert()); + $arr['received'] = ((x($arr,'received') !== false) ? datetime_convert('UTC','UTC',$arr['received']) : datetime_convert()); + $arr['changed'] = ((x($arr,'changed') !== false) ? datetime_convert('UTC','UTC',$arr['changed']) : datetime_convert()); $arr['title'] = ((x($arr,'title')) ? notags(trim($arr['title'])) : ''); $arr['location'] = ((x($arr,'location')) ? notags(trim($arr['location'])) : ''); $arr['coord'] = ((x($arr,'coord')) ? notags(trim($arr['coord'])) : ''); @@ -1561,8 +1559,10 @@ function item_store($arr,$force_parent = false, $notify = false, $dontcache = fa )); logger('item_store: Notification sent for contact '.$arr['contact-id'].' and post '.$current_post, LOGGER_DEBUG); } - } else + } else { update_thread($parent_id); + add_shadow_entry($arr); + } if ($notify) proc_run('php', "include/notifier.php", $notify_type, $current_post); diff --git a/include/tags.php b/include/tags.php index fc1b57db4..a8bcae86d 100644 --- a/include/tags.php +++ b/include/tags.php @@ -37,6 +37,9 @@ function create_tags_from_item($itemid) { $data = " ".$message["title"]." ".$message["body"]." ".$tags." "; + // ignore anything in a code block + $data = preg_replace('/\[code\](.*?)\[\/code\]/sm','',$data); + $tags = array(); $pattern = "/\W\#([^\[].*?)[\s'\".,:;\?!\[\]\/]/ism"; diff --git a/include/text.php b/include/text.php index 4aa529d31..8ce54b3c6 100644 --- a/include/text.php +++ b/include/text.php @@ -270,7 +270,7 @@ if(! function_exists('paginate_data')) { * @return Array data for pagination template */ function paginate_data(&$a, $count=null) { - $stripped = preg_replace('/(&page=[0-9]*)/','',$a->query_string); + $stripped = preg_replace('/([&?]page=[0-9]*)/','',$a->query_string); $stripped = str_replace('q=','',$stripped); $stripped = trim($stripped,'/'); diff --git a/include/threads.php b/include/threads.php index cefba2d6c..d88307ecf 100644 --- a/include/threads.php +++ b/include/threads.php @@ -74,6 +74,35 @@ function add_thread($itemid, $onlyshadow = false) { } } +function add_shadow_entry($item) { + + // Is this a shadow entry? + if ($item['uid'] == 0) + return; + + // Is there a shadow parent? + $r = q("SELECT `id` FROM `item` WHERE `uri` = '%s' AND `uid` = 0 LIMIT 1", dbesc($item['parent-uri'])); + if (!count($r)) + return; + + // Is there already a shadow entry? + $r = q("SELECT `id` FROM `item` WHERE `uri` = '%s' AND `uid` = 0 LIMIT 1", dbesc($item['uri'])); + + if (count($r)) + return; + + // Preparing public shadow (removing user specific data) + require_once("include/items.php"); + require_once("include/Contact.php"); + + unset($item['id']); + $item['uid'] = 0; + $item['contact-id'] = get_contact($item['author-link'], 0); + $public_shadow = item_store($item, false, false, true); + + logger("Stored public shadow for comment ".$item['uri']." under id ".$public_shadow, LOGGER_DEBUG); +} + function update_thread_uri($itemuri, $uid) { $messages = q("SELECT `id` FROM `item` WHERE uri ='%s' AND uid=%d", dbesc($itemuri), intval($uid)); diff --git a/index.php b/index.php index 949ccd532..31af8868d 100644 --- a/index.php +++ b/index.php @@ -129,7 +129,6 @@ if((x($_GET,'zrl')) && (!$install && !$maintenance)) { * * What we really need to do is output the raw headers ourselves so we can keep them separate. * - */ // header('Link: <' . $a->get_baseurl() . '/amcd>; rel="acct-mgmt";'); diff --git a/js/jquery.js b/js/jquery.js index ab28a2472..e6a051d0d 100644 --- a/js/jquery.js +++ b/js/jquery.js @@ -1,4 +1,4 @@ -/*! jQuery v1.11.1 | (c) 2005, 2014 jQuery Foundation, Inc. | jquery.org/license */ -!function(a,b){"object"==typeof module&&"object"==typeof module.exports?module.exports=a.document?b(a,!0):function(a){if(!a.document)throw new Error("jQuery requires a window with a document");return b(a)}:b(a)}("undefined"!=typeof window?window:this,function(a,b){var c=[],d=c.slice,e=c.concat,f=c.push,g=c.indexOf,h={},i=h.toString,j=h.hasOwnProperty,k={},l="1.11.1",m=function(a,b){return new m.fn.init(a,b)},n=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,o=/^-ms-/,p=/-([\da-z])/gi,q=function(a,b){return b.toUpperCase()};m.fn=m.prototype={jquery:l,constructor:m,selector:"",length:0,toArray:function(){return d.call(this)},get:function(a){return null!=a?0>a?this[a+this.length]:this[a]:d.call(this)},pushStack:function(a){var b=m.merge(this.constructor(),a);return b.prevObject=this,b.context=this.context,b},each:function(a,b){return m.each(this,a,b)},map:function(a){return this.pushStack(m.map(this,function(b,c){return a.call(b,c,b)}))},slice:function(){return this.pushStack(d.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(a){var b=this.length,c=+a+(0>a?b:0);return this.pushStack(c>=0&&b>c?[this[c]]:[])},end:function(){return this.prevObject||this.constructor(null)},push:f,sort:c.sort,splice:c.splice},m.extend=m.fn.extend=function(){var a,b,c,d,e,f,g=arguments[0]||{},h=1,i=arguments.length,j=!1;for("boolean"==typeof g&&(j=g,g=arguments[h]||{},h++),"object"==typeof g||m.isFunction(g)||(g={}),h===i&&(g=this,h--);i>h;h++)if(null!=(e=arguments[h]))for(d in e)a=g[d],c=e[d],g!==c&&(j&&c&&(m.isPlainObject(c)||(b=m.isArray(c)))?(b?(b=!1,f=a&&m.isArray(a)?a:[]):f=a&&m.isPlainObject(a)?a:{},g[d]=m.extend(j,f,c)):void 0!==c&&(g[d]=c));return g},m.extend({expando:"jQuery"+(l+Math.random()).replace(/\D/g,""),isReady:!0,error:function(a){throw new Error(a)},noop:function(){},isFunction:function(a){return"function"===m.type(a)},isArray:Array.isArray||function(a){return"array"===m.type(a)},isWindow:function(a){return null!=a&&a==a.window},isNumeric:function(a){return!m.isArray(a)&&a-parseFloat(a)>=0},isEmptyObject:function(a){var b;for(b in a)return!1;return!0},isPlainObject:function(a){var b;if(!a||"object"!==m.type(a)||a.nodeType||m.isWindow(a))return!1;try{if(a.constructor&&!j.call(a,"constructor")&&!j.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(c){return!1}if(k.ownLast)for(b in a)return j.call(a,b);for(b in a);return void 0===b||j.call(a,b)},type:function(a){return null==a?a+"":"object"==typeof a||"function"==typeof a?h[i.call(a)]||"object":typeof a},globalEval:function(b){b&&m.trim(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(o,"ms-").replace(p,q)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toLowerCase()===b.toLowerCase()},each:function(a,b,c){var d,e=0,f=a.length,g=r(a);if(c){if(g){for(;f>e;e++)if(d=b.apply(a[e],c),d===!1)break}else for(e in a)if(d=b.apply(a[e],c),d===!1)break}else if(g){for(;f>e;e++)if(d=b.call(a[e],e,a[e]),d===!1)break}else for(e in a)if(d=b.call(a[e],e,a[e]),d===!1)break;return a},trim:function(a){return null==a?"":(a+"").replace(n,"")},makeArray:function(a,b){var c=b||[];return null!=a&&(r(Object(a))?m.merge(c,"string"==typeof a?[a]:a):f.call(c,a)),c},inArray:function(a,b,c){var d;if(b){if(g)return g.call(b,a,c);for(d=b.length,c=c?0>c?Math.max(0,d+c):c:0;d>c;c++)if(c in b&&b[c]===a)return c}return-1},merge:function(a,b){var c=+b.length,d=0,e=a.length;while(c>d)a[e++]=b[d++];if(c!==c)while(void 0!==b[d])a[e++]=b[d++];return a.length=e,a},grep:function(a,b,c){for(var d,e=[],f=0,g=a.length,h=!c;g>f;f++)d=!b(a[f],f),d!==h&&e.push(a[f]);return e},map:function(a,b,c){var d,f=0,g=a.length,h=r(a),i=[];if(h)for(;g>f;f++)d=b(a[f],f,c),null!=d&&i.push(d);else for(f in a)d=b(a[f],f,c),null!=d&&i.push(d);return e.apply([],i)},guid:1,proxy:function(a,b){var c,e,f;return"string"==typeof b&&(f=a[b],b=a,a=f),m.isFunction(a)?(c=d.call(arguments,2),e=function(){return a.apply(b||this,c.concat(d.call(arguments)))},e.guid=a.guid=a.guid||m.guid++,e):void 0},now:function(){return+new Date},support:k}),m.each("Boolean Number String Function Array Date RegExp Object Error".split(" "),function(a,b){h["[object "+b+"]"]=b.toLowerCase()});function r(a){var b=a.length,c=m.type(a);return"function"===c||m.isWindow(a)?!1:1===a.nodeType&&b?!0:"array"===c||0===b||"number"==typeof b&&b>0&&b-1 in a}var s=function(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u="sizzle"+-new Date,v=a.document,w=0,x=0,y=gb(),z=gb(),A=gb(),B=function(a,b){return a===b&&(l=!0),0},C="undefined",D=1<<31,E={}.hasOwnProperty,F=[],G=F.pop,H=F.push,I=F.push,J=F.slice,K=F.indexOf||function(a){for(var b=0,c=this.length;c>b;b++)if(this[b]===a)return b;return-1},L="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",M="[\\x20\\t\\r\\n\\f]",N="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",O=N.replace("w","w#"),P="\\["+M+"*("+N+")(?:"+M+"*([*^$|!~]?=)"+M+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+O+"))|)"+M+"*\\]",Q=":("+N+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+P+")*)|.*)\\)|)",R=new RegExp("^"+M+"+|((?:^|[^\\\\])(?:\\\\.)*)"+M+"+$","g"),S=new RegExp("^"+M+"*,"+M+"*"),T=new RegExp("^"+M+"*([>+~]|"+M+")"+M+"*"),U=new RegExp("="+M+"*([^\\]'\"]*?)"+M+"*\\]","g"),V=new RegExp(Q),W=new RegExp("^"+O+"$"),X={ID:new RegExp("^#("+N+")"),CLASS:new RegExp("^\\.("+N+")"),TAG:new RegExp("^("+N.replace("w","w*")+")"),ATTR:new RegExp("^"+P),PSEUDO:new RegExp("^"+Q),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+L+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},Y=/^(?:input|select|textarea|button)$/i,Z=/^h\d$/i,$=/^[^{]+\{\s*\[native \w/,_=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ab=/[+~]/,bb=/'|\\/g,cb=new RegExp("\\\\([\\da-f]{1,6}"+M+"?|("+M+")|.)","ig"),db=function(a,b,c){var d="0x"+b-65536;return d!==d||c?b:0>d?String.fromCharCode(d+65536):String.fromCharCode(d>>10|55296,1023&d|56320)};try{I.apply(F=J.call(v.childNodes),v.childNodes),F[v.childNodes.length].nodeType}catch(eb){I={apply:F.length?function(a,b){H.apply(a,J.call(b))}:function(a,b){var c=a.length,d=0;while(a[c++]=b[d++]);a.length=c-1}}}function fb(a,b,d,e){var f,h,j,k,l,o,r,s,w,x;if((b?b.ownerDocument||b:v)!==n&&m(b),b=b||n,d=d||[],!a||"string"!=typeof a)return d;if(1!==(k=b.nodeType)&&9!==k)return[];if(p&&!e){if(f=_.exec(a))if(j=f[1]){if(9===k){if(h=b.getElementById(j),!h||!h.parentNode)return d;if(h.id===j)return d.push(h),d}else if(b.ownerDocument&&(h=b.ownerDocument.getElementById(j))&&t(b,h)&&h.id===j)return d.push(h),d}else{if(f[2])return I.apply(d,b.getElementsByTagName(a)),d;if((j=f[3])&&c.getElementsByClassName&&b.getElementsByClassName)return I.apply(d,b.getElementsByClassName(j)),d}if(c.qsa&&(!q||!q.test(a))){if(s=r=u,w=b,x=9===k&&a,1===k&&"object"!==b.nodeName.toLowerCase()){o=g(a),(r=b.getAttribute("id"))?s=r.replace(bb,"\\$&"):b.setAttribute("id",s),s="[id='"+s+"'] ",l=o.length;while(l--)o[l]=s+qb(o[l]);w=ab.test(a)&&ob(b.parentNode)||b,x=o.join(",")}if(x)try{return I.apply(d,w.querySelectorAll(x)),d}catch(y){}finally{r||b.removeAttribute("id")}}}return i(a.replace(R,"$1"),b,d,e)}function gb(){var a=[];function b(c,e){return a.push(c+" ")>d.cacheLength&&delete b[a.shift()],b[c+" "]=e}return b}function hb(a){return a[u]=!0,a}function ib(a){var b=n.createElement("div");try{return!!a(b)}catch(c){return!1}finally{b.parentNode&&b.parentNode.removeChild(b),b=null}}function jb(a,b){var c=a.split("|"),e=a.length;while(e--)d.attrHandle[c[e]]=b}function kb(a,b){var c=b&&a,d=c&&1===a.nodeType&&1===b.nodeType&&(~b.sourceIndex||D)-(~a.sourceIndex||D);if(d)return d;if(c)while(c=c.nextSibling)if(c===b)return-1;return a?1:-1}function lb(a){return function(b){var c=b.nodeName.toLowerCase();return"input"===c&&b.type===a}}function mb(a){return function(b){var c=b.nodeName.toLowerCase();return("input"===c||"button"===c)&&b.type===a}}function nb(a){return hb(function(b){return b=+b,hb(function(c,d){var e,f=a([],c.length,b),g=f.length;while(g--)c[e=f[g]]&&(c[e]=!(d[e]=c[e]))})})}function ob(a){return a&&typeof a.getElementsByTagName!==C&&a}c=fb.support={},f=fb.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return b?"HTML"!==b.nodeName:!1},m=fb.setDocument=function(a){var b,e=a?a.ownerDocument||a:v,g=e.defaultView;return e!==n&&9===e.nodeType&&e.documentElement?(n=e,o=e.documentElement,p=!f(e),g&&g!==g.top&&(g.addEventListener?g.addEventListener("unload",function(){m()},!1):g.attachEvent&&g.attachEvent("onunload",function(){m()})),c.attributes=ib(function(a){return a.className="i",!a.getAttribute("className")}),c.getElementsByTagName=ib(function(a){return a.appendChild(e.createComment("")),!a.getElementsByTagName("*").length}),c.getElementsByClassName=$.test(e.getElementsByClassName)&&ib(function(a){return a.innerHTML="
",a.firstChild.className="i",2===a.getElementsByClassName("i").length}),c.getById=ib(function(a){return o.appendChild(a).id=u,!e.getElementsByName||!e.getElementsByName(u).length}),c.getById?(d.find.ID=function(a,b){if(typeof b.getElementById!==C&&p){var c=b.getElementById(a);return c&&c.parentNode?[c]:[]}},d.filter.ID=function(a){var b=a.replace(cb,db);return function(a){return a.getAttribute("id")===b}}):(delete d.find.ID,d.filter.ID=function(a){var b=a.replace(cb,db);return function(a){var c=typeof a.getAttributeNode!==C&&a.getAttributeNode("id");return c&&c.value===b}}),d.find.TAG=c.getElementsByTagName?function(a,b){return typeof b.getElementsByTagName!==C?b.getElementsByTagName(a):void 0}:function(a,b){var c,d=[],e=0,f=b.getElementsByTagName(a);if("*"===a){while(c=f[e++])1===c.nodeType&&d.push(c);return d}return f},d.find.CLASS=c.getElementsByClassName&&function(a,b){return typeof b.getElementsByClassName!==C&&p?b.getElementsByClassName(a):void 0},r=[],q=[],(c.qsa=$.test(e.querySelectorAll))&&(ib(function(a){a.innerHTML="",a.querySelectorAll("[msallowclip^='']").length&&q.push("[*^$]="+M+"*(?:''|\"\")"),a.querySelectorAll("[selected]").length||q.push("\\["+M+"*(?:value|"+L+")"),a.querySelectorAll(":checked").length||q.push(":checked")}),ib(function(a){var b=e.createElement("input");b.setAttribute("type","hidden"),a.appendChild(b).setAttribute("name","D"),a.querySelectorAll("[name=d]").length&&q.push("name"+M+"*[*^$|!~]?="),a.querySelectorAll(":enabled").length||q.push(":enabled",":disabled"),a.querySelectorAll("*,:x"),q.push(",.*:")})),(c.matchesSelector=$.test(s=o.matches||o.webkitMatchesSelector||o.mozMatchesSelector||o.oMatchesSelector||o.msMatchesSelector))&&ib(function(a){c.disconnectedMatch=s.call(a,"div"),s.call(a,"[s!='']:x"),r.push("!=",Q)}),q=q.length&&new RegExp(q.join("|")),r=r.length&&new RegExp(r.join("|")),b=$.test(o.compareDocumentPosition),t=b||$.test(o.contains)?function(a,b){var c=9===a.nodeType?a.documentElement:a,d=b&&b.parentNode;return a===d||!(!d||1!==d.nodeType||!(c.contains?c.contains(d):a.compareDocumentPosition&&16&a.compareDocumentPosition(d)))}:function(a,b){if(b)while(b=b.parentNode)if(b===a)return!0;return!1},B=b?function(a,b){if(a===b)return l=!0,0;var d=!a.compareDocumentPosition-!b.compareDocumentPosition;return d?d:(d=(a.ownerDocument||a)===(b.ownerDocument||b)?a.compareDocumentPosition(b):1,1&d||!c.sortDetached&&b.compareDocumentPosition(a)===d?a===e||a.ownerDocument===v&&t(v,a)?-1:b===e||b.ownerDocument===v&&t(v,b)?1:k?K.call(k,a)-K.call(k,b):0:4&d?-1:1)}:function(a,b){if(a===b)return l=!0,0;var c,d=0,f=a.parentNode,g=b.parentNode,h=[a],i=[b];if(!f||!g)return a===e?-1:b===e?1:f?-1:g?1:k?K.call(k,a)-K.call(k,b):0;if(f===g)return kb(a,b);c=a;while(c=c.parentNode)h.unshift(c);c=b;while(c=c.parentNode)i.unshift(c);while(h[d]===i[d])d++;return d?kb(h[d],i[d]):h[d]===v?-1:i[d]===v?1:0},e):n},fb.matches=function(a,b){return fb(a,null,null,b)},fb.matchesSelector=function(a,b){if((a.ownerDocument||a)!==n&&m(a),b=b.replace(U,"='$1']"),!(!c.matchesSelector||!p||r&&r.test(b)||q&&q.test(b)))try{var d=s.call(a,b);if(d||c.disconnectedMatch||a.document&&11!==a.document.nodeType)return d}catch(e){}return fb(b,n,null,[a]).length>0},fb.contains=function(a,b){return(a.ownerDocument||a)!==n&&m(a),t(a,b)},fb.attr=function(a,b){(a.ownerDocument||a)!==n&&m(a);var e=d.attrHandle[b.toLowerCase()],f=e&&E.call(d.attrHandle,b.toLowerCase())?e(a,b,!p):void 0;return void 0!==f?f:c.attributes||!p?a.getAttribute(b):(f=a.getAttributeNode(b))&&f.specified?f.value:null},fb.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)},fb.uniqueSort=function(a){var b,d=[],e=0,f=0;if(l=!c.detectDuplicates,k=!c.sortStable&&a.slice(0),a.sort(B),l){while(b=a[f++])b===a[f]&&(e=d.push(f));while(e--)a.splice(d[e],1)}return k=null,a},e=fb.getText=function(a){var b,c="",d=0,f=a.nodeType;if(f){if(1===f||9===f||11===f){if("string"==typeof a.textContent)return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)c+=e(a)}else if(3===f||4===f)return a.nodeValue}else while(b=a[d++])c+=e(b);return c},d=fb.selectors={cacheLength:50,createPseudo:hb,match:X,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(a){return a[1]=a[1].replace(cb,db),a[3]=(a[3]||a[4]||a[5]||"").replace(cb,db),"~="===a[2]&&(a[3]=" "+a[3]+" "),a.slice(0,4)},CHILD:function(a){return a[1]=a[1].toLowerCase(),"nth"===a[1].slice(0,3)?(a[3]||fb.error(a[0]),a[4]=+(a[4]?a[5]+(a[6]||1):2*("even"===a[3]||"odd"===a[3])),a[5]=+(a[7]+a[8]||"odd"===a[3])):a[3]&&fb.error(a[0]),a},PSEUDO:function(a){var b,c=!a[6]&&a[2];return X.CHILD.test(a[0])?null:(a[3]?a[2]=a[4]||a[5]||"":c&&V.test(c)&&(b=g(c,!0))&&(b=c.indexOf(")",c.length-b)-c.length)&&(a[0]=a[0].slice(0,b),a[2]=c.slice(0,b)),a.slice(0,3))}},filter:{TAG:function(a){var b=a.replace(cb,db).toLowerCase();return"*"===a?function(){return!0}:function(a){return a.nodeName&&a.nodeName.toLowerCase()===b}},CLASS:function(a){var b=y[a+" "];return b||(b=new RegExp("(^|"+M+")"+a+"("+M+"|$)"))&&y(a,function(a){return b.test("string"==typeof a.className&&a.className||typeof a.getAttribute!==C&&a.getAttribute("class")||"")})},ATTR:function(a,b,c){return function(d){var e=fb.attr(d,a);return null==e?"!="===b:b?(e+="","="===b?e===c:"!="===b?e!==c:"^="===b?c&&0===e.indexOf(c):"*="===b?c&&e.indexOf(c)>-1:"$="===b?c&&e.slice(-c.length)===c:"~="===b?(" "+e+" ").indexOf(c)>-1:"|="===b?e===c||e.slice(0,c.length+1)===c+"-":!1):!0}},CHILD:function(a,b,c,d,e){var f="nth"!==a.slice(0,3),g="last"!==a.slice(-4),h="of-type"===b;return 1===d&&0===e?function(a){return!!a.parentNode}:function(b,c,i){var j,k,l,m,n,o,p=f!==g?"nextSibling":"previousSibling",q=b.parentNode,r=h&&b.nodeName.toLowerCase(),s=!i&&!h;if(q){if(f){while(p){l=b;while(l=l[p])if(h?l.nodeName.toLowerCase()===r:1===l.nodeType)return!1;o=p="only"===a&&!o&&"nextSibling"}return!0}if(o=[g?q.firstChild:q.lastChild],g&&s){k=q[u]||(q[u]={}),j=k[a]||[],n=j[0]===w&&j[1],m=j[0]===w&&j[2],l=n&&q.childNodes[n];while(l=++n&&l&&l[p]||(m=n=0)||o.pop())if(1===l.nodeType&&++m&&l===b){k[a]=[w,n,m];break}}else if(s&&(j=(b[u]||(b[u]={}))[a])&&j[0]===w)m=j[1];else while(l=++n&&l&&l[p]||(m=n=0)||o.pop())if((h?l.nodeName.toLowerCase()===r:1===l.nodeType)&&++m&&(s&&((l[u]||(l[u]={}))[a]=[w,m]),l===b))break;return m-=e,m===d||m%d===0&&m/d>=0}}},PSEUDO:function(a,b){var c,e=d.pseudos[a]||d.setFilters[a.toLowerCase()]||fb.error("unsupported pseudo: "+a);return e[u]?e(b):e.length>1?(c=[a,a,"",b],d.setFilters.hasOwnProperty(a.toLowerCase())?hb(function(a,c){var d,f=e(a,b),g=f.length;while(g--)d=K.call(a,f[g]),a[d]=!(c[d]=f[g])}):function(a){return e(a,0,c)}):e}},pseudos:{not:hb(function(a){var b=[],c=[],d=h(a.replace(R,"$1"));return d[u]?hb(function(a,b,c,e){var f,g=d(a,null,e,[]),h=a.length;while(h--)(f=g[h])&&(a[h]=!(b[h]=f))}):function(a,e,f){return b[0]=a,d(b,null,f,c),!c.pop()}}),has:hb(function(a){return function(b){return fb(a,b).length>0}}),contains:hb(function(a){return function(b){return(b.textContent||b.innerText||e(b)).indexOf(a)>-1}}),lang:hb(function(a){return W.test(a||"")||fb.error("unsupported lang: "+a),a=a.replace(cb,db).toLowerCase(),function(b){var c;do if(c=p?b.lang:b.getAttribute("xml:lang")||b.getAttribute("lang"))return c=c.toLowerCase(),c===a||0===c.indexOf(a+"-");while((b=b.parentNode)&&1===b.nodeType);return!1}}),target:function(b){var c=a.location&&a.location.hash;return c&&c.slice(1)===b.id},root:function(a){return a===o},focus:function(a){return a===n.activeElement&&(!n.hasFocus||n.hasFocus())&&!!(a.type||a.href||~a.tabIndex)},enabled:function(a){return a.disabled===!1},disabled:function(a){return a.disabled===!0},checked:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&!!a.checked||"option"===b&&!!a.selected},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0},empty:function(a){for(a=a.firstChild;a;a=a.nextSibling)if(a.nodeType<6)return!1;return!0},parent:function(a){return!d.pseudos.empty(a)},header:function(a){return Z.test(a.nodeName)},input:function(a){return Y.test(a.nodeName)},button:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&"button"===a.type||"button"===b},text:function(a){var b;return"input"===a.nodeName.toLowerCase()&&"text"===a.type&&(null==(b=a.getAttribute("type"))||"text"===b.toLowerCase())},first:nb(function(){return[0]}),last:nb(function(a,b){return[b-1]}),eq:nb(function(a,b,c){return[0>c?c+b:c]}),even:nb(function(a,b){for(var c=0;b>c;c+=2)a.push(c);return a}),odd:nb(function(a,b){for(var c=1;b>c;c+=2)a.push(c);return a}),lt:nb(function(a,b,c){for(var d=0>c?c+b:c;--d>=0;)a.push(d);return a}),gt:nb(function(a,b,c){for(var d=0>c?c+b:c;++db;b++)d+=a[b].value;return d}function rb(a,b,c){var d=b.dir,e=c&&"parentNode"===d,f=x++;return b.first?function(b,c,f){while(b=b[d])if(1===b.nodeType||e)return a(b,c,f)}:function(b,c,g){var h,i,j=[w,f];if(g){while(b=b[d])if((1===b.nodeType||e)&&a(b,c,g))return!0}else while(b=b[d])if(1===b.nodeType||e){if(i=b[u]||(b[u]={}),(h=i[d])&&h[0]===w&&h[1]===f)return j[2]=h[2];if(i[d]=j,j[2]=a(b,c,g))return!0}}}function sb(a){return a.length>1?function(b,c,d){var e=a.length;while(e--)if(!a[e](b,c,d))return!1;return!0}:a[0]}function tb(a,b,c){for(var d=0,e=b.length;e>d;d++)fb(a,b[d],c);return c}function ub(a,b,c,d,e){for(var f,g=[],h=0,i=a.length,j=null!=b;i>h;h++)(f=a[h])&&(!c||c(f,d,e))&&(g.push(f),j&&b.push(h));return g}function vb(a,b,c,d,e,f){return d&&!d[u]&&(d=vb(d)),e&&!e[u]&&(e=vb(e,f)),hb(function(f,g,h,i){var j,k,l,m=[],n=[],o=g.length,p=f||tb(b||"*",h.nodeType?[h]:h,[]),q=!a||!f&&b?p:ub(p,m,a,h,i),r=c?e||(f?a:o||d)?[]:g:q;if(c&&c(q,r,h,i),d){j=ub(r,n),d(j,[],h,i),k=j.length;while(k--)(l=j[k])&&(r[n[k]]=!(q[n[k]]=l))}if(f){if(e||a){if(e){j=[],k=r.length;while(k--)(l=r[k])&&j.push(q[k]=l);e(null,r=[],j,i)}k=r.length;while(k--)(l=r[k])&&(j=e?K.call(f,l):m[k])>-1&&(f[j]=!(g[j]=l))}}else r=ub(r===g?r.splice(o,r.length):r),e?e(null,g,r,i):I.apply(g,r)})}function wb(a){for(var b,c,e,f=a.length,g=d.relative[a[0].type],h=g||d.relative[" "],i=g?1:0,k=rb(function(a){return a===b},h,!0),l=rb(function(a){return K.call(b,a)>-1},h,!0),m=[function(a,c,d){return!g&&(d||c!==j)||((b=c).nodeType?k(a,c,d):l(a,c,d))}];f>i;i++)if(c=d.relative[a[i].type])m=[rb(sb(m),c)];else{if(c=d.filter[a[i].type].apply(null,a[i].matches),c[u]){for(e=++i;f>e;e++)if(d.relative[a[e].type])break;return vb(i>1&&sb(m),i>1&&qb(a.slice(0,i-1).concat({value:" "===a[i-2].type?"*":""})).replace(R,"$1"),c,e>i&&wb(a.slice(i,e)),f>e&&wb(a=a.slice(e)),f>e&&qb(a))}m.push(c)}return sb(m)}function xb(a,b){var c=b.length>0,e=a.length>0,f=function(f,g,h,i,k){var l,m,o,p=0,q="0",r=f&&[],s=[],t=j,u=f||e&&d.find.TAG("*",k),v=w+=null==t?1:Math.random()||.1,x=u.length;for(k&&(j=g!==n&&g);q!==x&&null!=(l=u[q]);q++){if(e&&l){m=0;while(o=a[m++])if(o(l,g,h)){i.push(l);break}k&&(w=v)}c&&((l=!o&&l)&&p--,f&&r.push(l))}if(p+=q,c&&q!==p){m=0;while(o=b[m++])o(r,s,g,h);if(f){if(p>0)while(q--)r[q]||s[q]||(s[q]=G.call(i));s=ub(s)}I.apply(i,s),k&&!f&&s.length>0&&p+b.length>1&&fb.uniqueSort(i)}return k&&(w=v,j=t),r};return c?hb(f):f}return h=fb.compile=function(a,b){var c,d=[],e=[],f=A[a+" "];if(!f){b||(b=g(a)),c=b.length;while(c--)f=wb(b[c]),f[u]?d.push(f):e.push(f);f=A(a,xb(e,d)),f.selector=a}return f},i=fb.select=function(a,b,e,f){var i,j,k,l,m,n="function"==typeof a&&a,o=!f&&g(a=n.selector||a);if(e=e||[],1===o.length){if(j=o[0]=o[0].slice(0),j.length>2&&"ID"===(k=j[0]).type&&c.getById&&9===b.nodeType&&p&&d.relative[j[1].type]){if(b=(d.find.ID(k.matches[0].replace(cb,db),b)||[])[0],!b)return e;n&&(b=b.parentNode),a=a.slice(j.shift().value.length)}i=X.needsContext.test(a)?0:j.length;while(i--){if(k=j[i],d.relative[l=k.type])break;if((m=d.find[l])&&(f=m(k.matches[0].replace(cb,db),ab.test(j[0].type)&&ob(b.parentNode)||b))){if(j.splice(i,1),a=f.length&&qb(j),!a)return I.apply(e,f),e;break}}}return(n||h(a,o))(f,b,!p,e,ab.test(a)&&ob(b.parentNode)||b),e},c.sortStable=u.split("").sort(B).join("")===u,c.detectDuplicates=!!l,m(),c.sortDetached=ib(function(a){return 1&a.compareDocumentPosition(n.createElement("div"))}),ib(function(a){return a.innerHTML="","#"===a.firstChild.getAttribute("href")})||jb("type|href|height|width",function(a,b,c){return c?void 0:a.getAttribute(b,"type"===b.toLowerCase()?1:2)}),c.attributes&&ib(function(a){return a.innerHTML="",a.firstChild.setAttribute("value",""),""===a.firstChild.getAttribute("value")})||jb("value",function(a,b,c){return c||"input"!==a.nodeName.toLowerCase()?void 0:a.defaultValue}),ib(function(a){return null==a.getAttribute("disabled")})||jb(L,function(a,b,c){var d;return c?void 0:a[b]===!0?b.toLowerCase():(d=a.getAttributeNode(b))&&d.specified?d.value:null}),fb}(a);m.find=s,m.expr=s.selectors,m.expr[":"]=m.expr.pseudos,m.unique=s.uniqueSort,m.text=s.getText,m.isXMLDoc=s.isXML,m.contains=s.contains;var t=m.expr.match.needsContext,u=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,v=/^.[^:#\[\.,]*$/;function w(a,b,c){if(m.isFunction(b))return m.grep(a,function(a,d){return!!b.call(a,d,a)!==c});if(b.nodeType)return m.grep(a,function(a){return a===b!==c});if("string"==typeof b){if(v.test(b))return m.filter(b,a,c);b=m.filter(b,a)}return m.grep(a,function(a){return m.inArray(a,b)>=0!==c})}m.filter=function(a,b,c){var d=b[0];return c&&(a=":not("+a+")"),1===b.length&&1===d.nodeType?m.find.matchesSelector(d,a)?[d]:[]:m.find.matches(a,m.grep(b,function(a){return 1===a.nodeType}))},m.fn.extend({find:function(a){var b,c=[],d=this,e=d.length;if("string"!=typeof a)return this.pushStack(m(a).filter(function(){for(b=0;e>b;b++)if(m.contains(d[b],this))return!0}));for(b=0;e>b;b++)m.find(a,d[b],c);return c=this.pushStack(e>1?m.unique(c):c),c.selector=this.selector?this.selector+" "+a:a,c},filter:function(a){return this.pushStack(w(this,a||[],!1))},not:function(a){return this.pushStack(w(this,a||[],!0))},is:function(a){return!!w(this,"string"==typeof a&&t.test(a)?m(a):a||[],!1).length}});var x,y=a.document,z=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,A=m.fn.init=function(a,b){var c,d;if(!a)return this;if("string"==typeof a){if(c="<"===a.charAt(0)&&">"===a.charAt(a.length-1)&&a.length>=3?[null,a,null]:z.exec(a),!c||!c[1]&&b)return!b||b.jquery?(b||x).find(a):this.constructor(b).find(a);if(c[1]){if(b=b instanceof m?b[0]:b,m.merge(this,m.parseHTML(c[1],b&&b.nodeType?b.ownerDocument||b:y,!0)),u.test(c[1])&&m.isPlainObject(b))for(c in b)m.isFunction(this[c])?this[c](b[c]):this.attr(c,b[c]);return this}if(d=y.getElementById(c[2]),d&&d.parentNode){if(d.id!==c[2])return x.find(a);this.length=1,this[0]=d}return this.context=y,this.selector=a,this}return a.nodeType?(this.context=this[0]=a,this.length=1,this):m.isFunction(a)?"undefined"!=typeof x.ready?x.ready(a):a(m):(void 0!==a.selector&&(this.selector=a.selector,this.context=a.context),m.makeArray(a,this))};A.prototype=m.fn,x=m(y);var B=/^(?:parents|prev(?:Until|All))/,C={children:!0,contents:!0,next:!0,prev:!0};m.extend({dir:function(a,b,c){var d=[],e=a[b];while(e&&9!==e.nodeType&&(void 0===c||1!==e.nodeType||!m(e).is(c)))1===e.nodeType&&d.push(e),e=e[b];return d},sibling:function(a,b){for(var c=[];a;a=a.nextSibling)1===a.nodeType&&a!==b&&c.push(a);return c}}),m.fn.extend({has:function(a){var b,c=m(a,this),d=c.length;return this.filter(function(){for(b=0;d>b;b++)if(m.contains(this,c[b]))return!0})},closest:function(a,b){for(var c,d=0,e=this.length,f=[],g=t.test(a)||"string"!=typeof a?m(a,b||this.context):0;e>d;d++)for(c=this[d];c&&c!==b;c=c.parentNode)if(c.nodeType<11&&(g?g.index(c)>-1:1===c.nodeType&&m.find.matchesSelector(c,a))){f.push(c);break}return this.pushStack(f.length>1?m.unique(f):f)},index:function(a){return a?"string"==typeof a?m.inArray(this[0],m(a)):m.inArray(a.jquery?a[0]:a,this):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(a,b){return this.pushStack(m.unique(m.merge(this.get(),m(a,b))))},addBack:function(a){return this.add(null==a?this.prevObject:this.prevObject.filter(a))}});function D(a,b){do a=a[b];while(a&&1!==a.nodeType);return a}m.each({parent:function(a){var b=a.parentNode;return b&&11!==b.nodeType?b:null},parents:function(a){return m.dir(a,"parentNode")},parentsUntil:function(a,b,c){return m.dir(a,"parentNode",c)},next:function(a){return D(a,"nextSibling")},prev:function(a){return D(a,"previousSibling")},nextAll:function(a){return m.dir(a,"nextSibling")},prevAll:function(a){return m.dir(a,"previousSibling")},nextUntil:function(a,b,c){return m.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return m.dir(a,"previousSibling",c)},siblings:function(a){return m.sibling((a.parentNode||{}).firstChild,a)},children:function(a){return m.sibling(a.firstChild)},contents:function(a){return m.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:m.merge([],a.childNodes)}},function(a,b){m.fn[a]=function(c,d){var e=m.map(this,b,c);return"Until"!==a.slice(-5)&&(d=c),d&&"string"==typeof d&&(e=m.filter(d,e)),this.length>1&&(C[a]||(e=m.unique(e)),B.test(a)&&(e=e.reverse())),this.pushStack(e)}});var E=/\S+/g,F={};function G(a){var b=F[a]={};return m.each(a.match(E)||[],function(a,c){b[c]=!0}),b}m.Callbacks=function(a){a="string"==typeof a?F[a]||G(a):m.extend({},a);var b,c,d,e,f,g,h=[],i=!a.once&&[],j=function(l){for(c=a.memory&&l,d=!0,f=g||0,g=0,e=h.length,b=!0;h&&e>f;f++)if(h[f].apply(l[0],l[1])===!1&&a.stopOnFalse){c=!1;break}b=!1,h&&(i?i.length&&j(i.shift()):c?h=[]:k.disable())},k={add:function(){if(h){var d=h.length;!function f(b){m.each(b,function(b,c){var d=m.type(c);"function"===d?a.unique&&k.has(c)||h.push(c):c&&c.length&&"string"!==d&&f(c)})}(arguments),b?e=h.length:c&&(g=d,j(c))}return this},remove:function(){return h&&m.each(arguments,function(a,c){var d;while((d=m.inArray(c,h,d))>-1)h.splice(d,1),b&&(e>=d&&e--,f>=d&&f--)}),this},has:function(a){return a?m.inArray(a,h)>-1:!(!h||!h.length)},empty:function(){return h=[],e=0,this},disable:function(){return h=i=c=void 0,this},disabled:function(){return!h},lock:function(){return i=void 0,c||k.disable(),this},locked:function(){return!i},fireWith:function(a,c){return!h||d&&!i||(c=c||[],c=[a,c.slice?c.slice():c],b?i.push(c):j(c)),this},fire:function(){return k.fireWith(this,arguments),this},fired:function(){return!!d}};return k},m.extend({Deferred:function(a){var b=[["resolve","done",m.Callbacks("once memory"),"resolved"],["reject","fail",m.Callbacks("once memory"),"rejected"],["notify","progress",m.Callbacks("memory")]],c="pending",d={state:function(){return c},always:function(){return e.done(arguments).fail(arguments),this},then:function(){var a=arguments;return m.Deferred(function(c){m.each(b,function(b,f){var g=m.isFunction(a[b])&&a[b];e[f[1]](function(){var a=g&&g.apply(this,arguments);a&&m.isFunction(a.promise)?a.promise().done(c.resolve).fail(c.reject).progress(c.notify):c[f[0]+"With"](this===d?c.promise():this,g?[a]:arguments)})}),a=null}).promise()},promise:function(a){return null!=a?m.extend(a,d):d}},e={};return d.pipe=d.then,m.each(b,function(a,f){var g=f[2],h=f[3];d[f[1]]=g.add,h&&g.add(function(){c=h},b[1^a][2].disable,b[2][2].lock),e[f[0]]=function(){return e[f[0]+"With"](this===e?d:this,arguments),this},e[f[0]+"With"]=g.fireWith}),d.promise(e),a&&a.call(e,e),e},when:function(a){var b=0,c=d.call(arguments),e=c.length,f=1!==e||a&&m.isFunction(a.promise)?e:0,g=1===f?a:m.Deferred(),h=function(a,b,c){return function(e){b[a]=this,c[a]=arguments.length>1?d.call(arguments):e,c===i?g.notifyWith(b,c):--f||g.resolveWith(b,c)}},i,j,k;if(e>1)for(i=new Array(e),j=new Array(e),k=new Array(e);e>b;b++)c[b]&&m.isFunction(c[b].promise)?c[b].promise().done(h(b,k,c)).fail(g.reject).progress(h(b,j,i)):--f;return f||g.resolveWith(k,c),g.promise()}});var H;m.fn.ready=function(a){return m.ready.promise().done(a),this},m.extend({isReady:!1,readyWait:1,holdReady:function(a){a?m.readyWait++:m.ready(!0)},ready:function(a){if(a===!0?!--m.readyWait:!m.isReady){if(!y.body)return setTimeout(m.ready);m.isReady=!0,a!==!0&&--m.readyWait>0||(H.resolveWith(y,[m]),m.fn.triggerHandler&&(m(y).triggerHandler("ready"),m(y).off("ready")))}}});function I(){y.addEventListener?(y.removeEventListener("DOMContentLoaded",J,!1),a.removeEventListener("load",J,!1)):(y.detachEvent("onreadystatechange",J),a.detachEvent("onload",J))}function J(){(y.addEventListener||"load"===event.type||"complete"===y.readyState)&&(I(),m.ready())}m.ready.promise=function(b){if(!H)if(H=m.Deferred(),"complete"===y.readyState)setTimeout(m.ready);else if(y.addEventListener)y.addEventListener("DOMContentLoaded",J,!1),a.addEventListener("load",J,!1);else{y.attachEvent("onreadystatechange",J),a.attachEvent("onload",J);var c=!1;try{c=null==a.frameElement&&y.documentElement}catch(d){}c&&c.doScroll&&!function e(){if(!m.isReady){try{c.doScroll("left")}catch(a){return setTimeout(e,50)}I(),m.ready()}}()}return H.promise(b)};var K="undefined",L;for(L in m(k))break;k.ownLast="0"!==L,k.inlineBlockNeedsLayout=!1,m(function(){var a,b,c,d;c=y.getElementsByTagName("body")[0],c&&c.style&&(b=y.createElement("div"),d=y.createElement("div"),d.style.cssText="position:absolute;border:0;width:0;height:0;top:0;left:-9999px",c.appendChild(d).appendChild(b),typeof b.style.zoom!==K&&(b.style.cssText="display:inline;margin:0;border:0;padding:1px;width:1px;zoom:1",k.inlineBlockNeedsLayout=a=3===b.offsetWidth,a&&(c.style.zoom=1)),c.removeChild(d))}),function(){var a=y.createElement("div");if(null==k.deleteExpando){k.deleteExpando=!0;try{delete a.test}catch(b){k.deleteExpando=!1}}a=null}(),m.acceptData=function(a){var b=m.noData[(a.nodeName+" ").toLowerCase()],c=+a.nodeType||1;return 1!==c&&9!==c?!1:!b||b!==!0&&a.getAttribute("classid")===b};var M=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,N=/([A-Z])/g;function O(a,b,c){if(void 0===c&&1===a.nodeType){var d="data-"+b.replace(N,"-$1").toLowerCase();if(c=a.getAttribute(d),"string"==typeof c){try{c="true"===c?!0:"false"===c?!1:"null"===c?null:+c+""===c?+c:M.test(c)?m.parseJSON(c):c}catch(e){}m.data(a,b,c)}else c=void 0}return c}function P(a){var b;for(b in a)if(("data"!==b||!m.isEmptyObject(a[b]))&&"toJSON"!==b)return!1;return!0}function Q(a,b,d,e){if(m.acceptData(a)){var f,g,h=m.expando,i=a.nodeType,j=i?m.cache:a,k=i?a[h]:a[h]&&h; -if(k&&j[k]&&(e||j[k].data)||void 0!==d||"string"!=typeof b)return k||(k=i?a[h]=c.pop()||m.guid++:h),j[k]||(j[k]=i?{}:{toJSON:m.noop}),("object"==typeof b||"function"==typeof b)&&(e?j[k]=m.extend(j[k],b):j[k].data=m.extend(j[k].data,b)),g=j[k],e||(g.data||(g.data={}),g=g.data),void 0!==d&&(g[m.camelCase(b)]=d),"string"==typeof b?(f=g[b],null==f&&(f=g[m.camelCase(b)])):f=g,f}}function R(a,b,c){if(m.acceptData(a)){var d,e,f=a.nodeType,g=f?m.cache:a,h=f?a[m.expando]:m.expando;if(g[h]){if(b&&(d=c?g[h]:g[h].data)){m.isArray(b)?b=b.concat(m.map(b,m.camelCase)):b in d?b=[b]:(b=m.camelCase(b),b=b in d?[b]:b.split(" ")),e=b.length;while(e--)delete d[b[e]];if(c?!P(d):!m.isEmptyObject(d))return}(c||(delete g[h].data,P(g[h])))&&(f?m.cleanData([a],!0):k.deleteExpando||g!=g.window?delete g[h]:g[h]=null)}}}m.extend({cache:{},noData:{"applet ":!0,"embed ":!0,"object ":"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"},hasData:function(a){return a=a.nodeType?m.cache[a[m.expando]]:a[m.expando],!!a&&!P(a)},data:function(a,b,c){return Q(a,b,c)},removeData:function(a,b){return R(a,b)},_data:function(a,b,c){return Q(a,b,c,!0)},_removeData:function(a,b){return R(a,b,!0)}}),m.fn.extend({data:function(a,b){var c,d,e,f=this[0],g=f&&f.attributes;if(void 0===a){if(this.length&&(e=m.data(f),1===f.nodeType&&!m._data(f,"parsedAttrs"))){c=g.length;while(c--)g[c]&&(d=g[c].name,0===d.indexOf("data-")&&(d=m.camelCase(d.slice(5)),O(f,d,e[d])));m._data(f,"parsedAttrs",!0)}return e}return"object"==typeof a?this.each(function(){m.data(this,a)}):arguments.length>1?this.each(function(){m.data(this,a,b)}):f?O(f,a,m.data(f,a)):void 0},removeData:function(a){return this.each(function(){m.removeData(this,a)})}}),m.extend({queue:function(a,b,c){var d;return a?(b=(b||"fx")+"queue",d=m._data(a,b),c&&(!d||m.isArray(c)?d=m._data(a,b,m.makeArray(c)):d.push(c)),d||[]):void 0},dequeue:function(a,b){b=b||"fx";var c=m.queue(a,b),d=c.length,e=c.shift(),f=m._queueHooks(a,b),g=function(){m.dequeue(a,b)};"inprogress"===e&&(e=c.shift(),d--),e&&("fx"===b&&c.unshift("inprogress"),delete f.stop,e.call(a,g,f)),!d&&f&&f.empty.fire()},_queueHooks:function(a,b){var c=b+"queueHooks";return m._data(a,c)||m._data(a,c,{empty:m.Callbacks("once memory").add(function(){m._removeData(a,b+"queue"),m._removeData(a,c)})})}}),m.fn.extend({queue:function(a,b){var c=2;return"string"!=typeof a&&(b=a,a="fx",c--),arguments.lengthh;h++)b(a[h],c,g?d:d.call(a[h],h,b(a[h],c)));return e?a:j?b.call(a):i?b(a[0],c):f},W=/^(?:checkbox|radio)$/i;!function(){var a=y.createElement("input"),b=y.createElement("div"),c=y.createDocumentFragment();if(b.innerHTML="
a",k.leadingWhitespace=3===b.firstChild.nodeType,k.tbody=!b.getElementsByTagName("tbody").length,k.htmlSerialize=!!b.getElementsByTagName("link").length,k.html5Clone="<:nav>"!==y.createElement("nav").cloneNode(!0).outerHTML,a.type="checkbox",a.checked=!0,c.appendChild(a),k.appendChecked=a.checked,b.innerHTML="",k.noCloneChecked=!!b.cloneNode(!0).lastChild.defaultValue,c.appendChild(b),b.innerHTML="",k.checkClone=b.cloneNode(!0).cloneNode(!0).lastChild.checked,k.noCloneEvent=!0,b.attachEvent&&(b.attachEvent("onclick",function(){k.noCloneEvent=!1}),b.cloneNode(!0).click()),null==k.deleteExpando){k.deleteExpando=!0;try{delete b.test}catch(d){k.deleteExpando=!1}}}(),function(){var b,c,d=y.createElement("div");for(b in{submit:!0,change:!0,focusin:!0})c="on"+b,(k[b+"Bubbles"]=c in a)||(d.setAttribute(c,"t"),k[b+"Bubbles"]=d.attributes[c].expando===!1);d=null}();var X=/^(?:input|select|textarea)$/i,Y=/^key/,Z=/^(?:mouse|pointer|contextmenu)|click/,$=/^(?:focusinfocus|focusoutblur)$/,_=/^([^.]*)(?:\.(.+)|)$/;function ab(){return!0}function bb(){return!1}function cb(){try{return y.activeElement}catch(a){}}m.event={global:{},add:function(a,b,c,d,e){var f,g,h,i,j,k,l,n,o,p,q,r=m._data(a);if(r){c.handler&&(i=c,c=i.handler,e=i.selector),c.guid||(c.guid=m.guid++),(g=r.events)||(g=r.events={}),(k=r.handle)||(k=r.handle=function(a){return typeof m===K||a&&m.event.triggered===a.type?void 0:m.event.dispatch.apply(k.elem,arguments)},k.elem=a),b=(b||"").match(E)||[""],h=b.length;while(h--)f=_.exec(b[h])||[],o=q=f[1],p=(f[2]||"").split(".").sort(),o&&(j=m.event.special[o]||{},o=(e?j.delegateType:j.bindType)||o,j=m.event.special[o]||{},l=m.extend({type:o,origType:q,data:d,handler:c,guid:c.guid,selector:e,needsContext:e&&m.expr.match.needsContext.test(e),namespace:p.join(".")},i),(n=g[o])||(n=g[o]=[],n.delegateCount=0,j.setup&&j.setup.call(a,d,p,k)!==!1||(a.addEventListener?a.addEventListener(o,k,!1):a.attachEvent&&a.attachEvent("on"+o,k))),j.add&&(j.add.call(a,l),l.handler.guid||(l.handler.guid=c.guid)),e?n.splice(n.delegateCount++,0,l):n.push(l),m.event.global[o]=!0);a=null}},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,n,o,p,q,r=m.hasData(a)&&m._data(a);if(r&&(k=r.events)){b=(b||"").match(E)||[""],j=b.length;while(j--)if(h=_.exec(b[j])||[],o=q=h[1],p=(h[2]||"").split(".").sort(),o){l=m.event.special[o]||{},o=(d?l.delegateType:l.bindType)||o,n=k[o]||[],h=h[2]&&new RegExp("(^|\\.)"+p.join("\\.(?:.*\\.|)")+"(\\.|$)"),i=f=n.length;while(f--)g=n[f],!e&&q!==g.origType||c&&c.guid!==g.guid||h&&!h.test(g.namespace)||d&&d!==g.selector&&("**"!==d||!g.selector)||(n.splice(f,1),g.selector&&n.delegateCount--,l.remove&&l.remove.call(a,g));i&&!n.length&&(l.teardown&&l.teardown.call(a,p,r.handle)!==!1||m.removeEvent(a,o,r.handle),delete k[o])}else for(o in k)m.event.remove(a,o+b[j],c,d,!0);m.isEmptyObject(k)&&(delete r.handle,m._removeData(a,"events"))}},trigger:function(b,c,d,e){var f,g,h,i,k,l,n,o=[d||y],p=j.call(b,"type")?b.type:b,q=j.call(b,"namespace")?b.namespace.split("."):[];if(h=l=d=d||y,3!==d.nodeType&&8!==d.nodeType&&!$.test(p+m.event.triggered)&&(p.indexOf(".")>=0&&(q=p.split("."),p=q.shift(),q.sort()),g=p.indexOf(":")<0&&"on"+p,b=b[m.expando]?b:new m.Event(p,"object"==typeof b&&b),b.isTrigger=e?2:3,b.namespace=q.join("."),b.namespace_re=b.namespace?new RegExp("(^|\\.)"+q.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,b.result=void 0,b.target||(b.target=d),c=null==c?[b]:m.makeArray(c,[b]),k=m.event.special[p]||{},e||!k.trigger||k.trigger.apply(d,c)!==!1)){if(!e&&!k.noBubble&&!m.isWindow(d)){for(i=k.delegateType||p,$.test(i+p)||(h=h.parentNode);h;h=h.parentNode)o.push(h),l=h;l===(d.ownerDocument||y)&&o.push(l.defaultView||l.parentWindow||a)}n=0;while((h=o[n++])&&!b.isPropagationStopped())b.type=n>1?i:k.bindType||p,f=(m._data(h,"events")||{})[b.type]&&m._data(h,"handle"),f&&f.apply(h,c),f=g&&h[g],f&&f.apply&&m.acceptData(h)&&(b.result=f.apply(h,c),b.result===!1&&b.preventDefault());if(b.type=p,!e&&!b.isDefaultPrevented()&&(!k._default||k._default.apply(o.pop(),c)===!1)&&m.acceptData(d)&&g&&d[p]&&!m.isWindow(d)){l=d[g],l&&(d[g]=null),m.event.triggered=p;try{d[p]()}catch(r){}m.event.triggered=void 0,l&&(d[g]=l)}return b.result}},dispatch:function(a){a=m.event.fix(a);var b,c,e,f,g,h=[],i=d.call(arguments),j=(m._data(this,"events")||{})[a.type]||[],k=m.event.special[a.type]||{};if(i[0]=a,a.delegateTarget=this,!k.preDispatch||k.preDispatch.call(this,a)!==!1){h=m.event.handlers.call(this,a,j),b=0;while((f=h[b++])&&!a.isPropagationStopped()){a.currentTarget=f.elem,g=0;while((e=f.handlers[g++])&&!a.isImmediatePropagationStopped())(!a.namespace_re||a.namespace_re.test(e.namespace))&&(a.handleObj=e,a.data=e.data,c=((m.event.special[e.origType]||{}).handle||e.handler).apply(f.elem,i),void 0!==c&&(a.result=c)===!1&&(a.preventDefault(),a.stopPropagation()))}return k.postDispatch&&k.postDispatch.call(this,a),a.result}},handlers:function(a,b){var c,d,e,f,g=[],h=b.delegateCount,i=a.target;if(h&&i.nodeType&&(!a.button||"click"!==a.type))for(;i!=this;i=i.parentNode||this)if(1===i.nodeType&&(i.disabled!==!0||"click"!==a.type)){for(e=[],f=0;h>f;f++)d=b[f],c=d.selector+" ",void 0===e[c]&&(e[c]=d.needsContext?m(c,this).index(i)>=0:m.find(c,this,null,[i]).length),e[c]&&e.push(d);e.length&&g.push({elem:i,handlers:e})}return h]","i"),hb=/^\s+/,ib=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,jb=/<([\w:]+)/,kb=/\s*$/g,rb={option:[1,""],legend:[1,"
","
"],area:[1,"",""],param:[1,"",""],thead:[1,"","
"],tr:[2,"","
"],col:[2,"","
"],td:[3,"","
"],_default:k.htmlSerialize?[0,"",""]:[1,"X
","
"]},sb=db(y),tb=sb.appendChild(y.createElement("div"));rb.optgroup=rb.option,rb.tbody=rb.tfoot=rb.colgroup=rb.caption=rb.thead,rb.th=rb.td;function ub(a,b){var c,d,e=0,f=typeof a.getElementsByTagName!==K?a.getElementsByTagName(b||"*"):typeof a.querySelectorAll!==K?a.querySelectorAll(b||"*"):void 0;if(!f)for(f=[],c=a.childNodes||a;null!=(d=c[e]);e++)!b||m.nodeName(d,b)?f.push(d):m.merge(f,ub(d,b));return void 0===b||b&&m.nodeName(a,b)?m.merge([a],f):f}function vb(a){W.test(a.type)&&(a.defaultChecked=a.checked)}function wb(a,b){return m.nodeName(a,"table")&&m.nodeName(11!==b.nodeType?b:b.firstChild,"tr")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function xb(a){return a.type=(null!==m.find.attr(a,"type"))+"/"+a.type,a}function yb(a){var b=pb.exec(a.type);return b?a.type=b[1]:a.removeAttribute("type"),a}function zb(a,b){for(var c,d=0;null!=(c=a[d]);d++)m._data(c,"globalEval",!b||m._data(b[d],"globalEval"))}function Ab(a,b){if(1===b.nodeType&&m.hasData(a)){var c,d,e,f=m._data(a),g=m._data(b,f),h=f.events;if(h){delete g.handle,g.events={};for(c in h)for(d=0,e=h[c].length;e>d;d++)m.event.add(b,c,h[c][d])}g.data&&(g.data=m.extend({},g.data))}}function Bb(a,b){var c,d,e;if(1===b.nodeType){if(c=b.nodeName.toLowerCase(),!k.noCloneEvent&&b[m.expando]){e=m._data(b);for(d in e.events)m.removeEvent(b,d,e.handle);b.removeAttribute(m.expando)}"script"===c&&b.text!==a.text?(xb(b).text=a.text,yb(b)):"object"===c?(b.parentNode&&(b.outerHTML=a.outerHTML),k.html5Clone&&a.innerHTML&&!m.trim(b.innerHTML)&&(b.innerHTML=a.innerHTML)):"input"===c&&W.test(a.type)?(b.defaultChecked=b.checked=a.checked,b.value!==a.value&&(b.value=a.value)):"option"===c?b.defaultSelected=b.selected=a.defaultSelected:("input"===c||"textarea"===c)&&(b.defaultValue=a.defaultValue)}}m.extend({clone:function(a,b,c){var d,e,f,g,h,i=m.contains(a.ownerDocument,a);if(k.html5Clone||m.isXMLDoc(a)||!gb.test("<"+a.nodeName+">")?f=a.cloneNode(!0):(tb.innerHTML=a.outerHTML,tb.removeChild(f=tb.firstChild)),!(k.noCloneEvent&&k.noCloneChecked||1!==a.nodeType&&11!==a.nodeType||m.isXMLDoc(a)))for(d=ub(f),h=ub(a),g=0;null!=(e=h[g]);++g)d[g]&&Bb(e,d[g]);if(b)if(c)for(h=h||ub(a),d=d||ub(f),g=0;null!=(e=h[g]);g++)Ab(e,d[g]);else Ab(a,f);return d=ub(f,"script"),d.length>0&&zb(d,!i&&ub(a,"script")),d=h=e=null,f},buildFragment:function(a,b,c,d){for(var e,f,g,h,i,j,l,n=a.length,o=db(b),p=[],q=0;n>q;q++)if(f=a[q],f||0===f)if("object"===m.type(f))m.merge(p,f.nodeType?[f]:f);else if(lb.test(f)){h=h||o.appendChild(b.createElement("div")),i=(jb.exec(f)||["",""])[1].toLowerCase(),l=rb[i]||rb._default,h.innerHTML=l[1]+f.replace(ib,"<$1>")+l[2],e=l[0];while(e--)h=h.lastChild;if(!k.leadingWhitespace&&hb.test(f)&&p.push(b.createTextNode(hb.exec(f)[0])),!k.tbody){f="table"!==i||kb.test(f)?""!==l[1]||kb.test(f)?0:h:h.firstChild,e=f&&f.childNodes.length;while(e--)m.nodeName(j=f.childNodes[e],"tbody")&&!j.childNodes.length&&f.removeChild(j)}m.merge(p,h.childNodes),h.textContent="";while(h.firstChild)h.removeChild(h.firstChild);h=o.lastChild}else p.push(b.createTextNode(f));h&&o.removeChild(h),k.appendChecked||m.grep(ub(p,"input"),vb),q=0;while(f=p[q++])if((!d||-1===m.inArray(f,d))&&(g=m.contains(f.ownerDocument,f),h=ub(o.appendChild(f),"script"),g&&zb(h),c)){e=0;while(f=h[e++])ob.test(f.type||"")&&c.push(f)}return h=null,o},cleanData:function(a,b){for(var d,e,f,g,h=0,i=m.expando,j=m.cache,l=k.deleteExpando,n=m.event.special;null!=(d=a[h]);h++)if((b||m.acceptData(d))&&(f=d[i],g=f&&j[f])){if(g.events)for(e in g.events)n[e]?m.event.remove(d,e):m.removeEvent(d,e,g.handle);j[f]&&(delete j[f],l?delete d[i]:typeof d.removeAttribute!==K?d.removeAttribute(i):d[i]=null,c.push(f))}}}),m.fn.extend({text:function(a){return V(this,function(a){return void 0===a?m.text(this):this.empty().append((this[0]&&this[0].ownerDocument||y).createTextNode(a))},null,a,arguments.length)},append:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=wb(this,a);b.appendChild(a)}})},prepend:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=wb(this,a);b.insertBefore(a,b.firstChild)}})},before:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this)})},after:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this.nextSibling)})},remove:function(a,b){for(var c,d=a?m.filter(a,this):this,e=0;null!=(c=d[e]);e++)b||1!==c.nodeType||m.cleanData(ub(c)),c.parentNode&&(b&&m.contains(c.ownerDocument,c)&&zb(ub(c,"script")),c.parentNode.removeChild(c));return this},empty:function(){for(var a,b=0;null!=(a=this[b]);b++){1===a.nodeType&&m.cleanData(ub(a,!1));while(a.firstChild)a.removeChild(a.firstChild);a.options&&m.nodeName(a,"select")&&(a.options.length=0)}return this},clone:function(a,b){return a=null==a?!1:a,b=null==b?a:b,this.map(function(){return m.clone(this,a,b)})},html:function(a){return V(this,function(a){var b=this[0]||{},c=0,d=this.length;if(void 0===a)return 1===b.nodeType?b.innerHTML.replace(fb,""):void 0;if(!("string"!=typeof a||mb.test(a)||!k.htmlSerialize&&gb.test(a)||!k.leadingWhitespace&&hb.test(a)||rb[(jb.exec(a)||["",""])[1].toLowerCase()])){a=a.replace(ib,"<$1>");try{for(;d>c;c++)b=this[c]||{},1===b.nodeType&&(m.cleanData(ub(b,!1)),b.innerHTML=a);b=0}catch(e){}}b&&this.empty().append(a)},null,a,arguments.length)},replaceWith:function(){var a=arguments[0];return this.domManip(arguments,function(b){a=this.parentNode,m.cleanData(ub(this)),a&&a.replaceChild(b,this)}),a&&(a.length||a.nodeType)?this:this.remove()},detach:function(a){return this.remove(a,!0)},domManip:function(a,b){a=e.apply([],a);var c,d,f,g,h,i,j=0,l=this.length,n=this,o=l-1,p=a[0],q=m.isFunction(p);if(q||l>1&&"string"==typeof p&&!k.checkClone&&nb.test(p))return this.each(function(c){var d=n.eq(c);q&&(a[0]=p.call(this,c,d.html())),d.domManip(a,b)});if(l&&(i=m.buildFragment(a,this[0].ownerDocument,!1,this),c=i.firstChild,1===i.childNodes.length&&(i=c),c)){for(g=m.map(ub(i,"script"),xb),f=g.length;l>j;j++)d=i,j!==o&&(d=m.clone(d,!0,!0),f&&m.merge(g,ub(d,"script"))),b.call(this[j],d,j);if(f)for(h=g[g.length-1].ownerDocument,m.map(g,yb),j=0;f>j;j++)d=g[j],ob.test(d.type||"")&&!m._data(d,"globalEval")&&m.contains(h,d)&&(d.src?m._evalUrl&&m._evalUrl(d.src):m.globalEval((d.text||d.textContent||d.innerHTML||"").replace(qb,"")));i=c=null}return this}}),m.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){m.fn[a]=function(a){for(var c,d=0,e=[],g=m(a),h=g.length-1;h>=d;d++)c=d===h?this:this.clone(!0),m(g[d])[b](c),f.apply(e,c.get());return this.pushStack(e)}});var Cb,Db={};function Eb(b,c){var d,e=m(c.createElement(b)).appendTo(c.body),f=a.getDefaultComputedStyle&&(d=a.getDefaultComputedStyle(e[0]))?d.display:m.css(e[0],"display");return e.detach(),f}function Fb(a){var b=y,c=Db[a];return c||(c=Eb(a,b),"none"!==c&&c||(Cb=(Cb||m("