From 96857389ac6a9ab11f0543da5b0af3895dfccfaf Mon Sep 17 00:00:00 2001 From: Friendika Date: Thu, 23 Jun 2011 01:57:14 -0700 Subject: [PATCH 01/89] friendika-z initial implementation --- addon/facebook/facebook.php | 4 ++++ addon/statusnet/statusnet.php | 10 +++++++--- addon/twitter/twitter.php | 5 +++++ include/acl_selectors.php | 2 ++ include/notifier.php | 9 ++++++--- mod/item.php | 1 + 6 files changed, 25 insertions(+), 6 deletions(-) diff --git a/addon/facebook/facebook.php b/addon/facebook/facebook.php index 15dffa594c..4265ce8017 100644 --- a/addon/facebook/facebook.php +++ b/addon/facebook/facebook.php @@ -431,6 +431,10 @@ function facebook_post_hook(&$a,&$b) { if((local_user()) && (local_user() == $b['uid'])) { + // Facebook is not considered a private network + if($b['prvnets']) + return; + if($b['parent']) { $r = q("SELECT * FROM `item` WHERE `id` = %d AND `uid` = %d LIMIT 1", intval($b['parent']), diff --git a/addon/statusnet/statusnet.php b/addon/statusnet/statusnet.php index 85024631ce..22f7dc8f9e 100644 --- a/addon/statusnet/statusnet.php +++ b/addon/statusnet/statusnet.php @@ -303,10 +303,14 @@ function statusnet_post_hook(&$a,&$b) { if((local_user()) && (local_user() == $b['uid']) && (! $b['private']) && (!$b['parent']) ) { - load_pconfig(local_user(), 'statusnet'); + // Status.Net is not considered a private network + if($b['prvnets']) + return; + + load_pconfig(local_user(), 'statusnet'); - $api = get_pconfig(local_user(), 'statusnet', 'baseapi'); - $ckey = get_pconfig(local_user(), 'statusnet', 'consumerkey' ); + $api = get_pconfig(local_user(), 'statusnet', 'baseapi'); + $ckey = get_pconfig(local_user(), 'statusnet', 'consumerkey' ); $csecret = get_pconfig(local_user(), 'statusnet', 'consumersecret' ); $otoken = get_pconfig(local_user(), 'statusnet', 'oauthtoken' ); $osecret = get_pconfig(local_user(), 'statusnet', 'oauthsecret' ); diff --git a/addon/twitter/twitter.php b/addon/twitter/twitter.php index aeb9cc9376..7829799bc1 100644 --- a/addon/twitter/twitter.php +++ b/addon/twitter/twitter.php @@ -195,6 +195,11 @@ function twitter_post_hook(&$a,&$b) { if((local_user()) && (local_user() == $b['uid']) && (! $b['private']) && (! $b['parent']) ) { + // Twitter is not considered a private network + if($b['prvnets']) + return; + + load_pconfig(local_user(), 'twitter'); $ckey = get_config('twitter', 'consumerkey' ); diff --git a/include/acl_selectors.php b/include/acl_selectors.php index 90fdf9c1c9..921a8275bb 100644 --- a/include/acl_selectors.php +++ b/include/acl_selectors.php @@ -64,6 +64,8 @@ function contact_select($selname, $selclass, $preselected = false, $size = 4, $p $sql_extra .= " AND `network` IN ( 'dfrn', 'mail', 'face' ) "; } + + if($privmail) $o .= " diff --git a/addon/piwik/piwik.php b/addon/piwik/piwik.php index 032f84f4bb..94aa9b55c0 100644 --- a/addon/piwik/piwik.php +++ b/addon/piwik/piwik.php @@ -70,4 +70,21 @@ function piwik_analytics($a,&$b) { } } - +function piwik_plugin_admin (&$a, &$o) { + $t = file_get_contents( dirname(__file__)."/admin.tpl"); + $o = replace_macros( $t, array( + '$submit' => t('Submit'), + '$baseurl' => array('baseurl', t('Piwik Base URL'), get_config('piwik','baseurl' ), ''), + '$sideid' => array('sideid', t('Side ID'), get_config('piwik','sideid' ), ''), + '$optout' => array('optout', t('Show opt-out cookie link?'), get_config('piwik','optout' ), ''), + )); +} +function piwik_plugin_admin_post (&$a) { + $url = ((x($_POST, 'baseurl')) ? notags(trim($_POST['baseurl'])) : ''); + $id = ((x($_POST, 'sideid')) ? trim($_POST['sideid']) : ''); + $optout = ((x($_POST, 'optout')) ? trim($_POST['optout']) : ''); + set_config('piwik', 'baseurl', $url); + set_config('piwik', 'sideid', $id); + set_config('piwik', 'optout', $optout); + info( t('Settings updated.'). EOL); +} From cb319c68249bc02da6e41d9e907d08439f57895d Mon Sep 17 00:00:00 2001 From: Tobias Diekershoff Date: Thu, 23 Jun 2011 21:44:25 +0200 Subject: [PATCH 03/89] fixed a typo --- addon/piwik/admin.tpl | 2 +- addon/piwik/piwik.php | 16 ++++++++-------- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/addon/piwik/admin.tpl b/addon/piwik/admin.tpl index e7a281e3a5..0edd062104 100644 --- a/addon/piwik/admin.tpl +++ b/addon/piwik/admin.tpl @@ -1,4 +1,4 @@ {{ inc field_input.tpl with $field=$baseurl }}{{ endinc }} -{{ inc field_input.tpl with $field=$sideid }}{{ endinc }} +{{ inc field_input.tpl with $field=$siteid }}{{ endinc }} {{ inc field_checkbox.tpl with $field=$optout }}{{ endinc }}
diff --git a/addon/piwik/piwik.php b/addon/piwik/piwik.php index 94aa9b55c0..3cc136d299 100644 --- a/addon/piwik/piwik.php +++ b/addon/piwik/piwik.php @@ -18,10 +18,10 @@ * Add the following two lines to your .htconfig.php file: * * $a->config['piwik']['baseurl'] = 'www.example.com/piwik/'; - * $a->config['piwik']['sideid'] = '1'; + * $a->config['piwik']['siteid'] = '1'; * $a->config['piwik']['optout'] = true; // set to false to disable * - * Change the sideid to the ID that the Piwik tracker for your Friendika + * Change the siteid to the ID that the Piwik tracker for your Friendika * installation has. Alter the baseurl to fit your needs, don't care * about http/https but beware to put the trailing / at the end of your * setting. @@ -54,13 +54,13 @@ function piwik_analytics($a,&$b) { * Get the configuration variables from the .htconfig file. */ $baseurl = get_config('piwik','baseurl'); - $sideod = get_config('piwik','sideid'); + $siteid = get_config('piwik','siteid'); $optout = get_config('piwik','optout'); /* - * Add the Piwik code for the side. + * Add the Piwik code for the site. */ - $b .= "
\r\n \r\n\r\n\r\n
"; + $b .= "
\r\n \r\n\r\n\r\n
"; /* * If the optout variable is set to true then display the notice * otherwise just include the above code into the page. @@ -75,16 +75,16 @@ function piwik_plugin_admin (&$a, &$o) { $o = replace_macros( $t, array( '$submit' => t('Submit'), '$baseurl' => array('baseurl', t('Piwik Base URL'), get_config('piwik','baseurl' ), ''), - '$sideid' => array('sideid', t('Side ID'), get_config('piwik','sideid' ), ''), + '$siteid' => array('siteid', t('Site ID'), get_config('piwik','siteid' ), ''), '$optout' => array('optout', t('Show opt-out cookie link?'), get_config('piwik','optout' ), ''), )); } function piwik_plugin_admin_post (&$a) { $url = ((x($_POST, 'baseurl')) ? notags(trim($_POST['baseurl'])) : ''); - $id = ((x($_POST, 'sideid')) ? trim($_POST['sideid']) : ''); + $id = ((x($_POST, 'siteid')) ? trim($_POST['siteid']) : ''); $optout = ((x($_POST, 'optout')) ? trim($_POST['optout']) : ''); set_config('piwik', 'baseurl', $url); - set_config('piwik', 'sideid', $id); + set_config('piwik', 'siteid', $id); set_config('piwik', 'optout', $optout); info( t('Settings updated.'). EOL); } From 0e809b930173e284bf4abaa958616b4d3aa9ed07 Mon Sep 17 00:00:00 2001 From: Friendika Date: Thu, 23 Jun 2011 14:11:23 -0700 Subject: [PATCH 04/89] bug #94 mis-spell Czech --- boot.php | 2 +- include/country.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/boot.php b/boot.php index c5751da373..0192f3c0f0 100644 --- a/boot.php +++ b/boot.php @@ -4,7 +4,7 @@ set_time_limit(0); ini_set('pcre.backtrack_limit', 250000); -define ( 'FRIENDIKA_VERSION', '2.2.1019' ); +define ( 'FRIENDIKA_VERSION', '2.2.1020' ); define ( 'DFRN_PROTOCOL_VERSION', '2.21' ); define ( 'DB_UPDATE_VERSION', 1066 ); diff --git a/include/country.js b/include/country.js index 701ec19e27..07ab29ba6a 100644 --- a/include/country.js +++ b/include/country.js @@ -17,7 +17,7 @@ var gArCountryInfo; var gArStateInfo; // NOTE: // Some editors may exhibit problems viewing 2803 characters... -var sCountryString = "|Afghanistan|Albania|Algeria|American Samoa|Angola|Anguilla|Antartica|Antigua and Barbuda|Argentina|Armenia|Aruba|Ashmore and Cartier Island|Australia|Austria|Azerbaijan|Bahamas|Bahrain|Bangladesh|Barbados|Belarus|Belgium|Belize|Benin|Bermuda|Bhutan|Bolivia|Bosnia and Herzegovina|Botswana|Brazil|British Virgin Islands|Brunei|Bulgaria|Burkina Faso|Burma|Burundi|Cambodia|Cameroon|Canada|Cape Verde|Cayman Islands|Central African Republic|Chad|Chile|China|Christmas Island|Clipperton Island|Cocos (Keeling) Islands|Colombia|Comoros|Congo, Democratic Republic of the|Congo, Republic of the|Cook Islands|Costa Rica|Cote d'Ivoire|Croatia|Cuba|Cyprus|Czeck Republic|Denmark|Djibouti|Dominica|Dominican Republic|Ecuador|Egypt|El Salvador|Equatorial Guinea|Eritrea|Estonia|Ethiopia|Europa Island|Falkland Islands (Islas Malvinas)|Faroe Islands|Fiji|Finland|France|French Guiana|French Polynesia|French Southern and Antarctic Lands|Gabon|Gambia, The|Gaza Strip|Georgia|Germany|Ghana|Gibraltar|Glorioso Islands|Greece|Greenland|Grenada|Guadeloupe|Guam|Guatemala|Guernsey|Guinea|Guinea-Bissau|Guyana|Haiti|Heard Island and McDonald Islands|Holy See (Vatican City)|Honduras|Hong Kong|Howland Island|Hungary|Iceland|India|Indonesia|Iran|Iraq|Ireland|Ireland, Northern|Israel|Italy|Jamaica|Jan Mayen|Japan|Jarvis Island|Jersey|Johnston Atoll|Jordan|Juan de Nova Island|Kazakhstan|Kenya|Kiribati|Korea, North|Korea, South|Kuwait|Kyrgyzstan|Laos|Latvia|Lebanon|Lesotho|Liberia|Libya|Liechtenstein|Lithuania|Luxembourg|Macau|Macedonia, Former Yugoslav Republic of|Madagascar|Malawi|Malaysia|Maldives|Mali|Malta|Man, Isle of|Marshall Islands|Martinique|Mauritania|Mauritius|Mayotte|Mexico|Micronesia, Federated States of|Midway Islands|Moldova|Monaco|Mongolia|Montserrat|Morocco|Mozambique|Namibia|Nauru|Nepal|Netherlands|Netherlands Antilles|New Caledonia|New Zealand|Nicaragua|Niger|Nigeria|Niue|Norfolk Island|Northern Mariana Islands|Norway|Oman|Pakistan|Palau|Panama|Papua New Guinea|Paraguay|Peru|Philippines|Pitcaim Islands|Poland|Portugal|Puerto Rico|Qatar|Reunion|Romainia|Russia|Rwanda|Saint Helena|Saint Kitts and Nevis|Saint Lucia|Saint Pierre and Miquelon|Saint Vincent and the Grenadines|Samoa|San Marino|Sao Tome and Principe|Saudi Arabia|Scotland|Senegal|Seychelles|Sierra Leone|Singapore|Slovakia|Slovenia|Solomon Islands|Somalia|South Africa|South Georgia and South Sandwich Islands|Spain|Spratly Islands|Sri Lanka|Sudan|Suriname|Svalbard|Swaziland|Sweden|Switzerland|Syria|Taiwan|Tajikistan|Tanzania|Thailand|Tobago|Toga|Tokelau|Tonga|Trinidad|Tunisia|Turkey|Turkmenistan|Tuvalu|Uganda|Ukraine|United Arab Emirates|United Kingdom|Uruguay|USA|Uzbekistan|Vanuatu|Venezuela|Vietnam|Virgin Islands|Wales|Wallis and Futuna|West Bank|Western Sahara|Yemen|Yugoslavia|Zambia|Zimbabwe"; +var sCountryString = "|Afghanistan|Albania|Algeria|American Samoa|Angola|Anguilla|Antartica|Antigua and Barbuda|Argentina|Armenia|Aruba|Ashmore and Cartier Island|Australia|Austria|Azerbaijan|Bahamas|Bahrain|Bangladesh|Barbados|Belarus|Belgium|Belize|Benin|Bermuda|Bhutan|Bolivia|Bosnia and Herzegovina|Botswana|Brazil|British Virgin Islands|Brunei|Bulgaria|Burkina Faso|Burma|Burundi|Cambodia|Cameroon|Canada|Cape Verde|Cayman Islands|Central African Republic|Chad|Chile|China|Christmas Island|Clipperton Island|Cocos (Keeling) Islands|Colombia|Comoros|Congo, Democratic Republic of the|Congo, Republic of the|Cook Islands|Costa Rica|Cote d'Ivoire|Croatia|Cuba|Cyprus|Czech Republic|Denmark|Djibouti|Dominica|Dominican Republic|Ecuador|Egypt|El Salvador|Equatorial Guinea|Eritrea|Estonia|Ethiopia|Europa Island|Falkland Islands (Islas Malvinas)|Faroe Islands|Fiji|Finland|France|French Guiana|French Polynesia|French Southern and Antarctic Lands|Gabon|Gambia, The|Gaza Strip|Georgia|Germany|Ghana|Gibraltar|Glorioso Islands|Greece|Greenland|Grenada|Guadeloupe|Guam|Guatemala|Guernsey|Guinea|Guinea-Bissau|Guyana|Haiti|Heard Island and McDonald Islands|Holy See (Vatican City)|Honduras|Hong Kong|Howland Island|Hungary|Iceland|India|Indonesia|Iran|Iraq|Ireland|Ireland, Northern|Israel|Italy|Jamaica|Jan Mayen|Japan|Jarvis Island|Jersey|Johnston Atoll|Jordan|Juan de Nova Island|Kazakhstan|Kenya|Kiribati|Korea, North|Korea, South|Kuwait|Kyrgyzstan|Laos|Latvia|Lebanon|Lesotho|Liberia|Libya|Liechtenstein|Lithuania|Luxembourg|Macau|Macedonia, Former Yugoslav Republic of|Madagascar|Malawi|Malaysia|Maldives|Mali|Malta|Man, Isle of|Marshall Islands|Martinique|Mauritania|Mauritius|Mayotte|Mexico|Micronesia, Federated States of|Midway Islands|Moldova|Monaco|Mongolia|Montserrat|Morocco|Mozambique|Namibia|Nauru|Nepal|Netherlands|Netherlands Antilles|New Caledonia|New Zealand|Nicaragua|Niger|Nigeria|Niue|Norfolk Island|Northern Mariana Islands|Norway|Oman|Pakistan|Palau|Panama|Papua New Guinea|Paraguay|Peru|Philippines|Pitcaim Islands|Poland|Portugal|Puerto Rico|Qatar|Reunion|Romainia|Russia|Rwanda|Saint Helena|Saint Kitts and Nevis|Saint Lucia|Saint Pierre and Miquelon|Saint Vincent and the Grenadines|Samoa|San Marino|Sao Tome and Principe|Saudi Arabia|Scotland|Senegal|Seychelles|Sierra Leone|Singapore|Slovakia|Slovenia|Solomon Islands|Somalia|South Africa|South Georgia and South Sandwich Islands|Spain|Spratly Islands|Sri Lanka|Sudan|Suriname|Svalbard|Swaziland|Sweden|Switzerland|Syria|Taiwan|Tajikistan|Tanzania|Thailand|Tobago|Toga|Tokelau|Tonga|Trinidad|Tunisia|Turkey|Turkmenistan|Tuvalu|Uganda|Ukraine|United Arab Emirates|United Kingdom|Uruguay|USA|Uzbekistan|Vanuatu|Venezuela|Vietnam|Virgin Islands|Wales|Wallis and Futuna|West Bank|Western Sahara|Yemen|Yugoslavia|Zambia|Zimbabwe"; var aStates = new Array(); aStates[0]=""; From 5633430a19624423ddd98655518d8a765f081230 Mon Sep 17 00:00:00 2001 From: Friendika Date: Thu, 23 Jun 2011 15:58:43 -0700 Subject: [PATCH 05/89] don't allow tags in app source --- addon/facebook/facebook.php | 2 +- include/items.php | 2 +- mod/item.php | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/addon/facebook/facebook.php b/addon/facebook/facebook.php index 4265ce8017..e9290b10e6 100644 --- a/addon/facebook/facebook.php +++ b/addon/facebook/facebook.php @@ -821,7 +821,7 @@ function fb_consume_stream($uid,$j,$wall = false) { $datarray['owner-avatar'] = $self[0]['thumb']; } if(isset($entry->application) && isset($entry->application->name) && strlen($entry->application->name)) - $datarray['app'] = $entry->application->name; + $datarray['app'] = strip_tags($entry->application->name); else $datarray['app'] = 'facebook'; $datarray['author-name'] = $from->name; diff --git a/include/items.php b/include/items.php index 5bcdaef998..3901927fcd 100644 --- a/include/items.php +++ b/include/items.php @@ -338,7 +338,7 @@ function get_atom_elements($feed,$item) { $apps = $item->get_item_tags(NAMESPACE_STATUSNET,'notice_info'); if($apps && $apps[0]['attribs']['']['source']) { - $res['app'] = $apps[0]['attribs']['']['source']; + $res['app'] = strip_tags(unxmlify($apps[0]['attribs']['']['source'])); if($res['app'] === 'web') $res['app'] = 'OStatus'; } diff --git a/mod/item.php b/mod/item.php index 9d7b954a84..22eba7b3f5 100644 --- a/mod/item.php +++ b/mod/item.php @@ -61,7 +61,7 @@ function item_post(&$a) { $profile_uid = ((x($_POST,'profile_uid')) ? intval($_POST['profile_uid']) : 0); $post_id = ((x($_POST['post_id'])) ? intval($_POST['post_id']) : 0); - $app = ((x($_POST['source'])) ? notags($_POST['source']) : ''); + $app = ((x($_POST['source'])) ? strip_tags($_POST['source']) : ''); if(! can_write_wall($a,$profile_uid)) { notice( t('Permission denied.') . EOL) ; From 2bc4e24da22d7a75bbdbae18e0c64575ff7fe858 Mon Sep 17 00:00:00 2001 From: Friendika Date: Thu, 23 Jun 2011 16:10:36 -0700 Subject: [PATCH 06/89] ignore local merge script --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index 9b3b23a002..bb8f88f759 100644 --- a/.gitignore +++ b/.gitignore @@ -8,4 +8,5 @@ include/jquery-1.4.2.min.js *.version* push* langup +merge home.html From 38cf37d3c3a4bc9873aa12eed5167b356282385f Mon Sep 17 00:00:00 2001 From: Friendika Date: Thu, 23 Jun 2011 17:56:59 -0700 Subject: [PATCH 07/89] new item view, sort by received date - not posted date. --- boot.php | 2 +- database.sql | 8 +++++--- include/items.php | 1 + mod/item.php | 6 ++++-- mod/network.php | 2 +- update.php | 9 ++++++++- 6 files changed, 20 insertions(+), 8 deletions(-) diff --git a/boot.php b/boot.php index 0192f3c0f0..d042ffdca6 100644 --- a/boot.php +++ b/boot.php @@ -6,7 +6,7 @@ ini_set('pcre.backtrack_limit', 250000); define ( 'FRIENDIKA_VERSION', '2.2.1020' ); define ( 'DFRN_PROTOCOL_VERSION', '2.21' ); -define ( 'DB_UPDATE_VERSION', 1066 ); +define ( 'DB_UPDATE_VERSION', 1067 ); define ( 'EOL', "
\r\n" ); define ( 'ATOM_TIME', 'Y-m-d\TH:i:s\Z' ); diff --git a/database.sql b/database.sql index 284ab0afc8..b99796d830 100644 --- a/database.sql +++ b/database.sql @@ -169,9 +169,10 @@ CREATE TABLE IF NOT EXISTS `item` ( `parent-uri` char(255) NOT NULL, `extid` char(255) NOT NULL, `thr-parent` char(255) NOT NULL, - `created` datetime NOT NULL, - `edited` datetime NOT NULL, - `changed` datetime NOT NULL, + `created` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + `edited` 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, @@ -215,6 +216,7 @@ CREATE TABLE IF NOT EXISTS `item` ( KEY `extid` (`extid`), KEY `created` (`created`), KEY `edited` (`edited`), + KEY `received` (`received`), KEY `visible` (`visible`), KEY `deleted` (`deleted`), KEY `last-child` (`last-child`), diff --git a/include/items.php b/include/items.php index 3901927fcd..2a934af3ac 100644 --- a/include/items.php +++ b/include/items.php @@ -669,6 +669,7 @@ function item_store($arr,$force_parent = false) { $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['received'] = datetime_convert(); $arr['changed'] = datetime_convert(); $arr['title'] = ((x($arr,'title')) ? notags(trim($arr['title'])) : ''); $arr['location'] = ((x($arr,'location')) ? notags(trim($arr['location'])) : ''); diff --git a/mod/item.php b/mod/item.php index 22eba7b3f5..f87b6074a8 100644 --- a/mod/item.php +++ b/mod/item.php @@ -419,6 +419,7 @@ function item_post(&$a) { $datarray['author-avatar'] = $author['thumb']; $datarray['created'] = datetime_convert(); $datarray['edited'] = datetime_convert(); + $datarray['received'] = datetime_convert(); $datarray['changed'] = datetime_convert(); $datarray['uri'] = $uri; $datarray['title'] = $title; @@ -473,9 +474,9 @@ function item_post(&$a) { $r = q("INSERT INTO `item` (`uid`,`type`,`wall`,`gravity`,`contact-id`,`owner-name`,`owner-link`,`owner-avatar`, - `author-name`, `author-link`, `author-avatar`, `created`, `edited`, `changed`, `uri`, `title`, `body`, `app`, `location`, `coord`, + `author-name`, `author-link`, `author-avatar`, `created`, `edited`, `received`, `changed`, `uri`, `title`, `body`, `app`, `location`, `coord`, `tag`, `inform`, `verb`, `allow_cid`, `allow_gid`, `deny_cid`, `deny_gid`, `private`, `pubmail`, `attach` ) - VALUES( %d, '%s', %d, %d, %d, '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', %d, %d, '%s' )", + VALUES( %d, '%s', %d, %d, %d, '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', %d, %d, '%s' )", intval($datarray['uid']), dbesc($datarray['type']), intval($datarray['wall']), @@ -489,6 +490,7 @@ function item_post(&$a) { dbesc($datarray['author-avatar']), dbesc($datarray['created']), dbesc($datarray['edited']), + dbesc($datarray['received']), dbesc($datarray['changed']), dbesc($datarray['uri']), dbesc($datarray['title']), diff --git a/mod/network.php b/mod/network.php index 75775ba502..9c5202ad2d 100644 --- a/mod/network.php +++ b/mod/network.php @@ -212,7 +212,7 @@ function network_content(&$a, $update = 0) { AND `contact`.`id` = `item`.`contact-id` AND `contact`.`blocked` = 0 AND `contact`.`pending` = 0 $sql_extra - ORDER BY `item`.`created` DESC LIMIT %d ,%d ", + ORDER BY `item`.`received` DESC LIMIT %d ,%d ", intval($_SESSION['uid']), intval($a->pager['start']), intval($a->pager['itemspage']) diff --git a/update.php b/update.php index 8edd2aa920..13187ac511 100644 --- a/update.php +++ b/update.php @@ -1,6 +1,6 @@ Date: Thu, 23 Jun 2011 18:25:33 -0700 Subject: [PATCH 08/89] don't update an event that hasn't changed. --- include/event.php | 16 ++++++++++++++++ include/items.php | 1 + mod/dfrn_notify.php | 1 + 3 files changed, 18 insertions(+) diff --git a/include/event.php b/include/event.php index 8078a9a5ed..f79266e33c 100644 --- a/include/event.php +++ b/include/event.php @@ -213,6 +213,22 @@ function event_store($arr) { if($arr['id']) { + + // has the event actually changed? + + $r = q("SELECT * FROM `event` WHERE `id` = %d AND `uid` = %d LIMIT 1", + intval($arr['id']), + intval($arr['uid']) + ); + if((! count($r)) || ($r[0]['edited'] === $arr['edited'])) { + $r = q("SELECT * FROM `item` WHERE `event-id` = %d AND `uid` = %d LIMIT 1", + intval($arr['id']), + intval($arr['uid']) + ); + return((count($r)) ? $r[0]['id'] : 0); + } + + $r = q("UPDATE `event` SET `edited` = '%s', `start` = '%s', diff --git a/include/items.php b/include/items.php index 2a934af3ac..47a38d5e50 100644 --- a/include/items.php +++ b/include/items.php @@ -1347,6 +1347,7 @@ function consume_feed($xml,$importer,&$contact, &$hub, $datedir = 0, $secure_fee if(x($ev,'desc') && x($ev,'start')) { $ev['uid'] = $importer['uid']; $ev['uri'] = $item_id; + $ev['edited'] = $datarray['edited']; if(is_array($contact)) $ev['cid'] = $contact['id']; diff --git a/mod/dfrn_notify.php b/mod/dfrn_notify.php index f6d1f2be57..dd01722435 100644 --- a/mod/dfrn_notify.php +++ b/mod/dfrn_notify.php @@ -676,6 +676,7 @@ function dfrn_notify_post(&$a) { $ev['cid'] = $importer['id']; $ev['uid'] = $importer['uid']; $ev['uri'] = $item_id; + $ev['edited'] = $datarray['edited']; $r = q("SELECT * FROM `event` WHERE `uri` = '%s' AND `uid` = %d LIMIT 1", dbesc($item_id), From 8ffcd4323b883b66d9249c9742fb26a5c5f91605 Mon Sep 17 00:00:00 2001 From: Friendika Date: Thu, 23 Jun 2011 18:56:24 -0700 Subject: [PATCH 09/89] never enough comments --- include/event.php | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/include/event.php b/include/event.php index f79266e33c..1032022b34 100644 --- a/include/event.php +++ b/include/event.php @@ -212,6 +212,8 @@ function event_store($arr) { $contact = $c[0]; + // Existing event being modified + if($arr['id']) { // has the event actually changed? @@ -221,6 +223,9 @@ function event_store($arr) { intval($arr['uid']) ); if((! count($r)) || ($r[0]['edited'] === $arr['edited'])) { + + // Nothing has changed. Grab the item id to return. + $r = q("SELECT * FROM `item` WHERE `event-id` = %d AND `uid` = %d LIMIT 1", intval($arr['id']), intval($arr['uid']) @@ -228,6 +233,7 @@ function event_store($arr) { return((count($r)) ? $r[0]['id'] : 0); } + // The event changed. Update it. $r = q("UPDATE `event` SET `edited` = '%s', @@ -276,7 +282,7 @@ function event_store($arr) { dbesc($arr['allow_gid']), dbesc($arr['deny_cid']), dbesc($arr['deny_gid']), - dbesc(datetime_convert()), + dbesc($arr['edited']), intval($r[0]['id']), intval($arr['uid']) ); @@ -288,6 +294,8 @@ function event_store($arr) { } else { + // New event. Store it. + $r = q("INSERT INTO `event` ( `uid`,`cid`,`uri`,`created`,`edited`,`start`,`finish`,`desc`,`location`,`type`, `adjust`,`nofinish`,`allow_cid`,`allow_gid`,`deny_cid`,`deny_gid`) VALUES ( %d, %d, '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', %d, %d, '%s', '%s', '%s', '%s' ) ", From 694c1c1af4ec1e19486fcb97da697cba70a9546a Mon Sep 17 00:00:00 2001 From: Friendika Date: Thu, 23 Jun 2011 21:55:27 -0700 Subject: [PATCH 10/89] new contact_selector function to provide more fine-tuned selection options. --- addon/facebook/facebook.php | 37 +++++++------- include/acl_selectors.php | 99 +++++++++++++++++++++++++++++++++++++ 2 files changed, 119 insertions(+), 17 deletions(-) diff --git a/addon/facebook/facebook.php b/addon/facebook/facebook.php index e9290b10e6..49f1938043 100644 --- a/addon/facebook/facebook.php +++ b/addon/facebook/facebook.php @@ -43,6 +43,25 @@ define('FACEBOOK_MAXPOSTLEN', 420); + +function facebook_install() { + register_hook('post_local_end', 'addon/facebook/facebook.php', 'facebook_post_hook'); + register_hook('jot_networks', 'addon/facebook/facebook.php', 'facebook_jot_nets'); + register_hook('plugin_settings', 'addon/facebook/facebook.php', 'facebook_plugin_settings'); + register_hook('cron', 'addon/facebook/facebook.php', 'facebook_cron'); + register_hook('queue_predeliver', 'addon/facebook/facebook.php', 'fb_queue_hook'); +} + + +function facebook_uninstall() { + unregister_hook('post_local_end', 'addon/facebook/facebook.php', 'facebook_post_hook'); + unregister_hook('jot_networks', 'addon/facebook/facebook.php', 'facebook_jot_nets'); + unregister_hook('plugin_settings', 'addon/facebook/facebook.php', 'facebook_plugin_settings'); + unregister_hook('cron', 'addon/facebook/facebook.php', 'facebook_cron'); + unregister_hook('queue_predeliver', 'addon/facebook/facebook.php', 'fb_queue_hook'); +} + + /* declare the facebook_module function so that /facebook url requests will land here */ function facebook_module() {} @@ -339,22 +358,6 @@ function facebook_content(&$a) { return $o; } -function facebook_install() { - register_hook('post_local_end', 'addon/facebook/facebook.php', 'facebook_post_hook'); - register_hook('jot_networks', 'addon/facebook/facebook.php', 'facebook_jot_nets'); - register_hook('plugin_settings', 'addon/facebook/facebook.php', 'facebook_plugin_settings'); - register_hook('cron', 'addon/facebook/facebook.php', 'facebook_cron'); - register_hook('queue_predeliver', 'addon/facebook/facebook.php', 'fb_queue_hook'); -} - - -function facebook_uninstall() { - unregister_hook('post_local_end', 'addon/facebook/facebook.php', 'facebook_post_hook'); - unregister_hook('jot_networks', 'addon/facebook/facebook.php', 'facebook_jot_nets'); - unregister_hook('plugin_settings', 'addon/facebook/facebook.php', 'facebook_plugin_settings'); - unregister_hook('cron', 'addon/facebook/facebook.php', 'facebook_cron'); - unregister_hook('queue_predeliver', 'addon/facebook/facebook.php', 'fb_queue_hook'); -} function facebook_cron($a,$b) { @@ -432,7 +435,7 @@ function facebook_post_hook(&$a,&$b) { if((local_user()) && (local_user() == $b['uid'])) { // Facebook is not considered a private network - if($b['prvnets']) + if($b['prvnets'] && $b['private']) return; if($b['parent']) { diff --git a/include/acl_selectors.php b/include/acl_selectors.php index 921a8275bb..c19a0f5d3f 100644 --- a/include/acl_selectors.php +++ b/include/acl_selectors.php @@ -41,6 +41,104 @@ function group_select($selname,$selclass,$preselected = false,$size = 4) { } +function contact_selector($selname, $selclass, $preselected = false, $options) { + + $a = get_app(); + + $mutual = false; + $networks = null; + $single = false; + + if($is_array($options)) { + if(x($options,'mutual_friends')) + $mutual = true; + if(x($options,'single')) + $single = true; + if(x($options,'multiple')) + $single = false; + if(x($options,'networks')) { + switch($options['networks']) { + case 'DFRN_ONLY': + $networks = array('dfrn'); + break; + case 'PRIVATE': + if(is_array($a->user) && $a->user['prvnets']) + $networks = array('dfrn','mail','dspr'); + else + $networks = array('dfrn','face','mail', 'dspr'); + break; + case 'TWO_WAY': + if(is_array($a->user) && $a->user['prvnets']) + $networks = array('dfrn','mail','dspr'); + else + $networks = array('dfrn','face','mail','dspr','stat'); + break; + default: + break; + } + } + } + + $x = array('options' => $options, 'single' => $single, 'mutual' => $mutual, 'networks' => $networks); + + call_hooks('contact_select_options', $x); + + $o = ''; + + $sql_extra = ''; + + if($x['mutual']) { + $sql_extra .= sprintf(" AND `rel` = %d ", intval(REL_BUD)); + } + + if(is_array($x['networks']) && count($x['networks'])) { + for($y = 0; $y < count($x['networks']) ; $y ++) + $x['networks'][$y] = "'" . dbesc($x['networks'][$y]) . "'"; + $str_nets = implode(',',$x['networks']); + $sql_extra .= " AND `network` IN ( $str_nets ) "; + } + + if($x['single']) + $o .= "\r\n"; + + $r = q("SELECT `id`, `name`, `url`, `network` FROM `contact` + WHERE `uid` = %d AND `self` = 0 AND `blocked` = 0 AND `pending` = 0 AND `notify` != '' + $sql_extra + ORDER BY `name` ASC ", + intval(local_user()) + ); + + + $arr = array('contact' => $r, 'entry' => $o); + + // e.g. 'network_pre_contact_deny', 'profile_pre_contact_allow' + + call_hooks($a->module . '_pre_' . $selname, $arr); + + if(count($r)) { + foreach($r as $rr) { + if((is_array($preselected)) && in_array($rr['id'], $preselected)) + $selected = " selected=\"selected\" "; + else + $selected = ''; + + $trimmed = mb_substr($rr['name'],0,20); + + $o .= "\r\n"; + } + + } + + $o .= "\r\n"; + + call_hooks($a->module . '_post_' . $selname, $o); + + return $o; +} + + function contact_select($selname, $selclass, $preselected = false, $size = 4, $privmail = false, $celeb = false, $privatenet = false) { @@ -106,6 +204,7 @@ function contact_select($selname, $selclass, $preselected = false, $size = 4, $p return $o; } + function fixacl(&$item) { $item = intval(str_replace(array('<','>'),array('',''),$item)); } From e320975d7313b4dc8ed1a21c2c94778c4d6b69f9 Mon Sep 17 00:00:00 2001 From: Friendika Date: Thu, 23 Jun 2011 22:23:26 -0700 Subject: [PATCH 11/89] bug #95 --- mod/dfrn_confirm.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mod/dfrn_confirm.php b/mod/dfrn_confirm.php index 7c11b78d59..e2094b1f31 100644 --- a/mod/dfrn_confirm.php +++ b/mod/dfrn_confirm.php @@ -507,7 +507,7 @@ function dfrn_confirm_post(&$a,$handsfree = null) { $local_uid = $r[0]['uid']; - if(! strstr($my_prvkey,'BEGIN RSA PRIVATE KEY')) { + if(! strstr($my_prvkey,'PRIVATE KEY')) { $message = t('Our site encryption key is apparently messed up.'); xml_status(3,$message); } From 39b5263e352b8763cfc421f287751b65becf1153 Mon Sep 17 00:00:00 2001 From: Friendika Date: Thu, 23 Jun 2011 23:23:44 -0700 Subject: [PATCH 12/89] added more "what to do if..." notes to INSTALL.txt --- INSTALL.txt | 86 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 86 insertions(+) diff --git a/INSTALL.txt b/INSTALL.txt index dfc08f1290..1ae41e0039 100644 --- a/INSTALL.txt +++ b/INSTALL.txt @@ -113,3 +113,89 @@ $a->config['system']['addon'] = 'js_upload,poormancron'; and save your changes. + + +##################################################################### + + If things don't work... + +##################################################################### + + +##################################################################### +- If you get the message + "System is currently unavailable. Please try again later" +##################################################################### + + Check your database settings. It usually means your database could not +be opened or accessed. + +##################################################################### +- 500 Internal Error +##################################################################### + + This could be the result of one of our Apache directives not being +supported by your version of Apache. Examine your apache server logs. + You might remove the line "Options -Indexes" from the .htaccess file if +you are using a Windows server as this has been known to cause problems. +Also check your file permissions. Your website and all contents must generally +be world-readable. + +##################################################################### +- 400 and 4xx "File not found" errors +##################################################################### + + First check your file permissions. Your website and all contents must +generally be world-readable. + + Ensure that mod-rewite is installed and working, and that your +.htaccess file is being used. To verify the latter, create a file test.out +containing the word "test" in the top directory of Friendika, make it world +readable and point your web browser to + +http://yoursitenamehere.com/test.out + + This file should be blocked. You should get a permission denied message. + + If you see the word "test" your Apache configuration is not allowing +your .htaccess file to be used (there are rules in this file to block access +to any file with .out at the end, as these are typically used for system logs). + + Make certain the .htaccess file exists and is readable by everybody, then +look for the existence of "AllowOverride None" in the Apache server +configuration for your site. This will need to be changed to +"AllowOverride All". + + If you do not see the word "test", your .htaccess is working, but it is +likely that mod-rewrite is not installed in your web server or is not working. + + On most flavour of Linux, + +% a2enmod rewrite +% /etc/init.d/apache2 restart + + Consult your hosting provider, experts on your particular Linux +distribution or (if Windows) the provider of your Apache server software if +you need to change either of these and can not figure out how. There is +a lot of help available on the web. Google "mod-rewrite" along with the +name of your operating system distribution or Apache package (if using +Windows). + + +##################################################################### +- If you are unable to write the file .htconfig.php during installation +due to permissions issues: +##################################################################### + + create an empty file with that name and give it world-write permission. +For Linux: + +% touch .htconfig.php +% chmod 777 .htconfig.php + +Retry the installation. As soon as the database has been created, + +******* this is important ********* + +% chmod 755 .htconfig.php + From 59d9070d13949d596d24524acaef9d35e8feba8c Mon Sep 17 00:00:00 2001 From: Friendika Date: Sat, 25 Jun 2011 19:10:38 -0700 Subject: [PATCH 13/89] suggestion template --- boot.php | 2 +- mod/dfrn_notify.php | 8 ++++---- view/atom_suggest.tpl | 10 ++++++++++ 3 files changed, 15 insertions(+), 5 deletions(-) create mode 100644 view/atom_suggest.tpl diff --git a/boot.php b/boot.php index d042ffdca6..9321b43c09 100644 --- a/boot.php +++ b/boot.php @@ -4,7 +4,7 @@ set_time_limit(0); ini_set('pcre.backtrack_limit', 250000); -define ( 'FRIENDIKA_VERSION', '2.2.1020' ); +define ( 'FRIENDIKA_VERSION', '2.2.1022' ); define ( 'DFRN_PROTOCOL_VERSION', '2.21' ); define ( 'DB_UPDATE_VERSION', 1067 ); diff --git a/mod/dfrn_notify.php b/mod/dfrn_notify.php index dd01722435..6cb4f69a0f 100644 --- a/mod/dfrn_notify.php +++ b/mod/dfrn_notify.php @@ -171,7 +171,7 @@ function dfrn_notify_post(&$a) { $r = q("SELECT * FROM `contact` WHERE `name` = '%s' AND `url` = '%s' AND `uid` = %d LIMIT 1", dbesc($fsugg['name']), - dbesc($fsuff['url']), + dbesc($fsugg['url']), intval($fsugg['uid']) ); if(count($r)) @@ -182,7 +182,7 @@ function dfrn_notify_post(&$a) { $fid = 0; $r = q("SELECT * FROM `fcontact` WHERE `url` = '%s' AND `name` = '%s' AND `photo` = '%s' LIMIT 1", dbesc($fsugg['url']), - dbesc($fsuff['name']), + dbesc($fsugg['name']), dbesc($fsugg['photo']) ); if(count($r)) { @@ -190,13 +190,13 @@ function dfrn_notify_post(&$a) { } if(! $fid) $r = q("INSERT INTO `fcontact` ( `name`,`url`,`photo` ) VALUES ( '%s', '%s', '%s' ) ", - dbesc($fsuff['name']), + dbesc($fsugg['name']), dbesc($fsugg['url']), dbesc($fsugg['photo']) ); $r = q("SELECT * FROM `fcontact` WHERE `url` = '%s' AND `name` = '%s' AND `photo` = '%s' LIMIT 1", dbesc($fsugg['url']), - dbesc($fsuff['name']), + dbesc($fsugg['name']), dbesc($fsugg['photo']) ); if(count($r)) { diff --git a/view/atom_suggest.tpl b/view/atom_suggest.tpl new file mode 100644 index 0000000000..8df011bfd3 --- /dev/null +++ b/view/atom_suggest.tpl @@ -0,0 +1,10 @@ + + + + $url + $name + $photo + $note + + + From c9604ef57839e16839e69aa23a21ed8921409343 Mon Sep 17 00:00:00 2001 From: Friendika Date: Sat, 25 Jun 2011 19:40:37 -0700 Subject: [PATCH 14/89] allow cross-site xrd/lrdd/webfinger --- include/hostxrd.php | 1 + mod/xrd.php | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/include/hostxrd.php b/include/hostxrd.php index 987175c331..7040f927d6 100644 --- a/include/hostxrd.php +++ b/include/hostxrd.php @@ -2,6 +2,7 @@ function hostxrd($baseurl) { + header('Access-Control-Allow-Origin: *'); header("Content-type: text/xml"); $tpl = file_get_contents('view/xrd_host.tpl'); echo str_replace('$domain',$baseurl,$tpl); diff --git a/mod/xrd.php b/mod/xrd.php index 8ac6ff7cfc..de0c20ea5d 100644 --- a/mod/xrd.php +++ b/mod/xrd.php @@ -24,7 +24,7 @@ function xrd_content(&$a) { $salmon_key = salmon_key($r[0]['spubkey']); - + header('Access-Control-Allow-Origin: *'); header("Content-type: text/xml"); $tpl = file_get_contents('view/xrd_person.tpl'); From 22e89220889759256b48323ee1a66257e2121ef7 Mon Sep 17 00:00:00 2001 From: Friendika Date: Sun, 26 Jun 2011 05:42:32 -0700 Subject: [PATCH 15/89] friend suggest structures, cont. --- boot.php | 2 +- database.sql | 2 ++ update.php | 9 +++++++-- 3 files changed, 10 insertions(+), 3 deletions(-) diff --git a/boot.php b/boot.php index 9321b43c09..5a7af9725b 100644 --- a/boot.php +++ b/boot.php @@ -6,7 +6,7 @@ ini_set('pcre.backtrack_limit', 250000); define ( 'FRIENDIKA_VERSION', '2.2.1022' ); define ( 'DFRN_PROTOCOL_VERSION', '2.21' ); -define ( 'DB_UPDATE_VERSION', 1067 ); +define ( 'DB_UPDATE_VERSION', 1068 ); define ( 'EOL', "
\r\n" ); define ( 'ATOM_TIME', 'Y-m-d\TH:i:s\Z' ); diff --git a/database.sql b/database.sql index b99796d830..7b70cfc644 100644 --- a/database.sql +++ b/database.sql @@ -514,6 +514,8 @@ CREATE TABLE IF NOT EXISTS `fcontact` ( CREATE TABLE IF NOT EXISTS `ffinder` ( `id` INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY , +`type` CHAR( 16 ) NOT NULL, +`note` TEXT NOT NULL, `uid` INT UNSIGNED NOT NULL , `cid` INT UNSIGNED NOT NULL , `fid` INT UNSIGNED NOT NULL diff --git a/update.php b/update.php index 13187ac511..409e5d48ef 100644 --- a/update.php +++ b/update.php @@ -1,6 +1,6 @@ Date: Sun, 26 Jun 2011 17:57:23 -0700 Subject: [PATCH 16/89] revisit friend suggestion structures --- .htaccess | 7 ++++--- INSTALL.txt | 8 +++++++- boot.php | 4 ++-- database.sql | 14 ++++++++++++-- update.php | 23 ++++++++++++++++++++++- 5 files changed, 47 insertions(+), 9 deletions(-) diff --git a/.htaccess b/.htaccess index 9cd6fa34c7..73031b962e 100644 --- a/.htaccess +++ b/.htaccess @@ -9,12 +9,13 @@ Deny from all RewriteEngine on -# RewriteRule api.* - [E=REMOTE_USER:%{HTTP:Authorization},L] - - # Protect repo directory from browsing + # Protect repository directory from browsing RewriteRule "(^|/)\.git" - [F] # Rewrite current-style URLs of the form 'index.php?q=x'. + # Also place auth information into REMOTE_USER for sites running + # in CGI mode. + RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ index.php?q=$1 [E=REMOTE_USER:%{HTTP:Authorization},L,QSA] diff --git a/INSTALL.txt b/INSTALL.txt index 1ae41e0039..dd4c747e2a 100644 --- a/INSTALL.txt +++ b/INSTALL.txt @@ -128,7 +128,8 @@ and save your changes. ##################################################################### Check your database settings. It usually means your database could not -be opened or accessed. +be opened or accessed. If the database resides on the same machine, check that +the database server name is "localhost". ##################################################################### - 500 Internal Error @@ -141,6 +142,11 @@ you are using a Windows server as this has been known to cause problems. Also check your file permissions. Your website and all contents must generally be world-readable. + It is likely that your web server reported the source of the problem in +its error log files. Please review these system error logs to determine what +caused the problem. Often this will need to be resolved with your hosting +provider or (if self-hosted) your web server configuration. + ##################################################################### - 400 and 4xx "File not found" errors ##################################################################### diff --git a/boot.php b/boot.php index 5a7af9725b..f2c9474011 100644 --- a/boot.php +++ b/boot.php @@ -4,9 +4,9 @@ set_time_limit(0); ini_set('pcre.backtrack_limit', 250000); -define ( 'FRIENDIKA_VERSION', '2.2.1022' ); +define ( 'FRIENDIKA_VERSION', '2.2.1023' ); define ( 'DFRN_PROTOCOL_VERSION', '2.21' ); -define ( 'DB_UPDATE_VERSION', 1068 ); +define ( 'DB_UPDATE_VERSION', 1069 ); define ( 'EOL', "
\r\n" ); define ( 'ATOM_TIME', 'Y-m-d\TH:i:s\Z' ); diff --git a/database.sql b/database.sql index 7b70cfc644..b33c0cdcb6 100644 --- a/database.sql +++ b/database.sql @@ -514,14 +514,24 @@ CREATE TABLE IF NOT EXISTS `fcontact` ( CREATE TABLE IF NOT EXISTS `ffinder` ( `id` INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY , -`type` CHAR( 16 ) NOT NULL, -`note` TEXT NOT NULL, `uid` INT UNSIGNED NOT NULL , `cid` INT UNSIGNED NOT NULL , `fid` INT UNSIGNED NOT NULL ) ENGINE = MYISAM DEFAULT CHARSET=utf8; +CREATE TABLE IF NOT EXISTS `fsuggest` ( +`id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY , +`uid` INT NOT NULL , +`cid` INT NOT NULL , +`name` CHAR( 255 ) NOT NULL , +`url` CHAR( 255 ) NOT NULL , +`photo` CHAR( 255 ) NOT NULL , +`note` TEXT NOT NULL , +`created` DATETIME NOT NULL +) ENGINE = MYISAM DEFAULT CHARSET=utf8; + + CREATE TABLE IF NOT EXISTS `mailacct` ( `id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY , `uid` INT NOT NULL, diff --git a/update.php b/update.php index 409e5d48ef..2e22b9d1cc 100644 --- a/update.php +++ b/update.php @@ -1,6 +1,6 @@ Date: Sun, 26 Jun 2011 19:30:57 -0700 Subject: [PATCH 17/89] pass notify endpoint with friend suggestions --- boot.php | 2 +- database.sql | 4 +++- include/notifier.php | 32 +++++++++++++++++++++++++++++++- mod/dfrn_notify.php | 14 ++++++++------ update.php | 7 +++++-- view/atom_suggest.tpl | 1 + 6 files changed, 49 insertions(+), 11 deletions(-) diff --git a/boot.php b/boot.php index f2c9474011..0bab002edd 100644 --- a/boot.php +++ b/boot.php @@ -6,7 +6,7 @@ ini_set('pcre.backtrack_limit', 250000); define ( 'FRIENDIKA_VERSION', '2.2.1023' ); define ( 'DFRN_PROTOCOL_VERSION', '2.21' ); -define ( 'DB_UPDATE_VERSION', 1069 ); +define ( 'DB_UPDATE_VERSION', 1070 ); define ( 'EOL', "
\r\n" ); define ( 'ATOM_TIME', 'Y-m-d\TH:i:s\Z' ); diff --git a/database.sql b/database.sql index b33c0cdcb6..df99ca7f6c 100644 --- a/database.sql +++ b/database.sql @@ -509,7 +509,8 @@ CREATE TABLE IF NOT EXISTS `fcontact` ( `id` INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY , `url` CHAR( 255 ) NOT NULL , `name` CHAR( 255 ) NOT NULL , -`photo` CHAR( 255 ) NOT NULL +`photo` CHAR( 255 ) NOT NULL , +`request` CHAR( 255 ) NOT NULL ) ENGINE = MYISAM DEFAULT CHARSET=utf8; CREATE TABLE IF NOT EXISTS `ffinder` ( @@ -526,6 +527,7 @@ CREATE TABLE IF NOT EXISTS `fsuggest` ( `cid` INT 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 diff --git a/include/notifier.php b/include/notifier.php index 842e110809..d9f9038533 100644 --- a/include/notifier.php +++ b/include/notifier.php @@ -71,6 +71,16 @@ function notifier_run($argv, $argc){ if(! count($items)) return; } + elseif($cmd === 'suggest') { + $suggest = q("SELECT * FROM `fsuggest` WHERE `id` = %d LIMIT 1", + intval($item_id) + ); + if(! count($suggest)) + return; + $uid = $suggest[0]['uid']; + $recipients[] = $suggest[0]['cid']; + $item = $suggest[0]; + } else { // find ancestors @@ -126,7 +136,7 @@ function notifier_run($argv, $argc){ // fill this in with a single salmon slap if applicable $slap = ''; - if($cmd != 'mail') { + if($cmd != 'mail' && $cmd != 'suggest') { require_once('include/group.php'); @@ -236,6 +246,26 @@ function notifier_run($argv, $argc){ '$parent_id' => xmlify($item['parent-uri']) )); } + elseif($cmd === 'suggest') { + $notify_hub = false; // suggestions are not public + + $sugg_template = get_markup_template('atom_suggest.tpl'); + + $atom .= replace_macros($sugg_template, array( + '$name' => xmlify($item['name']), + '$url' => xmlify($item['url']), + '$photo' => xmlify($item['photo']), + '$request' => xmlify($item['request']), + '$note' => xmlify($item['note']) + )); + + // We don't need this any more + + q("DELETE FROM `fsuggest` WHERE `id` = %d LIMIT 1", + intval($item['id']) + ); + + } else { if($followup) { foreach($items as $item) { // there is only one item diff --git a/mod/dfrn_notify.php b/mod/dfrn_notify.php index 6cb4f69a0f..31314da7b2 100644 --- a/mod/dfrn_notify.php +++ b/mod/dfrn_notify.php @@ -165,6 +165,7 @@ function dfrn_notify_post(&$a) { $fsugg['name'] = notags(unxmlify($base['name'][0]['data'])); $fsugg['photo'] = notags(unxmlify($base['photo'][0]['data'])); $fsugg['url'] = notags(unxmlify($base['url'][0]['data'])); + $fsugg['request'] = notags(unxmlify($base['request'][0]['data'])); $fsugg['body'] = escape_tags(unxmlify($base['note'][0]['data'])); // Does our member already have a friend matching this description? @@ -180,24 +181,25 @@ function dfrn_notify_post(&$a) { // Do we already have an fcontact record for this person? $fid = 0; - $r = q("SELECT * FROM `fcontact` WHERE `url` = '%s' AND `name` = '%s' AND `photo` = '%s' LIMIT 1", + $r = q("SELECT * FROM `fcontact` WHERE `url` = '%s' AND `name` = '%s' AND `request` = '%s' LIMIT 1", dbesc($fsugg['url']), dbesc($fsugg['name']), - dbesc($fsugg['photo']) + dbesc($fsugg['request']) ); if(count($r)) { $fid = $r[0]['id']; } if(! $fid) - $r = q("INSERT INTO `fcontact` ( `name`,`url`,`photo` ) VALUES ( '%s', '%s', '%s' ) ", + $r = q("INSERT INTO `fcontact` ( `name`,`url`,`photo`,`request` ) VALUES ( '%s', '%s', '%s', '%s' ) ", dbesc($fsugg['name']), dbesc($fsugg['url']), - dbesc($fsugg['photo']) + dbesc($fsugg['photo']), + dbesc($fsugg['request']) ); - $r = q("SELECT * FROM `fcontact` WHERE `url` = '%s' AND `name` = '%s' AND `photo` = '%s' LIMIT 1", + $r = q("SELECT * FROM `fcontact` WHERE `url` = '%s' AND `name` = '%s' AND `request` = '%s' LIMIT 1", dbesc($fsugg['url']), dbesc($fsugg['name']), - dbesc($fsugg['photo']) + dbesc($fsugg['request']) ); if(count($r)) { $fid = $r[0]['id']; diff --git a/update.php b/update.php index 2e22b9d1cc..ce8c694cab 100644 --- a/update.php +++ b/update.php @@ -1,6 +1,6 @@ $url $name $photo + $request $note From 23f00aaab42a39905c74d06a3864719214122a1f Mon Sep 17 00:00:00 2001 From: Friendika Date: Sun, 26 Jun 2011 21:55:24 -0700 Subject: [PATCH 18/89] recipient ui, friend suggestions --- mod/notifications.php | 55 +++++++++++++++++++++++++++++++++---------- view/intros.tpl | 2 +- view/suggestions.tpl | 20 ++++++++++++++++ 3 files changed, 64 insertions(+), 13 deletions(-) create mode 100644 view/suggestions.tpl diff --git a/mod/notifications.php b/mod/notifications.php index a3339199ef..90f62fa476 100644 --- a/mod/notifications.php +++ b/mod/notifications.php @@ -13,11 +13,9 @@ function notifications_post(&$a) { if($request_id) { - $r = q("SELECT * FROM `intro` - WHERE `id` = %d - AND `uid` = %d LIMIT 1", - intval($request_id), - intval(local_user()) + $r = q("SELECT * FROM `intro` WHERE `id` = %d AND `uid` = %d LIMIT 1", + intval($request_id), + intval(local_user()) ); if(count($r)) { @@ -28,14 +26,22 @@ function notifications_post(&$a) { notice( t('Invalid request identifier.') . EOL); return; } + + // If it is a friend suggestion, the contact is not a new friend but an existing friend + // that should not be deleted. + + $fid = $r[0]['fid']; + if($_POST['submit'] == t('Discard')) { $r = q("DELETE FROM `intro` WHERE `id` = %d LIMIT 1", intval($intro_id) ); - $r = q("DELETE FROM `contact` WHERE `id` = %d AND `uid` = %d AND `self` = 0 LIMIT 1", - intval($contact_id), - intval(local_user()) - ); + if(! $fid) { + $r = q("DELETE FROM `contact` WHERE `id` = %d AND `uid` = %d AND `self` = 0 LIMIT 1", + intval($contact_id), + intval(local_user()) + ); + } return; } if($_POST['submit'] == t('Ignore')) { @@ -81,18 +87,41 @@ function notifications_content(&$a) { $a->set_pager_itemspage(20); } - $r = q("SELECT `intro`.`id` AS `intro_id`, `intro`.*, `contact`.* - FROM `intro` LEFT JOIN `contact` ON `intro`.`contact-id` = `contact`.`id` + $r = q("SELECT `intro`.`id` AS `intro_id`, `intro`.*, `contact`.*, `fcontact`.`name` AS `fname`,`fcontact`.`url` AS `furl`,`fcontact`.`photo` AS `fphoto`,`fcontact`.`request` AS `frequest` + FROM `intro` LEFT JOIN `contact` ON `contact`.`id` = `intro`.`contact-id` LEFT JOIN `fcontact` ON `intro`.`fid` = `fcontact`.`id` WHERE `intro`.`uid` = %d $sql_extra AND `intro`.`blocked` = 0 ", intval($_SESSION['uid'])); if(($r !== false) && (count($r))) { - + $sugg = get_markup_template('suggestions.tpl'); $tpl = get_markup_template("intros.tpl"); foreach($r as $rr) { + if($rr['fid']) { + $return_addr = bin2hex($a->user['nickname'] . '@' . $a->get_hostname() . (($a->path) ? '/' . $a->path : '')); + $o .= replace_macros($sugg,array( + '$str_notifytype' => t('Notification type: '), + '$notify_type' => t('Friend Suggestion'), + '$intro_id' => $rr['intro_id'], + '$madeby' => sprintf( t('suggested by %s'),$rr['name']), + '$contact_id' => $rr['contact-id'], + '$photo' => ((x($rr,'fphoto')) ? $rr['fphoto'] : "images/default-profile.jpg"), + '$fullname' => $rr['fname'], + '$url' => $rr['furl'], + '$knowyou' => $knowyou, + '$approve' => t('Approve'), + '$note' => $rr['note'], + '$request' => $rr['frequest'] . '?addr=' . $return_addr, + '$ignore' => t('Ignore'), + '$discard' => t('Discard') + + )); + + continue; + + } $friend_selected = (($rr['network'] !== 'stat') ? ' checked="checked" ' : ' disabled '); $fan_selected = (($rr['network'] === 'stat') ? ' checked="checked" disabled ' : ''); $dfrn_tpl = get_markup_template('netfriend.tpl'); @@ -138,6 +167,7 @@ function notifications_content(&$a) { else info( t('No notifications.') . EOL); +/* if ($a->config['register_policy'] == REGISTER_APPROVE && $a->config['admin_email'] === $a->user['email']){ $o .= '

' . t('User registrations waiting for confirm') . '

' . "\r\n"; @@ -159,6 +189,7 @@ function notifications_content(&$a) { info( t('No registrations.') . EOL); } +*/ $o .= paginate($a); return $o; diff --git a/view/intros.tpl b/view/intros.tpl index 4534f21916..d52c3a7aac 100644 --- a/view/intros.tpl +++ b/view/intros.tpl @@ -3,7 +3,7 @@

$str_notifytype $notify_type

$fullname
-fullname +$fullname
$knowyou
$note
diff --git a/view/suggestions.tpl b/view/suggestions.tpl new file mode 100644 index 0000000000..46c9277546 --- /dev/null +++ b/view/suggestions.tpl @@ -0,0 +1,20 @@ + +
+ +

$str_notifytype $notify_type

+
$madeby
+
$fullname
+$fullname +
$note
+
+
+ + +
+
+ +
+ +
+
+
From c410c9013c062a9a4fce1f887572a1b1c951afbe Mon Sep 17 00:00:00 2001 From: Friendika Date: Sun, 26 Jun 2011 22:57:08 -0700 Subject: [PATCH 19/89] friend suggestions --- mod/contacts.php | 5 ++ mod/fsuggest.php | 114 ++++++++++++++++++++++++++++++++++++++++++ view/contact_edit.tpl | 1 + 3 files changed, 120 insertions(+) create mode 100644 mod/fsuggest.php diff --git a/mod/contacts.php b/mod/contacts.php index e7a800500b..444e6dec4c 100644 --- a/mod/contacts.php +++ b/mod/contacts.php @@ -268,6 +268,10 @@ function contacts_content(&$a) { if($r[0]['last-update'] !== '0000-00-00 00:00:00') $last_update .= ' ' . (($r[0]['last-update'] == $r[0]['success_update']) ? t("\x28Update was successful\x29") : t("\x28Update was not successful\x29")); + $lblsuggest = (($r[0]['network'] === NETWORK_DFRN) + ? '' : ''); + + $o .= replace_macros($tpl,array( '$header' => t('Contact Editor'), '$submit' => t('Submit'), @@ -284,6 +288,7 @@ function contacts_content(&$a) { '$altcrepair' => t('Repair contact URL settings'), '$lblcrepair' => t("Repair contact URL settings \x28WARNING: Advanced\x29"), '$lblrecent' => t('View conversations'), + '$lblsuggest' => $lblsuggest, '$grps' => $grps, '$delete' => t('Delete contact'), '$poll_interval' => contact_poll_interval($r[0]['priority']), diff --git a/mod/fsuggest.php b/mod/fsuggest.php new file mode 100644 index 0000000000..29fb79cfb1 --- /dev/null +++ b/mod/fsuggest.php @@ -0,0 +1,114 @@ +argc != 2) + return; + + $contact_id = intval($a->argv[1]); + + $r = q("SELECT * FROM `contact` WHERE `id` = %d AND `uid` = %d LIMIT 1", + intval($contact_id), + intval(local_user()) + ); + if(! count($r)) { + notice( t('Contact not found.') . EOL); + return; + } + $contact = $r[0]; + + $new_contact = intval($_POST['suggest']); + + $hash = random_string(); + + $note = escape_tags(trim($_POST['note'])); + + if($new_contact) { + $r = q("SELECT * FROM `contact` WHERE `id` = %d AND `uid` = %d LIMIT 1", + intval($new_contact), + intval(local_user()) + ); + if(count($r)) { + + $x = q("INSERT INTO `fsuggest` ( `uid`,`cid`,`name`,`url`,`request`,`photo`,`note`,`created`) + VALUES ( %d, %d, '%s','%s','%s','%s','%s','%s')", + intval(local_user()), + intval($contact_id), + dbesc($r[0]['name']), + dbesc($r[0]['url']), + dbesc($r[0]['request']), + dbesc($r[0]['photo']), + dbesc($hash), + dbesc(datetime_convert()) + ); + $r = q("SELECT `id` FROM `fsuggest` WHERE `note` = '%s' AND `uid` = %d LIMIT 1", + dbesc($hash), + intval(local_user()) + ); + if(count($r)) { + $fsuggest_id = $r[0]['id']; + q("UPDATE `fsuggest` SET `note` = '%s' WHERE `id` = %d AND `uid` = %d LIMIT 1", + dbesc($note), + intval($fsuggest_id), + intval(local_user()) + ); + proc_run('php', 'include/notifier.php', 'suggest' , $fsuggest_id); + } + + info( t('Friend suggestion sent.') . EOL); + } + + } + + +} + + + +function fsuggest_content(&$a) { + + require_once('include/acl_selectors.php'); + + if(! local_user()) { + notice( t('Permission denied.') . EOL); + return; + } + + if($a->argc != 2) + return; + + $contact_id = intval($a->argv[1]); + + $r = q("SELECT * FROM `contact` WHERE `id` = %d AND `uid` = %d LIMIT 1", + intval($contact_id), + intval(local_user()) + ); + if(! count($r)) { + notice( t('Contact not found.') . EOL); + return; + } + $contact = $r[0]; + + + + + $o = '

' . t('Suggest Friends') . '

'; + + $o .= sprintf( t('Suggest a friend for %s'), $contact['name']); + + $o .= '
'; + + // TODO: selector should have an option to ignore the recipient + $o .= contact_select('suggest','suggest-select', $preselect, 4, true); + + + $o .= ''; + $o .= '
'; + + return $o; +} \ No newline at end of file diff --git a/view/contact_edit.tpl b/view/contact_edit.tpl index 3246e44703..66479210ff 100644 --- a/view/contact_edit.tpl +++ b/view/contact_edit.tpl @@ -45,6 +45,7 @@ $ignored $grps +$lblsuggest

$lbl_info1

From 06a4c0f703d64cae1e72c2901742e3c101623a7b Mon Sep 17 00:00:00 2001 From: Friendika Date: Mon, 27 Jun 2011 03:03:58 -0700 Subject: [PATCH 20/89] ignore current contact on friend suggestion picker --- include/acl_selectors.php | 19 +++++++++++++++---- mod/fsuggest.php | 4 ++-- 2 files changed, 17 insertions(+), 6 deletions(-) diff --git a/include/acl_selectors.php b/include/acl_selectors.php index c19a0f5d3f..c3e26082e3 100644 --- a/include/acl_selectors.php +++ b/include/acl_selectors.php @@ -48,14 +48,22 @@ function contact_selector($selname, $selclass, $preselected = false, $options) { $mutual = false; $networks = null; $single = false; + $exclude = false; + $size = 4; + + if(is_array($options)) { + if(x($options,'size')) + $size = $options['size']; - if($is_array($options)) { if(x($options,'mutual_friends')) $mutual = true; if(x($options,'single')) $single = true; if(x($options,'multiple')) $single = false; + if(x($options,'exclude')) + $exclude = $options['exclude']; + if(x($options,'networks')) { switch($options['networks']) { case 'DFRN_ONLY': @@ -79,7 +87,7 @@ function contact_selector($selname, $selclass, $preselected = false, $options) { } } - $x = array('options' => $options, 'single' => $single, 'mutual' => $mutual, 'networks' => $networks); + $x = array('options' => $options, 'size' => $size, 'single' => $single, 'mutual' => $mutual, 'exclude' => $exclude, 'networks' => $networks); call_hooks('contact_select_options', $x); @@ -91,6 +99,9 @@ function contact_selector($selname, $selclass, $preselected = false, $options) { $sql_extra .= sprintf(" AND `rel` = %d ", intval(REL_BUD)); } + if(intval($x['exclude'])) + $sql_extra .= sprintf(" AND `id` != %d ", intval($x['exclude'])); + if(is_array($x['networks']) && count($x['networks'])) { for($y = 0; $y < count($x['networks']) ; $y ++) $x['networks'][$y] = "'" . dbesc($x['networks'][$y]) . "'"; @@ -99,9 +110,9 @@ function contact_selector($selname, $selclass, $preselected = false, $options) { } if($x['single']) - $o .= "\r\n"; else - $o .= "\r\n"; $r = q("SELECT `id`, `name`, `url`, `network` FROM `contact` WHERE `uid` = %d AND `self` = 0 AND `blocked` = 0 AND `pending` = 0 AND `notify` != '' diff --git a/mod/fsuggest.php b/mod/fsuggest.php index 29fb79cfb1..dc95fb8e16 100644 --- a/mod/fsuggest.php +++ b/mod/fsuggest.php @@ -103,8 +103,8 @@ function fsuggest_content(&$a) { $o .= '
'; - // TODO: selector should have an option to ignore the recipient - $o .= contact_select('suggest','suggest-select', $preselect, 4, true); + $o .= contact_selector('suggest','suggest-select', false, + array('size' => 4, 'exclude' => $contact_id, 'networks' => 'DFRN_ONLY', 'single' => true)); $o .= ''; From 14c002d7a4b96c8b1cbabec30614af4fe7b22d5a Mon Sep 17 00:00:00 2001 From: Friendika Date: Mon, 27 Jun 2011 03:09:45 -0700 Subject: [PATCH 21/89] make friend suggest themeable --- mod/fsuggest.php | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/mod/fsuggest.php b/mod/fsuggest.php index dc95fb8e16..5044be72de 100644 --- a/mod/fsuggest.php +++ b/mod/fsuggest.php @@ -94,20 +94,17 @@ function fsuggest_content(&$a) { } $contact = $r[0]; - - - $o = '

' . t('Suggest Friends') . '

'; - $o .= sprintf( t('Suggest a friend for %s'), $contact['name']); + $o .= '
' . sprintf( t('Suggest a friend for %s'), $contact['name']) . '
'; - $o .= ''; + $o .= ''; $o .= contact_selector('suggest','suggest-select', false, array('size' => 4, 'exclude' => $contact_id, 'networks' => 'DFRN_ONLY', 'single' => true)); - $o .= ''; + $o .= ''; $o .= ''; return $o; From 1947b74e5bd92f11a3e8af2223826e649233a883 Mon Sep 17 00:00:00 2001 From: Friendika Date: Mon, 27 Jun 2011 16:18:06 -0700 Subject: [PATCH 22/89] some basic margins for friend suggestion screen --- boot.php | 2 +- mod/fsuggest.php | 2 +- view/theme/duepuntozero/style.css | 5 +++++ view/theme/loozah/style.css | 7 +++++++ 4 files changed, 14 insertions(+), 2 deletions(-) diff --git a/boot.php b/boot.php index 0bab002edd..7419ddff99 100644 --- a/boot.php +++ b/boot.php @@ -4,7 +4,7 @@ set_time_limit(0); ini_set('pcre.backtrack_limit', 250000); -define ( 'FRIENDIKA_VERSION', '2.2.1023' ); +define ( 'FRIENDIKA_VERSION', '2.2.1024' ); define ( 'DFRN_PROTOCOL_VERSION', '2.21' ); define ( 'DB_UPDATE_VERSION', 1070 ); diff --git a/mod/fsuggest.php b/mod/fsuggest.php index 5044be72de..9ef8f4c551 100644 --- a/mod/fsuggest.php +++ b/mod/fsuggest.php @@ -104,7 +104,7 @@ function fsuggest_content(&$a) { array('size' => 4, 'exclude' => $contact_id, 'networks' => 'DFRN_ONLY', 'single' => true)); - $o .= ''; + $o .= '
'; $o .= ''; return $o; diff --git a/view/theme/duepuntozero/style.css b/view/theme/duepuntozero/style.css index c6ce8ea2cb..6e771634a9 100644 --- a/view/theme/duepuntozero/style.css +++ b/view/theme/duepuntozero/style.css @@ -881,6 +881,11 @@ input#dfrn-url { clear: both; } +#fsuggest-desc, #fsuggest-submit-wrapper { + margin-top: 15px; + margin-bottom: 15px; +} + .wall-item-content-wrapper { margin-top: 10px; border: 1px solid #CCC; diff --git a/view/theme/loozah/style.css b/view/theme/loozah/style.css index 98ab96d2b1..c68e38b68e 100644 --- a/view/theme/loozah/style.css +++ b/view/theme/loozah/style.css @@ -997,6 +997,13 @@ input#dfrn-url { clear: both; } + +#fsuggest-desc, #fsuggest-submit-wrapper { + margin-top: 15px; + margin-bottom: 15px; +} + + .wall-item-content-wrapper { margin-top: 10px; border: 1px solid #CCC; From 29c57f7ad27f91c78317ef9c44543d6b3f169302 Mon Sep 17 00:00:00 2001 From: Friendika Date: Mon, 27 Jun 2011 17:18:13 -0700 Subject: [PATCH 23/89] don't load configs if no database. --- index.php | 36 ++++++++++++++++++------------------ 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/index.php b/index.php index 9bca1527bf..a58e4730fa 100644 --- a/index.php +++ b/index.php @@ -44,18 +44,26 @@ $db = new dba($db_host, $db_user, $db_pass, $db_data, $install); unset($db_host, $db_user, $db_pass, $db_data); -/** - * Load configs from db. Overwrite configs from .htconfig.php - */ -$r = q("SELECT * FROM `config` WHERE `cat` IN ('system', 'config')"); -foreach ($r as $c) { - if ($c['cat']=='config') { - $a->config[$c['k']] = $c['v']; - } else { - $a->config[$c['cat']][$c['k']] = $c['v']; +if(! $install) { + + /** + * Load configs from db. Overwrite configs from .htconfig.php + */ + + $r = q("SELECT * FROM `config` WHERE `cat` IN ('system', 'config')"); + foreach ($r as $c) { + if ($c['cat']=='config') { + $a->config[$c['k']] = $c['v']; + } else { + $a->config[$c['cat']][$c['k']] = $c['v']; + } } + unset($r); + + require_once("session.php"); + load_hooks(); + call_hooks('init_1'); } -unset($r); /** @@ -70,14 +78,6 @@ unset($r); * */ -if(! $install) { - require_once("session.php"); - load_hooks(); - call_hooks('init_1'); -} - - - require_once("datetime.php"); $a->timezone = (($default_timezone) ? $default_timezone : 'UTC'); From 4418cb4349341064690cfbe6d4f26542cf108203 Mon Sep 17 00:00:00 2001 From: Friendika Date: Mon, 27 Jun 2011 18:13:44 -0700 Subject: [PATCH 24/89] preformat webfinger output --- mod/webfinger.php | 2 ++ 1 file changed, 2 insertions(+) diff --git a/mod/webfinger.php b/mod/webfinger.php index dd6d72a13c..5ef29e43f1 100644 --- a/mod/webfinger.php +++ b/mod/webfinger.php @@ -18,7 +18,9 @@ function webfinger_content(&$a) { $res = webfinger($addr); else $res = lrdd($addr); + $o .= '
';
 		$o .= str_replace("\n",'
',print_r($res,true)); + $o .= '
'; } return $o; } \ No newline at end of file From 932397b47be25b042907ab888e3abcb51cbb84b2 Mon Sep 17 00:00:00 2001 From: Friendika Date: Mon, 27 Jun 2011 19:47:55 -0700 Subject: [PATCH 25/89] trim webfinger request --- boot.php | 2 ++ mod/webfinger.php | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/boot.php b/boot.php index 7419ddff99..5f4820b4f1 100644 --- a/boot.php +++ b/boot.php @@ -1685,8 +1685,10 @@ function fetch_lrdd_template($host) { $url1 = 'https://' . $host . '/.well-known/host-meta' ; $url2 = 'http://' . $host . '/.well-known/host-meta' ; $links = fetch_xrd_links($url1); + logger('fetch_lrdd_template from: ' . $url1); logger('template (https): ' . print_r($links,true)); if(! count($links)) { + logger('fetch_lrdd_template from: ' . $url2); $links = fetch_xrd_links($url2); logger('template (http): ' . print_r($links,true)); } diff --git a/mod/webfinger.php b/mod/webfinger.php index 5ef29e43f1..f6d6026b40 100644 --- a/mod/webfinger.php +++ b/mod/webfinger.php @@ -13,7 +13,7 @@ function webfinger_content(&$a) { $o .= '

'; if(x($_GET,'addr')) { - $addr = $_GET['addr']; + $addr = trim($_GET['addr']); if(strpos($addr,'@' !== false)) $res = webfinger($addr); else From 390fd8e74a9ed1fd25ac2093c18273769675a7da Mon Sep 17 00:00:00 2001 From: "Abinoam P. Marques Jr." Date: Mon, 27 Jun 2011 20:51:33 -0700 Subject: [PATCH 26/89] Fixed: Twitter profiles link. --- include/Scrape.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/include/Scrape.php b/include/Scrape.php index 505d2bf99e..553bd529b2 100644 --- a/include/Scrape.php +++ b/include/Scrape.php @@ -423,7 +423,7 @@ function probe_url($url) { $poll = $tapi . '?user_id=' . $tid; else $poll = $tapi . '?screen_name=' . $tid; - $profile = 'http://twitter.com/!#/' . $tid; + $profile = 'http://twitter.com/#!/' . $tid; } if(! x($vcard,'fn')) From 399c5aed1e3eb66565b1f821bec9e4889b386ee1 Mon Sep 17 00:00:00 2001 From: Tobias Diekershoff Date: Tue, 28 Jun 2011 13:03:19 +0200 Subject: [PATCH 27/89] added deleteCheckedItems to jot-header.tpl --- view/theme/dispy/jot-header.tpl | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/view/theme/dispy/jot-header.tpl b/view/theme/dispy/jot-header.tpl index aa9e0bfafc..3c70473ba5 100644 --- a/view/theme/dispy/jot-header.tpl +++ b/view/theme/dispy/jot-header.tpl @@ -110,6 +110,24 @@ tinyMCE.init({ }); + function deleteCheckedItems() { + var checkedstr = ''; + + $('.item-select').each( function() { + if($(this).is(':checked')) { + if(checkedstr.length != 0) { + checkedstr = checkedstr + ',' + $(this).val(); + } + else { + checkedstr = $(this).val(); + } + } + }); + $.post('item', { dropitems: checkedstr }, function(data) { + window.location.reload(); + }); + } + function jotGetLink() { reply = prompt("$linkurl"); if(reply && reply.length) { From 4ca6a9a38257a8f8c82842ce734ae946b90ebb4c Mon Sep 17 00:00:00 2001 From: Friendika Date: Tue, 28 Jun 2011 18:59:41 -0700 Subject: [PATCH 28/89] dbg info for photo uploads --- boot.php | 2 +- mod/photos.php | 11 +++++++++++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/boot.php b/boot.php index 5f4820b4f1..54206d7fe4 100644 --- a/boot.php +++ b/boot.php @@ -4,7 +4,7 @@ set_time_limit(0); ini_set('pcre.backtrack_limit', 250000); -define ( 'FRIENDIKA_VERSION', '2.2.1024' ); +define ( 'FRIENDIKA_VERSION', '2.2.1025' ); define ( 'DFRN_PROTOCOL_VERSION', '2.21' ); define ( 'DB_UPDATE_VERSION', 1070 ); diff --git a/mod/photos.php b/mod/photos.php index bbdb8b7e9e..28ed609b58 100644 --- a/mod/photos.php +++ b/mod/photos.php @@ -590,6 +590,9 @@ function photos_post(&$a) { $filesize = intval($_FILES['userfile']['size']); } + + logger('photos: upload: received file: ' . $filename . ' as ' . $src . ' ' . $filesize . ' bytes', LOGGER_DEBUG); + $maximagesize = get_config('system','maximagesize'); if(($maximagesize) && ($filesize > $maximagesize)) { @@ -600,6 +603,14 @@ function photos_post(&$a) { return; } + if(! $filesize) { + notice( t('Image file is empty.') . EOL); + @unlink($src); + $foo = 0; + call_hooks('photo_post_end',$foo); + return; + } + logger('mod/photos.php: photos_post(): loading the contents of ' . $src , 'LOGGER_DEBUG'); $imagedata = @file_get_contents($src); From 60caa0349416dad1a3a891e3c0e00d33d25d7a91 Mon Sep 17 00:00:00 2001 From: Friendika Date: Tue, 28 Jun 2011 19:08:13 -0700 Subject: [PATCH 29/89] darkzero textareas hard to read --- view/theme/darkzero/style.css | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/view/theme/darkzero/style.css b/view/theme/darkzero/style.css index c92529f266..3459e74092 100644 --- a/view/theme/darkzero/style.css +++ b/view/theme/darkzero/style.css @@ -7,7 +7,7 @@ a:hover {text-decoration: underline; } input, select, textarea { background-color: #222222; - color: #FFFFFF; + color: #FFFFFF !important; border: 1px solid #444444; } .openid { background-color: #222222;} From 0b221e8945ae785dc706d8ea9a9e8e25532c0096 Mon Sep 17 00:00:00 2001 From: Friendika Date: Tue, 28 Jun 2011 21:11:52 -0700 Subject: [PATCH 30/89] bug #96 move libraries to library - better alignment of like rotator --- include/Scrape.php | 2 +- include/expire.php | 6 +++--- include/items.php | 2 +- include/poller.php | 6 +++--- include/salmon.php | 4 ++-- {cropper => library/cropper}/cropper.css | 0 {cropper => library/cropper}/cropper.html | 0 {cropper => library/cropper}/cropper.js | 0 .../cropper}/cropper.uncompressed.js | 0 {cropper => library/cropper}/lib/builder.js | 0 {cropper => library/cropper}/lib/controls.js | 0 {cropper => library/cropper}/lib/dragdrop.js | 0 {cropper => library/cropper}/lib/effects.js | 0 {cropper => library/cropper}/lib/prototype.js | 0 {cropper => library/cropper}/lib/scriptaculous.js | 0 {cropper => library/cropper}/lib/slider.js | 0 {cropper => library/cropper}/lib/unittest.js | 0 {cropper => library/cropper}/licence.txt | 0 {cropper => library/cropper}/marqueeHoriz.gif | Bin {cropper => library/cropper}/marqueeVert.gif | Bin {cropper => library/cropper}/tests/castle.jpg | Bin {cropper => library/cropper}/tests/castleMed.jpg | Bin .../cropper}/tests/example-Basic.htm | 0 .../cropper}/tests/example-CSS-Absolute.htm | 0 .../cropper}/tests/example-CSS-Float.htm | 0 .../cropper}/tests/example-CSS-Relative.htm | 0 .../cropper}/tests/example-CoordsOnLoad.htm | 0 .../tests/example-CoordsOnLoadWithRatio.htm | 0 .../cropper}/tests/example-Dimensions.htm | 0 .../cropper}/tests/example-DynamicImage.htm | 0 .../cropper}/tests/example-FixedRatio.htm | 0 .../cropper}/tests/example-MinimumDimensions.htm | 0 .../cropper}/tests/example-MinimumWidth.htm | 0 .../cropper}/tests/example-Preview.htm | 0 {cropper => library/cropper}/tests/poppy.jpg | Bin .../cropper}/tests/staticHTMLStructure.htm | 0 {phpsec => library/phpsec}/Crypt/AES.php | 0 {phpsec => library/phpsec}/Crypt/DES.php | 0 {phpsec => library/phpsec}/Crypt/Hash.php | 0 {phpsec => library/phpsec}/Crypt/RC4.php | 0 {phpsec => library/phpsec}/Crypt/RSA.php | 0 {phpsec => library/phpsec}/Crypt/Random.php | 0 {phpsec => library/phpsec}/Crypt/Rijndael.php | 0 {phpsec => library/phpsec}/Crypt/TripleDES.php | 0 {phpsec => library/phpsec}/Math/BigInteger.php | 0 {phpsec => library/phpsec}/Net/SFTP.php | 0 {phpsec => library/phpsec}/Net/SSH1.php | 0 {phpsec => library/phpsec}/Net/SSH2.php | 0 .../phpsec}/PHP/Compat/Function/array_fill.php | 0 .../phpsec}/PHP/Compat/Function/bcpowmod.php | 0 .../phpsec}/PHP/Compat/Function/str_split.php | 0 {phpsec => library/phpsec}/crypt.html | 0 {phpsec => library/phpsec}/docbook.css | 0 {phpsec => library/phpsec}/index.html | 0 {phpsec => library/phpsec}/intro.html | 0 {phpsec => library/phpsec}/math.html | 0 {phpsec => library/phpsec}/misc_crypt.html | 0 {phpsec => library/phpsec}/net.html | 0 {phpsec => library/phpsec}/sym_crypt.html | 0 {simplepie => library/simplepie}/LICENSE.txt | 0 {simplepie => library/simplepie}/README.markdown | 0 .../compatibility_test/COMPATIBILITY README.txt | 0 .../compatibility_test/sp_compatibility_test.php | 0 {simplepie => library/simplepie}/create.php | 0 {simplepie => library/simplepie}/db.sql | 0 {simplepie => library/simplepie}/demo/cli_test.php | 0 .../demo/for_the_demo/alternate_favicon.png | Bin .../demo/for_the_demo/background_blockquote.png | Bin .../demo/for_the_demo/background_menuitem.gif | Bin .../demo/for_the_demo/background_menuitem_off.gif | Bin .../for_the_demo/background_menuitem_shadow.gif | Bin .../demo/for_the_demo/favicons/alternate.png | Bin .../demo/for_the_demo/favicons/blinklist.png | Bin .../demo/for_the_demo/favicons/blogmarks.png | Bin .../demo/for_the_demo/favicons/delicious.png | Bin .../simplepie}/demo/for_the_demo/favicons/digg.png | Bin .../demo/for_the_demo/favicons/magnolia.png | Bin .../demo/for_the_demo/favicons/myweb2.png | Bin .../demo/for_the_demo/favicons/newsvine.png | Bin .../demo/for_the_demo/favicons/reddit.png | Bin .../demo/for_the_demo/favicons/segnalo.png | Bin .../simplepie}/demo/for_the_demo/favicons/simpy.png | Bin .../simplepie}/demo/for_the_demo/favicons/spurl.png | Bin .../demo/for_the_demo/favicons/technorati.png | Bin .../simplepie}/demo/for_the_demo/favicons/wists.png | Bin .../simplepie}/demo/for_the_demo/feed.png | Bin .../demo/for_the_demo/logo_simplepie_demo.png | Bin .../demo/for_the_demo/lucida-grande-bold.swf | Bin .../simplepie}/demo/for_the_demo/mediaplayer.swf | Bin .../demo/for_the_demo/mediaplayer_readme.htm | 0 .../simplepie}/demo/for_the_demo/mini_podcast.png | Bin .../simplepie}/demo/for_the_demo/place_audio.png | Bin .../simplepie}/demo/for_the_demo/place_video.png | Bin .../simplepie}/demo/for_the_demo/sIFR-print.css | 0 .../simplepie}/demo/for_the_demo/sIFR-screen.css | 0 .../simplepie}/demo/for_the_demo/sifr-config.js | 0 .../simplepie}/demo/for_the_demo/sifr.js | 0 .../simplepie}/demo/for_the_demo/simplepie.css | 0 .../simplepie}/demo/for_the_demo/sleight.js | 0 .../source_files/place_audio_fireworksfile.png | Bin .../source_files/place_video_fireworksfile.png | Bin .../source_files/sIFR-r245/SifrStyleSheet.as | 0 .../source_files/sIFR-r245/_README_.txt | 0 .../for_the_demo/source_files/sIFR-r245/options.as | 0 .../for_the_demo/source_files/sIFR-r245/sIFR.as | 0 .../for_the_demo/source_files/sIFR-r245/sifr.fla | Bin .../simplepie}/demo/for_the_demo/top_gradient.gif | Bin .../simplepie}/demo/for_the_demo/verdana.swf | Bin .../demo/for_the_demo/yanone-kaffeesatz-bold.swf | Bin .../simplepie}/demo/handler_image.php | 0 {simplepie => library/simplepie}/demo/index.php | 0 .../simplepie}/demo/minimalistic.php | 0 .../simplepie}/demo/multifeeds.php | 0 {simplepie => library/simplepie}/demo/test.php | 0 {simplepie => library/simplepie}/idn/LICENCE | 0 {simplepie => library/simplepie}/idn/ReadMe.txt | 0 .../simplepie}/idn/idna_convert.class.php | 0 {simplepie => library/simplepie}/idn/npdata.ser | 0 {simplepie => library/simplepie}/simplepie.inc | 0 {tinymce => library/tinymce}/changelog.txt | 0 .../tinymce}/examples/css/content.css | 0 {tinymce => library/tinymce}/examples/css/word.css | 0 .../tinymce}/examples/custom_formats.html | 0 {tinymce => library/tinymce}/examples/full.html | 0 {tinymce => library/tinymce}/examples/index.html | 0 .../tinymce}/examples/lists/image_list.js | 0 .../tinymce}/examples/lists/link_list.js | 0 .../tinymce}/examples/lists/media_list.js | 0 .../tinymce}/examples/lists/template_list.js | 0 .../tinymce}/examples/media/logo.jpg | Bin .../tinymce}/examples/media/logo_over.jpg | Bin .../tinymce}/examples/media/sample.avi | Bin .../tinymce}/examples/media/sample.dcr | Bin .../tinymce}/examples/media/sample.mov | Bin .../tinymce}/examples/media/sample.ram | 0 .../tinymce}/examples/media/sample.rm | Bin .../tinymce}/examples/media/sample.swf | Bin {tinymce => library/tinymce}/examples/menu.html | 0 {tinymce => library/tinymce}/examples/simple.html | 0 {tinymce => library/tinymce}/examples/skins.html | 0 .../tinymce}/examples/templates/layout1.htm | 0 .../tinymce}/examples/templates/snippet1.htm | 0 .../tinymce}/examples/translate.html | 0 {tinymce => library/tinymce}/examples/word.html | 0 .../tinymce}/jscripts/tiny_mce/langs/en.js | 0 .../tinymce}/jscripts/tiny_mce/license.txt | 0 .../jscripts/tiny_mce/plugins/advhr/css/advhr.css | 0 .../tiny_mce/plugins/advhr/editor_plugin.js | 0 .../tiny_mce/plugins/advhr/editor_plugin_src.js | 0 .../jscripts/tiny_mce/plugins/advhr/js/rule.js | 0 .../jscripts/tiny_mce/plugins/advhr/langs/en_dlg.js | 0 .../jscripts/tiny_mce/plugins/advhr/rule.htm | 0 .../tiny_mce/plugins/advimage/css/advimage.css | 0 .../tiny_mce/plugins/advimage/editor_plugin.js | 0 .../tiny_mce/plugins/advimage/editor_plugin_src.js | 0 .../jscripts/tiny_mce/plugins/advimage/image.htm | 0 .../tiny_mce/plugins/advimage/img/sample.gif | Bin .../jscripts/tiny_mce/plugins/advimage/js/image.js | 0 .../tiny_mce/plugins/advimage/langs/en_dlg.js | 0 .../tiny_mce/plugins/advlink/css/advlink.css | 0 .../tiny_mce/plugins/advlink/editor_plugin.js | 0 .../tiny_mce/plugins/advlink/editor_plugin_src.js | 0 .../jscripts/tiny_mce/plugins/advlink/js/advlink.js | 0 .../tiny_mce/plugins/advlink/langs/en_dlg.js | 0 .../jscripts/tiny_mce/plugins/advlink/link.htm | 0 .../tiny_mce/plugins/advlist/editor_plugin.js | 0 .../tiny_mce/plugins/advlist/editor_plugin_src.js | 0 .../tiny_mce/plugins/autoresize/editor_plugin.js | 0 .../plugins/autoresize/editor_plugin_src.js | 0 .../tiny_mce/plugins/autosave/editor_plugin.js | 0 .../tiny_mce/plugins/autosave/editor_plugin_src.js | 0 .../jscripts/tiny_mce/plugins/autosave/langs/en.js | 0 .../tiny_mce/plugins/bbcode/editor_plugin.js | 0 .../tiny_mce/plugins/bbcode/editor_plugin_src.js | 0 .../tiny_mce/plugins/contextmenu/editor_plugin.js | 0 .../plugins/contextmenu/editor_plugin_src.js | 0 .../plugins/directionality/editor_plugin.js | 0 .../plugins/directionality/editor_plugin_src.js | 0 .../tiny_mce/plugins/emotions/editor_plugin.js | 0 .../tiny_mce/plugins/emotions/editor_plugin_src.js | 0 .../jscripts/tiny_mce/plugins/emotions/emotions.htm | 0 .../tiny_mce/plugins/emotions/img/smiley-cool.gif | Bin .../tiny_mce/plugins/emotions/img/smiley-cry.gif | Bin .../plugins/emotions/img/smiley-embarassed.gif | Bin .../plugins/emotions/img/smiley-foot-in-mouth.gif | Bin .../tiny_mce/plugins/emotions/img/smiley-frown.gif | Bin .../plugins/emotions/img/smiley-innocent.gif | Bin .../tiny_mce/plugins/emotions/img/smiley-kiss.gif | Bin .../plugins/emotions/img/smiley-laughing.gif | Bin .../plugins/emotions/img/smiley-money-mouth.gif | Bin .../tiny_mce/plugins/emotions/img/smiley-sealed.gif | Bin .../tiny_mce/plugins/emotions/img/smiley-smile.gif | Bin .../plugins/emotions/img/smiley-surprised.gif | Bin .../plugins/emotions/img/smiley-tongue-out.gif | Bin .../plugins/emotions/img/smiley-undecided.gif | Bin .../tiny_mce/plugins/emotions/img/smiley-wink.gif | Bin .../tiny_mce/plugins/emotions/img/smiley-yell.gif | Bin .../tiny_mce/plugins/emotions/js/emotions.js | 0 .../tiny_mce/plugins/emotions/langs/en_dlg.js | 0 .../jscripts/tiny_mce/plugins/example/dialog.htm | 0 .../tiny_mce/plugins/example/editor_plugin.js | 0 .../tiny_mce/plugins/example/editor_plugin_src.js | 0 .../tiny_mce/plugins/example/img/example.gif | Bin .../jscripts/tiny_mce/plugins/example/js/dialog.js | 0 .../jscripts/tiny_mce/plugins/example/langs/en.js | 0 .../tiny_mce/plugins/example/langs/en_dlg.js | 0 .../tiny_mce/plugins/fullpage/css/fullpage.css | 0 .../tiny_mce/plugins/fullpage/editor_plugin.js | 0 .../tiny_mce/plugins/fullpage/editor_plugin_src.js | 0 .../jscripts/tiny_mce/plugins/fullpage/fullpage.htm | 0 .../tiny_mce/plugins/fullpage/js/fullpage.js | 0 .../tiny_mce/plugins/fullpage/langs/en_dlg.js | 0 .../tiny_mce/plugins/fullscreen/editor_plugin.js | 0 .../plugins/fullscreen/editor_plugin_src.js | 0 .../tiny_mce/plugins/fullscreen/fullscreen.htm | 0 .../tiny_mce/plugins/iespell/editor_plugin.js | 0 .../tiny_mce/plugins/iespell/editor_plugin_src.js | 0 .../tiny_mce/plugins/inlinepopups/editor_plugin.js | 0 .../plugins/inlinepopups/editor_plugin_src.js | 0 .../inlinepopups/skins/clearlooks2/img/alert.gif | Bin .../inlinepopups/skins/clearlooks2/img/button.gif | Bin .../inlinepopups/skins/clearlooks2/img/buttons.gif | Bin .../inlinepopups/skins/clearlooks2/img/confirm.gif | Bin .../inlinepopups/skins/clearlooks2/img/corners.gif | Bin .../skins/clearlooks2/img/horizontal.gif | Bin .../inlinepopups/skins/clearlooks2/img/vertical.gif | Bin .../inlinepopups/skins/clearlooks2/window.css | 0 .../tiny_mce/plugins/inlinepopups/template.htm | 0 .../plugins/insertdatetime/editor_plugin.js | 0 .../plugins/insertdatetime/editor_plugin_src.js | 0 .../tiny_mce/plugins/layer/editor_plugin.js | 0 .../tiny_mce/plugins/layer/editor_plugin_src.js | 0 .../tiny_mce/plugins/legacyoutput/editor_plugin.js | 0 .../plugins/legacyoutput/editor_plugin_src.js | 0 .../jscripts/tiny_mce/plugins/media/css/content.css | 0 .../jscripts/tiny_mce/plugins/media/css/media.css | 0 .../tiny_mce/plugins/media/editor_plugin.js | 0 .../tiny_mce/plugins/media/editor_plugin_src.js | 0 .../jscripts/tiny_mce/plugins/media/img/flash.gif | Bin .../tiny_mce/plugins/media/img/flv_player.swf | Bin .../tiny_mce/plugins/media/img/quicktime.gif | Bin .../tiny_mce/plugins/media/img/realmedia.gif | Bin .../tiny_mce/plugins/media/img/shockwave.gif | Bin .../jscripts/tiny_mce/plugins/media/img/trans.gif | Bin .../tiny_mce/plugins/media/img/windowsmedia.gif | Bin .../jscripts/tiny_mce/plugins/media/js/embed.js | 0 .../jscripts/tiny_mce/plugins/media/js/media.js | 0 .../jscripts/tiny_mce/plugins/media/langs/en_dlg.js | 0 .../jscripts/tiny_mce/plugins/media/media.htm | 0 .../tiny_mce/plugins/nonbreaking/editor_plugin.js | 0 .../plugins/nonbreaking/editor_plugin_src.js | 0 .../tiny_mce/plugins/noneditable/editor_plugin.js | 0 .../plugins/noneditable/editor_plugin_src.js | 0 .../tiny_mce/plugins/pagebreak/css/content.css | 0 .../tiny_mce/plugins/pagebreak/editor_plugin.js | 0 .../tiny_mce/plugins/pagebreak/editor_plugin_src.js | 0 .../tiny_mce/plugins/pagebreak/img/pagebreak.gif | Bin .../tiny_mce/plugins/pagebreak/img/trans.gif | Bin .../tiny_mce/plugins/paste/editor_plugin.js | 0 .../tiny_mce/plugins/paste/editor_plugin_src.js | 0 .../jscripts/tiny_mce/plugins/paste/js/pastetext.js | 0 .../jscripts/tiny_mce/plugins/paste/js/pasteword.js | 0 .../jscripts/tiny_mce/plugins/paste/langs/en_dlg.js | 0 .../jscripts/tiny_mce/plugins/paste/pastetext.htm | 0 .../jscripts/tiny_mce/plugins/paste/pasteword.htm | 0 .../tiny_mce/plugins/preview/editor_plugin.js | 0 .../tiny_mce/plugins/preview/editor_plugin_src.js | 0 .../jscripts/tiny_mce/plugins/preview/example.html | 0 .../tiny_mce/plugins/preview/jscripts/embed.js | 0 .../jscripts/tiny_mce/plugins/preview/preview.html | 0 .../tiny_mce/plugins/print/editor_plugin.js | 0 .../tiny_mce/plugins/print/editor_plugin_src.js | 0 .../jscripts/tiny_mce/plugins/save/editor_plugin.js | 0 .../tiny_mce/plugins/save/editor_plugin_src.js | 0 .../plugins/searchreplace/css/searchreplace.css | 0 .../tiny_mce/plugins/searchreplace/editor_plugin.js | 0 .../plugins/searchreplace/editor_plugin_src.js | 0 .../plugins/searchreplace/js/searchreplace.js | 0 .../tiny_mce/plugins/searchreplace/langs/en_dlg.js | 0 .../plugins/searchreplace/searchreplace.htm | 0 .../tiny_mce/plugins/spellchecker/css/content.css | 0 .../tiny_mce/plugins/spellchecker/editor_plugin.js | 0 .../plugins/spellchecker/editor_plugin_src.js | 0 .../tiny_mce/plugins/spellchecker/img/wline.gif | Bin .../jscripts/tiny_mce/plugins/style/css/props.css | 0 .../tiny_mce/plugins/style/editor_plugin.js | 0 .../tiny_mce/plugins/style/editor_plugin_src.js | 0 .../jscripts/tiny_mce/plugins/style/js/props.js | 0 .../jscripts/tiny_mce/plugins/style/langs/en_dlg.js | 0 .../jscripts/tiny_mce/plugins/style/props.htm | 0 .../tiny_mce/plugins/tabfocus/editor_plugin.js | 0 .../tiny_mce/plugins/tabfocus/editor_plugin_src.js | 0 .../jscripts/tiny_mce/plugins/table/cell.htm | 0 .../jscripts/tiny_mce/plugins/table/css/cell.css | 0 .../jscripts/tiny_mce/plugins/table/css/row.css | 0 .../jscripts/tiny_mce/plugins/table/css/table.css | 0 .../tiny_mce/plugins/table/editor_plugin.js | 0 .../tiny_mce/plugins/table/editor_plugin_src.js | 0 .../jscripts/tiny_mce/plugins/table/js/cell.js | 0 .../tiny_mce/plugins/table/js/merge_cells.js | 0 .../jscripts/tiny_mce/plugins/table/js/row.js | 0 .../jscripts/tiny_mce/plugins/table/js/table.js | 0 .../jscripts/tiny_mce/plugins/table/langs/en_dlg.js | 0 .../jscripts/tiny_mce/plugins/table/merge_cells.htm | 0 .../jscripts/tiny_mce/plugins/table/row.htm | 0 .../jscripts/tiny_mce/plugins/table/table.htm | 0 .../jscripts/tiny_mce/plugins/template/blank.htm | 0 .../tiny_mce/plugins/template/css/template.css | 0 .../tiny_mce/plugins/template/editor_plugin.js | 0 .../tiny_mce/plugins/template/editor_plugin_src.js | 0 .../tiny_mce/plugins/template/js/template.js | 0 .../tiny_mce/plugins/template/langs/en_dlg.js | 0 .../jscripts/tiny_mce/plugins/template/template.htm | 0 .../tiny_mce/plugins/visualchars/editor_plugin.js | 0 .../plugins/visualchars/editor_plugin_src.js | 0 .../tiny_mce/plugins/wordcount/editor_plugin.js | 0 .../tiny_mce/plugins/wordcount/editor_plugin_src.js | 0 .../jscripts/tiny_mce/plugins/xhtmlxtras/abbr.htm | 0 .../tiny_mce/plugins/xhtmlxtras/acronym.htm | 0 .../tiny_mce/plugins/xhtmlxtras/attributes.htm | 0 .../jscripts/tiny_mce/plugins/xhtmlxtras/cite.htm | 0 .../tiny_mce/plugins/xhtmlxtras/css/attributes.css | 0 .../tiny_mce/plugins/xhtmlxtras/css/popup.css | 0 .../jscripts/tiny_mce/plugins/xhtmlxtras/del.htm | 0 .../tiny_mce/plugins/xhtmlxtras/editor_plugin.js | 0 .../plugins/xhtmlxtras/editor_plugin_src.js | 0 .../jscripts/tiny_mce/plugins/xhtmlxtras/ins.htm | 0 .../jscripts/tiny_mce/plugins/xhtmlxtras/js/abbr.js | 0 .../tiny_mce/plugins/xhtmlxtras/js/acronym.js | 0 .../tiny_mce/plugins/xhtmlxtras/js/attributes.js | 0 .../jscripts/tiny_mce/plugins/xhtmlxtras/js/cite.js | 0 .../jscripts/tiny_mce/plugins/xhtmlxtras/js/del.js | 0 .../plugins/xhtmlxtras/js/element_common.js | 0 .../jscripts/tiny_mce/plugins/xhtmlxtras/js/ins.js | 0 .../tiny_mce/plugins/xhtmlxtras/langs/en_dlg.js | 0 .../jscripts/tiny_mce/themes/advanced/about.htm | 0 .../jscripts/tiny_mce/themes/advanced/anchor.htm | 0 .../jscripts/tiny_mce/themes/advanced/charmap.htm | 0 .../tiny_mce/themes/advanced/color_picker.htm | 0 .../tiny_mce/themes/advanced/editor_template.js | 0 .../tiny_mce/themes/advanced/editor_template_src.js | 0 .../jscripts/tiny_mce/themes/advanced/image.htm | 0 .../tiny_mce/themes/advanced/img/colorpicker.jpg | Bin .../jscripts/tiny_mce/themes/advanced/img/icons.gif | Bin .../jscripts/tiny_mce/themes/advanced/js/about.js | 0 .../jscripts/tiny_mce/themes/advanced/js/anchor.js | 0 .../jscripts/tiny_mce/themes/advanced/js/charmap.js | 0 .../tiny_mce/themes/advanced/js/color_picker.js | 0 .../jscripts/tiny_mce/themes/advanced/js/image.js | 0 .../jscripts/tiny_mce/themes/advanced/js/link.js | 0 .../tiny_mce/themes/advanced/js/source_editor.js | 0 .../jscripts/tiny_mce/themes/advanced/langs/en.js | 0 .../tiny_mce/themes/advanced/langs/en_dlg.js | 0 .../jscripts/tiny_mce/themes/advanced/link.htm | 0 .../themes/advanced/skins/default/content.css | 0 .../themes/advanced/skins/default/dialog.css | 0 .../themes/advanced/skins/default/img/buttons.png | Bin .../themes/advanced/skins/default/img/items.gif | Bin .../advanced/skins/default/img/menu_arrow.gif | Bin .../advanced/skins/default/img/menu_check.gif | Bin .../themes/advanced/skins/default/img/progress.gif | Bin .../themes/advanced/skins/default/img/tabs.gif | Bin .../tiny_mce/themes/advanced/skins/default/ui.css | 0 .../tiny_mce/themes/advanced/skins/o2k7/content.css | 0 .../tiny_mce/themes/advanced/skins/o2k7/dialog.css | 0 .../themes/advanced/skins/o2k7/img/button_bg.png | Bin .../advanced/skins/o2k7/img/button_bg_black.png | Bin .../advanced/skins/o2k7/img/button_bg_silver.png | Bin .../tiny_mce/themes/advanced/skins/o2k7/ui.css | 0 .../themes/advanced/skins/o2k7/ui_black.css | 0 .../themes/advanced/skins/o2k7/ui_silver.css | 0 .../tiny_mce/themes/advanced/source_editor.htm | 0 .../tiny_mce/themes/simple/editor_template.js | 0 .../tiny_mce/themes/simple/editor_template_src.js | 0 .../jscripts/tiny_mce/themes/simple/img/icons.gif | Bin .../jscripts/tiny_mce/themes/simple/langs/en.js | 0 .../themes/simple/skins/default/content.css | 0 .../tiny_mce/themes/simple/skins/default/ui.css | 0 .../tiny_mce/themes/simple/skins/o2k7/content.css | 0 .../themes/simple/skins/o2k7/img/button_bg.png | Bin .../tiny_mce/themes/simple/skins/o2k7/ui.css | 0 .../tinymce}/jscripts/tiny_mce/tiny_mce.js | 0 .../tinymce}/jscripts/tiny_mce/tiny_mce_popup.js | 0 .../tinymce}/jscripts/tiny_mce/tiny_mce_src.js | 0 .../jscripts/tiny_mce/utils/editable_selects.js | 0 .../tinymce}/jscripts/tiny_mce/utils/form_utils.js | 0 .../tinymce}/jscripts/tiny_mce/utils/mctabs.js | 0 .../tinymce}/jscripts/tiny_mce/utils/validate.js | 0 mod/dfrn_notify.php | 2 +- mod/salmon.php | 9 +++------ view/contact_head.tpl | 2 +- view/crophead.tpl | 10 ++++------ view/event_head.tpl | 2 +- view/jot-header.tpl | 2 +- view/msg-header.tpl | 2 +- view/profed_head.tpl | 2 +- view/theme/duepuntozero/style.css | 9 +++++++-- 397 files changed, 30 insertions(+), 30 deletions(-) rename {cropper => library/cropper}/cropper.css (100%) rename {cropper => library/cropper}/cropper.html (100%) rename {cropper => library/cropper}/cropper.js (100%) rename {cropper => library/cropper}/cropper.uncompressed.js (100%) rename {cropper => library/cropper}/lib/builder.js (100%) rename {cropper => library/cropper}/lib/controls.js (100%) rename {cropper => library/cropper}/lib/dragdrop.js (100%) rename {cropper => library/cropper}/lib/effects.js (100%) rename {cropper => library/cropper}/lib/prototype.js (100%) rename {cropper => library/cropper}/lib/scriptaculous.js (100%) rename {cropper => library/cropper}/lib/slider.js (100%) rename {cropper => library/cropper}/lib/unittest.js (100%) rename {cropper => library/cropper}/licence.txt (100%) rename {cropper => library/cropper}/marqueeHoriz.gif (100%) rename {cropper => library/cropper}/marqueeVert.gif (100%) rename {cropper => library/cropper}/tests/castle.jpg (100%) rename {cropper => library/cropper}/tests/castleMed.jpg (100%) rename {cropper => library/cropper}/tests/example-Basic.htm (100%) rename {cropper => library/cropper}/tests/example-CSS-Absolute.htm (100%) rename {cropper => library/cropper}/tests/example-CSS-Float.htm (100%) rename {cropper => library/cropper}/tests/example-CSS-Relative.htm (100%) rename {cropper => library/cropper}/tests/example-CoordsOnLoad.htm (100%) rename {cropper => library/cropper}/tests/example-CoordsOnLoadWithRatio.htm (100%) rename {cropper => library/cropper}/tests/example-Dimensions.htm (100%) rename {cropper => library/cropper}/tests/example-DynamicImage.htm (100%) rename {cropper => library/cropper}/tests/example-FixedRatio.htm (100%) rename {cropper => library/cropper}/tests/example-MinimumDimensions.htm (100%) rename {cropper => library/cropper}/tests/example-MinimumWidth.htm (100%) rename {cropper => library/cropper}/tests/example-Preview.htm (100%) rename {cropper => library/cropper}/tests/poppy.jpg (100%) rename {cropper => library/cropper}/tests/staticHTMLStructure.htm (100%) rename {phpsec => library/phpsec}/Crypt/AES.php (100%) rename {phpsec => library/phpsec}/Crypt/DES.php (100%) rename {phpsec => library/phpsec}/Crypt/Hash.php (100%) rename {phpsec => library/phpsec}/Crypt/RC4.php (100%) rename {phpsec => library/phpsec}/Crypt/RSA.php (100%) rename {phpsec => library/phpsec}/Crypt/Random.php (100%) rename {phpsec => library/phpsec}/Crypt/Rijndael.php (100%) rename {phpsec => library/phpsec}/Crypt/TripleDES.php (100%) rename {phpsec => library/phpsec}/Math/BigInteger.php (100%) rename {phpsec => library/phpsec}/Net/SFTP.php (100%) rename {phpsec => library/phpsec}/Net/SSH1.php (100%) rename {phpsec => library/phpsec}/Net/SSH2.php (100%) rename {phpsec => library/phpsec}/PHP/Compat/Function/array_fill.php (100%) rename {phpsec => library/phpsec}/PHP/Compat/Function/bcpowmod.php (100%) rename {phpsec => library/phpsec}/PHP/Compat/Function/str_split.php (100%) rename {phpsec => library/phpsec}/crypt.html (100%) rename {phpsec => library/phpsec}/docbook.css (100%) rename {phpsec => library/phpsec}/index.html (100%) rename {phpsec => library/phpsec}/intro.html (100%) rename {phpsec => library/phpsec}/math.html (100%) rename {phpsec => library/phpsec}/misc_crypt.html (100%) rename {phpsec => library/phpsec}/net.html (100%) rename {phpsec => library/phpsec}/sym_crypt.html (100%) rename {simplepie => library/simplepie}/LICENSE.txt (100%) rename {simplepie => library/simplepie}/README.markdown (100%) rename {simplepie => library/simplepie}/compatibility_test/COMPATIBILITY README.txt (100%) rename {simplepie => library/simplepie}/compatibility_test/sp_compatibility_test.php (100%) rename {simplepie => library/simplepie}/create.php (100%) rename {simplepie => library/simplepie}/db.sql (100%) rename {simplepie => library/simplepie}/demo/cli_test.php (100%) rename {simplepie => library/simplepie}/demo/for_the_demo/alternate_favicon.png (100%) rename {simplepie => library/simplepie}/demo/for_the_demo/background_blockquote.png (100%) rename {simplepie => library/simplepie}/demo/for_the_demo/background_menuitem.gif (100%) rename {simplepie => library/simplepie}/demo/for_the_demo/background_menuitem_off.gif (100%) rename {simplepie => library/simplepie}/demo/for_the_demo/background_menuitem_shadow.gif (100%) rename {simplepie => library/simplepie}/demo/for_the_demo/favicons/alternate.png (100%) rename {simplepie => library/simplepie}/demo/for_the_demo/favicons/blinklist.png (100%) rename {simplepie => library/simplepie}/demo/for_the_demo/favicons/blogmarks.png (100%) rename {simplepie => library/simplepie}/demo/for_the_demo/favicons/delicious.png (100%) rename {simplepie => library/simplepie}/demo/for_the_demo/favicons/digg.png (100%) rename {simplepie => library/simplepie}/demo/for_the_demo/favicons/magnolia.png (100%) rename {simplepie => library/simplepie}/demo/for_the_demo/favicons/myweb2.png (100%) rename {simplepie => library/simplepie}/demo/for_the_demo/favicons/newsvine.png (100%) rename {simplepie => library/simplepie}/demo/for_the_demo/favicons/reddit.png (100%) rename {simplepie => library/simplepie}/demo/for_the_demo/favicons/segnalo.png (100%) rename {simplepie => library/simplepie}/demo/for_the_demo/favicons/simpy.png (100%) rename {simplepie => library/simplepie}/demo/for_the_demo/favicons/spurl.png (100%) rename {simplepie => library/simplepie}/demo/for_the_demo/favicons/technorati.png (100%) rename {simplepie => library/simplepie}/demo/for_the_demo/favicons/wists.png (100%) rename {simplepie => library/simplepie}/demo/for_the_demo/feed.png (100%) rename {simplepie => library/simplepie}/demo/for_the_demo/logo_simplepie_demo.png (100%) rename {simplepie => library/simplepie}/demo/for_the_demo/lucida-grande-bold.swf (100%) rename {simplepie => library/simplepie}/demo/for_the_demo/mediaplayer.swf (100%) rename {simplepie => library/simplepie}/demo/for_the_demo/mediaplayer_readme.htm (100%) rename {simplepie => library/simplepie}/demo/for_the_demo/mini_podcast.png (100%) rename {simplepie => library/simplepie}/demo/for_the_demo/place_audio.png (100%) rename {simplepie => library/simplepie}/demo/for_the_demo/place_video.png (100%) rename {simplepie => library/simplepie}/demo/for_the_demo/sIFR-print.css (100%) rename {simplepie => library/simplepie}/demo/for_the_demo/sIFR-screen.css (100%) rename {simplepie => library/simplepie}/demo/for_the_demo/sifr-config.js (100%) rename {simplepie => library/simplepie}/demo/for_the_demo/sifr.js (100%) rename {simplepie => library/simplepie}/demo/for_the_demo/simplepie.css (100%) rename {simplepie => library/simplepie}/demo/for_the_demo/sleight.js (100%) rename {simplepie => library/simplepie}/demo/for_the_demo/source_files/place_audio_fireworksfile.png (100%) rename {simplepie => library/simplepie}/demo/for_the_demo/source_files/place_video_fireworksfile.png (100%) rename {simplepie => library/simplepie}/demo/for_the_demo/source_files/sIFR-r245/SifrStyleSheet.as (100%) rename {simplepie => library/simplepie}/demo/for_the_demo/source_files/sIFR-r245/_README_.txt (100%) rename {simplepie => library/simplepie}/demo/for_the_demo/source_files/sIFR-r245/options.as (100%) rename {simplepie => library/simplepie}/demo/for_the_demo/source_files/sIFR-r245/sIFR.as (100%) rename {simplepie => library/simplepie}/demo/for_the_demo/source_files/sIFR-r245/sifr.fla (100%) rename {simplepie => library/simplepie}/demo/for_the_demo/top_gradient.gif (100%) rename {simplepie => library/simplepie}/demo/for_the_demo/verdana.swf (100%) rename {simplepie => library/simplepie}/demo/for_the_demo/yanone-kaffeesatz-bold.swf (100%) rename {simplepie => library/simplepie}/demo/handler_image.php (100%) rename {simplepie => library/simplepie}/demo/index.php (100%) rename {simplepie => library/simplepie}/demo/minimalistic.php (100%) rename {simplepie => library/simplepie}/demo/multifeeds.php (100%) rename {simplepie => library/simplepie}/demo/test.php (100%) rename {simplepie => library/simplepie}/idn/LICENCE (100%) rename {simplepie => library/simplepie}/idn/ReadMe.txt (100%) rename {simplepie => library/simplepie}/idn/idna_convert.class.php (100%) rename {simplepie => library/simplepie}/idn/npdata.ser (100%) rename {simplepie => library/simplepie}/simplepie.inc (100%) rename {tinymce => library/tinymce}/changelog.txt (100%) rename {tinymce => library/tinymce}/examples/css/content.css (100%) rename {tinymce => library/tinymce}/examples/css/word.css (100%) rename {tinymce => library/tinymce}/examples/custom_formats.html (100%) rename {tinymce => library/tinymce}/examples/full.html (100%) rename {tinymce => library/tinymce}/examples/index.html (100%) rename {tinymce => library/tinymce}/examples/lists/image_list.js (100%) rename {tinymce => library/tinymce}/examples/lists/link_list.js (100%) rename {tinymce => library/tinymce}/examples/lists/media_list.js (100%) rename {tinymce => library/tinymce}/examples/lists/template_list.js (100%) rename {tinymce => library/tinymce}/examples/media/logo.jpg (100%) rename {tinymce => library/tinymce}/examples/media/logo_over.jpg (100%) rename {tinymce => library/tinymce}/examples/media/sample.avi (100%) rename {tinymce => library/tinymce}/examples/media/sample.dcr (100%) rename {tinymce => library/tinymce}/examples/media/sample.mov (100%) rename {tinymce => library/tinymce}/examples/media/sample.ram (100%) rename {tinymce => library/tinymce}/examples/media/sample.rm (100%) rename {tinymce => library/tinymce}/examples/media/sample.swf (100%) rename {tinymce => library/tinymce}/examples/menu.html (100%) rename {tinymce => library/tinymce}/examples/simple.html (100%) rename {tinymce => library/tinymce}/examples/skins.html (100%) rename {tinymce => library/tinymce}/examples/templates/layout1.htm (100%) rename {tinymce => library/tinymce}/examples/templates/snippet1.htm (100%) rename {tinymce => library/tinymce}/examples/translate.html (100%) rename {tinymce => library/tinymce}/examples/word.html (100%) rename {tinymce => library/tinymce}/jscripts/tiny_mce/langs/en.js (100%) rename {tinymce => library/tinymce}/jscripts/tiny_mce/license.txt (100%) rename {tinymce => library/tinymce}/jscripts/tiny_mce/plugins/advhr/css/advhr.css (100%) rename {tinymce => library/tinymce}/jscripts/tiny_mce/plugins/advhr/editor_plugin.js (100%) rename {tinymce => library/tinymce}/jscripts/tiny_mce/plugins/advhr/editor_plugin_src.js (100%) rename {tinymce => library/tinymce}/jscripts/tiny_mce/plugins/advhr/js/rule.js (100%) rename {tinymce => library/tinymce}/jscripts/tiny_mce/plugins/advhr/langs/en_dlg.js (100%) rename {tinymce => library/tinymce}/jscripts/tiny_mce/plugins/advhr/rule.htm (100%) rename {tinymce => library/tinymce}/jscripts/tiny_mce/plugins/advimage/css/advimage.css (100%) rename {tinymce => library/tinymce}/jscripts/tiny_mce/plugins/advimage/editor_plugin.js (100%) rename {tinymce => library/tinymce}/jscripts/tiny_mce/plugins/advimage/editor_plugin_src.js (100%) rename {tinymce => library/tinymce}/jscripts/tiny_mce/plugins/advimage/image.htm (100%) rename {tinymce => library/tinymce}/jscripts/tiny_mce/plugins/advimage/img/sample.gif (100%) rename {tinymce => library/tinymce}/jscripts/tiny_mce/plugins/advimage/js/image.js (100%) rename {tinymce => library/tinymce}/jscripts/tiny_mce/plugins/advimage/langs/en_dlg.js (100%) rename {tinymce => library/tinymce}/jscripts/tiny_mce/plugins/advlink/css/advlink.css (100%) rename {tinymce => library/tinymce}/jscripts/tiny_mce/plugins/advlink/editor_plugin.js (100%) rename {tinymce => library/tinymce}/jscripts/tiny_mce/plugins/advlink/editor_plugin_src.js (100%) rename {tinymce => library/tinymce}/jscripts/tiny_mce/plugins/advlink/js/advlink.js (100%) rename {tinymce => library/tinymce}/jscripts/tiny_mce/plugins/advlink/langs/en_dlg.js (100%) rename {tinymce => library/tinymce}/jscripts/tiny_mce/plugins/advlink/link.htm (100%) rename {tinymce => library/tinymce}/jscripts/tiny_mce/plugins/advlist/editor_plugin.js (100%) rename {tinymce => library/tinymce}/jscripts/tiny_mce/plugins/advlist/editor_plugin_src.js (100%) rename {tinymce => library/tinymce}/jscripts/tiny_mce/plugins/autoresize/editor_plugin.js (100%) rename {tinymce => library/tinymce}/jscripts/tiny_mce/plugins/autoresize/editor_plugin_src.js (100%) rename {tinymce => library/tinymce}/jscripts/tiny_mce/plugins/autosave/editor_plugin.js (100%) rename {tinymce => library/tinymce}/jscripts/tiny_mce/plugins/autosave/editor_plugin_src.js (100%) rename {tinymce => library/tinymce}/jscripts/tiny_mce/plugins/autosave/langs/en.js (100%) rename {tinymce => library/tinymce}/jscripts/tiny_mce/plugins/bbcode/editor_plugin.js (100%) rename {tinymce => library/tinymce}/jscripts/tiny_mce/plugins/bbcode/editor_plugin_src.js (100%) rename {tinymce => library/tinymce}/jscripts/tiny_mce/plugins/contextmenu/editor_plugin.js (100%) rename {tinymce => library/tinymce}/jscripts/tiny_mce/plugins/contextmenu/editor_plugin_src.js (100%) rename {tinymce => library/tinymce}/jscripts/tiny_mce/plugins/directionality/editor_plugin.js (100%) rename {tinymce => library/tinymce}/jscripts/tiny_mce/plugins/directionality/editor_plugin_src.js (100%) rename {tinymce => library/tinymce}/jscripts/tiny_mce/plugins/emotions/editor_plugin.js (100%) rename {tinymce => library/tinymce}/jscripts/tiny_mce/plugins/emotions/editor_plugin_src.js (100%) rename {tinymce => library/tinymce}/jscripts/tiny_mce/plugins/emotions/emotions.htm (100%) rename {tinymce => library/tinymce}/jscripts/tiny_mce/plugins/emotions/img/smiley-cool.gif (100%) rename {tinymce => library/tinymce}/jscripts/tiny_mce/plugins/emotions/img/smiley-cry.gif (100%) rename {tinymce => library/tinymce}/jscripts/tiny_mce/plugins/emotions/img/smiley-embarassed.gif (100%) rename {tinymce => library/tinymce}/jscripts/tiny_mce/plugins/emotions/img/smiley-foot-in-mouth.gif (100%) rename {tinymce => library/tinymce}/jscripts/tiny_mce/plugins/emotions/img/smiley-frown.gif (100%) rename {tinymce => library/tinymce}/jscripts/tiny_mce/plugins/emotions/img/smiley-innocent.gif (100%) rename {tinymce => library/tinymce}/jscripts/tiny_mce/plugins/emotions/img/smiley-kiss.gif (100%) rename {tinymce => library/tinymce}/jscripts/tiny_mce/plugins/emotions/img/smiley-laughing.gif (100%) rename {tinymce => library/tinymce}/jscripts/tiny_mce/plugins/emotions/img/smiley-money-mouth.gif (100%) rename {tinymce => library/tinymce}/jscripts/tiny_mce/plugins/emotions/img/smiley-sealed.gif (100%) rename {tinymce => library/tinymce}/jscripts/tiny_mce/plugins/emotions/img/smiley-smile.gif (100%) rename {tinymce => library/tinymce}/jscripts/tiny_mce/plugins/emotions/img/smiley-surprised.gif (100%) rename {tinymce => library/tinymce}/jscripts/tiny_mce/plugins/emotions/img/smiley-tongue-out.gif (100%) rename {tinymce => library/tinymce}/jscripts/tiny_mce/plugins/emotions/img/smiley-undecided.gif (100%) rename {tinymce => library/tinymce}/jscripts/tiny_mce/plugins/emotions/img/smiley-wink.gif (100%) rename {tinymce => library/tinymce}/jscripts/tiny_mce/plugins/emotions/img/smiley-yell.gif (100%) rename {tinymce => library/tinymce}/jscripts/tiny_mce/plugins/emotions/js/emotions.js (100%) rename {tinymce => library/tinymce}/jscripts/tiny_mce/plugins/emotions/langs/en_dlg.js (100%) rename {tinymce => library/tinymce}/jscripts/tiny_mce/plugins/example/dialog.htm (100%) rename {tinymce => library/tinymce}/jscripts/tiny_mce/plugins/example/editor_plugin.js (100%) rename {tinymce => library/tinymce}/jscripts/tiny_mce/plugins/example/editor_plugin_src.js (100%) rename {tinymce => library/tinymce}/jscripts/tiny_mce/plugins/example/img/example.gif (100%) rename {tinymce => library/tinymce}/jscripts/tiny_mce/plugins/example/js/dialog.js (100%) rename {tinymce => library/tinymce}/jscripts/tiny_mce/plugins/example/langs/en.js (100%) rename {tinymce => library/tinymce}/jscripts/tiny_mce/plugins/example/langs/en_dlg.js (100%) rename {tinymce => library/tinymce}/jscripts/tiny_mce/plugins/fullpage/css/fullpage.css (100%) rename {tinymce => library/tinymce}/jscripts/tiny_mce/plugins/fullpage/editor_plugin.js (100%) rename {tinymce => library/tinymce}/jscripts/tiny_mce/plugins/fullpage/editor_plugin_src.js (100%) rename {tinymce => library/tinymce}/jscripts/tiny_mce/plugins/fullpage/fullpage.htm (100%) rename {tinymce => library/tinymce}/jscripts/tiny_mce/plugins/fullpage/js/fullpage.js (100%) rename {tinymce => library/tinymce}/jscripts/tiny_mce/plugins/fullpage/langs/en_dlg.js (100%) rename {tinymce => library/tinymce}/jscripts/tiny_mce/plugins/fullscreen/editor_plugin.js (100%) rename {tinymce => library/tinymce}/jscripts/tiny_mce/plugins/fullscreen/editor_plugin_src.js (100%) rename {tinymce => library/tinymce}/jscripts/tiny_mce/plugins/fullscreen/fullscreen.htm (100%) rename {tinymce => library/tinymce}/jscripts/tiny_mce/plugins/iespell/editor_plugin.js (100%) rename {tinymce => library/tinymce}/jscripts/tiny_mce/plugins/iespell/editor_plugin_src.js (100%) rename {tinymce => library/tinymce}/jscripts/tiny_mce/plugins/inlinepopups/editor_plugin.js (100%) rename {tinymce => library/tinymce}/jscripts/tiny_mce/plugins/inlinepopups/editor_plugin_src.js (100%) rename {tinymce => library/tinymce}/jscripts/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/alert.gif (100%) rename {tinymce => library/tinymce}/jscripts/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/button.gif (100%) rename {tinymce => library/tinymce}/jscripts/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/buttons.gif (100%) rename {tinymce => library/tinymce}/jscripts/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/confirm.gif (100%) rename {tinymce => library/tinymce}/jscripts/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/corners.gif (100%) rename {tinymce => library/tinymce}/jscripts/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/horizontal.gif (100%) rename {tinymce => library/tinymce}/jscripts/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/vertical.gif (100%) rename {tinymce => library/tinymce}/jscripts/tiny_mce/plugins/inlinepopups/skins/clearlooks2/window.css (100%) rename {tinymce => library/tinymce}/jscripts/tiny_mce/plugins/inlinepopups/template.htm (100%) rename {tinymce => library/tinymce}/jscripts/tiny_mce/plugins/insertdatetime/editor_plugin.js (100%) rename {tinymce => library/tinymce}/jscripts/tiny_mce/plugins/insertdatetime/editor_plugin_src.js (100%) rename {tinymce => library/tinymce}/jscripts/tiny_mce/plugins/layer/editor_plugin.js (100%) rename {tinymce => library/tinymce}/jscripts/tiny_mce/plugins/layer/editor_plugin_src.js (100%) rename {tinymce => library/tinymce}/jscripts/tiny_mce/plugins/legacyoutput/editor_plugin.js (100%) rename {tinymce => library/tinymce}/jscripts/tiny_mce/plugins/legacyoutput/editor_plugin_src.js (100%) rename {tinymce => library/tinymce}/jscripts/tiny_mce/plugins/media/css/content.css (100%) rename {tinymce => library/tinymce}/jscripts/tiny_mce/plugins/media/css/media.css (100%) rename {tinymce => library/tinymce}/jscripts/tiny_mce/plugins/media/editor_plugin.js (100%) rename {tinymce => library/tinymce}/jscripts/tiny_mce/plugins/media/editor_plugin_src.js (100%) rename {tinymce => library/tinymce}/jscripts/tiny_mce/plugins/media/img/flash.gif (100%) rename {tinymce => library/tinymce}/jscripts/tiny_mce/plugins/media/img/flv_player.swf (100%) rename {tinymce => library/tinymce}/jscripts/tiny_mce/plugins/media/img/quicktime.gif (100%) rename {tinymce => library/tinymce}/jscripts/tiny_mce/plugins/media/img/realmedia.gif (100%) rename {tinymce => library/tinymce}/jscripts/tiny_mce/plugins/media/img/shockwave.gif (100%) rename {tinymce => library/tinymce}/jscripts/tiny_mce/plugins/media/img/trans.gif (100%) rename {tinymce => library/tinymce}/jscripts/tiny_mce/plugins/media/img/windowsmedia.gif (100%) rename {tinymce => library/tinymce}/jscripts/tiny_mce/plugins/media/js/embed.js (100%) rename {tinymce => library/tinymce}/jscripts/tiny_mce/plugins/media/js/media.js (100%) rename {tinymce => library/tinymce}/jscripts/tiny_mce/plugins/media/langs/en_dlg.js (100%) rename {tinymce => library/tinymce}/jscripts/tiny_mce/plugins/media/media.htm (100%) rename {tinymce => library/tinymce}/jscripts/tiny_mce/plugins/nonbreaking/editor_plugin.js (100%) rename {tinymce => library/tinymce}/jscripts/tiny_mce/plugins/nonbreaking/editor_plugin_src.js (100%) rename {tinymce => library/tinymce}/jscripts/tiny_mce/plugins/noneditable/editor_plugin.js (100%) rename {tinymce => library/tinymce}/jscripts/tiny_mce/plugins/noneditable/editor_plugin_src.js (100%) rename {tinymce => library/tinymce}/jscripts/tiny_mce/plugins/pagebreak/css/content.css (100%) rename {tinymce => library/tinymce}/jscripts/tiny_mce/plugins/pagebreak/editor_plugin.js (100%) rename {tinymce => library/tinymce}/jscripts/tiny_mce/plugins/pagebreak/editor_plugin_src.js (100%) rename {tinymce => library/tinymce}/jscripts/tiny_mce/plugins/pagebreak/img/pagebreak.gif (100%) rename {tinymce => library/tinymce}/jscripts/tiny_mce/plugins/pagebreak/img/trans.gif (100%) rename {tinymce => library/tinymce}/jscripts/tiny_mce/plugins/paste/editor_plugin.js (100%) rename {tinymce => library/tinymce}/jscripts/tiny_mce/plugins/paste/editor_plugin_src.js (100%) rename {tinymce => library/tinymce}/jscripts/tiny_mce/plugins/paste/js/pastetext.js (100%) rename {tinymce => library/tinymce}/jscripts/tiny_mce/plugins/paste/js/pasteword.js (100%) rename {tinymce => library/tinymce}/jscripts/tiny_mce/plugins/paste/langs/en_dlg.js (100%) rename {tinymce => library/tinymce}/jscripts/tiny_mce/plugins/paste/pastetext.htm (100%) rename {tinymce => library/tinymce}/jscripts/tiny_mce/plugins/paste/pasteword.htm (100%) rename {tinymce => library/tinymce}/jscripts/tiny_mce/plugins/preview/editor_plugin.js (100%) rename {tinymce => library/tinymce}/jscripts/tiny_mce/plugins/preview/editor_plugin_src.js (100%) rename {tinymce => library/tinymce}/jscripts/tiny_mce/plugins/preview/example.html (100%) rename {tinymce => library/tinymce}/jscripts/tiny_mce/plugins/preview/jscripts/embed.js (100%) rename {tinymce => library/tinymce}/jscripts/tiny_mce/plugins/preview/preview.html (100%) rename {tinymce => library/tinymce}/jscripts/tiny_mce/plugins/print/editor_plugin.js (100%) rename {tinymce => library/tinymce}/jscripts/tiny_mce/plugins/print/editor_plugin_src.js (100%) rename {tinymce => library/tinymce}/jscripts/tiny_mce/plugins/save/editor_plugin.js (100%) rename {tinymce => library/tinymce}/jscripts/tiny_mce/plugins/save/editor_plugin_src.js (100%) rename {tinymce => library/tinymce}/jscripts/tiny_mce/plugins/searchreplace/css/searchreplace.css (100%) rename {tinymce => library/tinymce}/jscripts/tiny_mce/plugins/searchreplace/editor_plugin.js (100%) rename {tinymce => library/tinymce}/jscripts/tiny_mce/plugins/searchreplace/editor_plugin_src.js (100%) rename {tinymce => library/tinymce}/jscripts/tiny_mce/plugins/searchreplace/js/searchreplace.js (100%) rename {tinymce => library/tinymce}/jscripts/tiny_mce/plugins/searchreplace/langs/en_dlg.js (100%) rename {tinymce => library/tinymce}/jscripts/tiny_mce/plugins/searchreplace/searchreplace.htm (100%) rename {tinymce => library/tinymce}/jscripts/tiny_mce/plugins/spellchecker/css/content.css (100%) rename {tinymce => library/tinymce}/jscripts/tiny_mce/plugins/spellchecker/editor_plugin.js (100%) rename {tinymce => library/tinymce}/jscripts/tiny_mce/plugins/spellchecker/editor_plugin_src.js (100%) rename {tinymce => library/tinymce}/jscripts/tiny_mce/plugins/spellchecker/img/wline.gif (100%) rename {tinymce => library/tinymce}/jscripts/tiny_mce/plugins/style/css/props.css (100%) rename {tinymce => library/tinymce}/jscripts/tiny_mce/plugins/style/editor_plugin.js (100%) rename {tinymce => library/tinymce}/jscripts/tiny_mce/plugins/style/editor_plugin_src.js (100%) rename {tinymce => library/tinymce}/jscripts/tiny_mce/plugins/style/js/props.js (100%) rename {tinymce => library/tinymce}/jscripts/tiny_mce/plugins/style/langs/en_dlg.js (100%) rename {tinymce => library/tinymce}/jscripts/tiny_mce/plugins/style/props.htm (100%) rename {tinymce => library/tinymce}/jscripts/tiny_mce/plugins/tabfocus/editor_plugin.js (100%) rename {tinymce => library/tinymce}/jscripts/tiny_mce/plugins/tabfocus/editor_plugin_src.js (100%) rename {tinymce => library/tinymce}/jscripts/tiny_mce/plugins/table/cell.htm (100%) rename {tinymce => library/tinymce}/jscripts/tiny_mce/plugins/table/css/cell.css (100%) rename {tinymce => library/tinymce}/jscripts/tiny_mce/plugins/table/css/row.css (100%) rename {tinymce => library/tinymce}/jscripts/tiny_mce/plugins/table/css/table.css (100%) rename {tinymce => library/tinymce}/jscripts/tiny_mce/plugins/table/editor_plugin.js (100%) rename {tinymce => library/tinymce}/jscripts/tiny_mce/plugins/table/editor_plugin_src.js (100%) rename {tinymce => library/tinymce}/jscripts/tiny_mce/plugins/table/js/cell.js (100%) rename {tinymce => library/tinymce}/jscripts/tiny_mce/plugins/table/js/merge_cells.js (100%) rename {tinymce => library/tinymce}/jscripts/tiny_mce/plugins/table/js/row.js (100%) rename {tinymce => library/tinymce}/jscripts/tiny_mce/plugins/table/js/table.js (100%) rename {tinymce => library/tinymce}/jscripts/tiny_mce/plugins/table/langs/en_dlg.js (100%) rename {tinymce => library/tinymce}/jscripts/tiny_mce/plugins/table/merge_cells.htm (100%) rename {tinymce => library/tinymce}/jscripts/tiny_mce/plugins/table/row.htm (100%) rename {tinymce => library/tinymce}/jscripts/tiny_mce/plugins/table/table.htm (100%) rename {tinymce => library/tinymce}/jscripts/tiny_mce/plugins/template/blank.htm (100%) rename {tinymce => library/tinymce}/jscripts/tiny_mce/plugins/template/css/template.css (100%) rename {tinymce => library/tinymce}/jscripts/tiny_mce/plugins/template/editor_plugin.js (100%) rename {tinymce => library/tinymce}/jscripts/tiny_mce/plugins/template/editor_plugin_src.js (100%) rename {tinymce => library/tinymce}/jscripts/tiny_mce/plugins/template/js/template.js (100%) rename {tinymce => library/tinymce}/jscripts/tiny_mce/plugins/template/langs/en_dlg.js (100%) rename {tinymce => library/tinymce}/jscripts/tiny_mce/plugins/template/template.htm (100%) rename {tinymce => library/tinymce}/jscripts/tiny_mce/plugins/visualchars/editor_plugin.js (100%) rename {tinymce => library/tinymce}/jscripts/tiny_mce/plugins/visualchars/editor_plugin_src.js (100%) rename {tinymce => library/tinymce}/jscripts/tiny_mce/plugins/wordcount/editor_plugin.js (100%) rename {tinymce => library/tinymce}/jscripts/tiny_mce/plugins/wordcount/editor_plugin_src.js (100%) rename {tinymce => library/tinymce}/jscripts/tiny_mce/plugins/xhtmlxtras/abbr.htm (100%) rename {tinymce => library/tinymce}/jscripts/tiny_mce/plugins/xhtmlxtras/acronym.htm (100%) rename {tinymce => library/tinymce}/jscripts/tiny_mce/plugins/xhtmlxtras/attributes.htm (100%) rename {tinymce => library/tinymce}/jscripts/tiny_mce/plugins/xhtmlxtras/cite.htm (100%) rename {tinymce => library/tinymce}/jscripts/tiny_mce/plugins/xhtmlxtras/css/attributes.css (100%) rename {tinymce => library/tinymce}/jscripts/tiny_mce/plugins/xhtmlxtras/css/popup.css (100%) rename {tinymce => library/tinymce}/jscripts/tiny_mce/plugins/xhtmlxtras/del.htm (100%) rename {tinymce => library/tinymce}/jscripts/tiny_mce/plugins/xhtmlxtras/editor_plugin.js (100%) rename {tinymce => library/tinymce}/jscripts/tiny_mce/plugins/xhtmlxtras/editor_plugin_src.js (100%) rename {tinymce => library/tinymce}/jscripts/tiny_mce/plugins/xhtmlxtras/ins.htm (100%) rename {tinymce => library/tinymce}/jscripts/tiny_mce/plugins/xhtmlxtras/js/abbr.js (100%) rename {tinymce => library/tinymce}/jscripts/tiny_mce/plugins/xhtmlxtras/js/acronym.js (100%) rename {tinymce => library/tinymce}/jscripts/tiny_mce/plugins/xhtmlxtras/js/attributes.js (100%) rename {tinymce => library/tinymce}/jscripts/tiny_mce/plugins/xhtmlxtras/js/cite.js (100%) rename {tinymce => library/tinymce}/jscripts/tiny_mce/plugins/xhtmlxtras/js/del.js (100%) rename {tinymce => library/tinymce}/jscripts/tiny_mce/plugins/xhtmlxtras/js/element_common.js (100%) rename {tinymce => library/tinymce}/jscripts/tiny_mce/plugins/xhtmlxtras/js/ins.js (100%) rename {tinymce => library/tinymce}/jscripts/tiny_mce/plugins/xhtmlxtras/langs/en_dlg.js (100%) rename {tinymce => library/tinymce}/jscripts/tiny_mce/themes/advanced/about.htm (100%) rename {tinymce => library/tinymce}/jscripts/tiny_mce/themes/advanced/anchor.htm (100%) rename {tinymce => library/tinymce}/jscripts/tiny_mce/themes/advanced/charmap.htm (100%) rename {tinymce => library/tinymce}/jscripts/tiny_mce/themes/advanced/color_picker.htm (100%) rename {tinymce => library/tinymce}/jscripts/tiny_mce/themes/advanced/editor_template.js (100%) rename {tinymce => library/tinymce}/jscripts/tiny_mce/themes/advanced/editor_template_src.js (100%) rename {tinymce => library/tinymce}/jscripts/tiny_mce/themes/advanced/image.htm (100%) rename {tinymce => library/tinymce}/jscripts/tiny_mce/themes/advanced/img/colorpicker.jpg (100%) rename {tinymce => library/tinymce}/jscripts/tiny_mce/themes/advanced/img/icons.gif (100%) rename {tinymce => library/tinymce}/jscripts/tiny_mce/themes/advanced/js/about.js (100%) rename {tinymce => library/tinymce}/jscripts/tiny_mce/themes/advanced/js/anchor.js (100%) rename {tinymce => library/tinymce}/jscripts/tiny_mce/themes/advanced/js/charmap.js (100%) rename {tinymce => library/tinymce}/jscripts/tiny_mce/themes/advanced/js/color_picker.js (100%) rename {tinymce => library/tinymce}/jscripts/tiny_mce/themes/advanced/js/image.js (100%) rename {tinymce => library/tinymce}/jscripts/tiny_mce/themes/advanced/js/link.js (100%) rename {tinymce => library/tinymce}/jscripts/tiny_mce/themes/advanced/js/source_editor.js (100%) rename {tinymce => library/tinymce}/jscripts/tiny_mce/themes/advanced/langs/en.js (100%) rename {tinymce => library/tinymce}/jscripts/tiny_mce/themes/advanced/langs/en_dlg.js (100%) rename {tinymce => library/tinymce}/jscripts/tiny_mce/themes/advanced/link.htm (100%) rename {tinymce => library/tinymce}/jscripts/tiny_mce/themes/advanced/skins/default/content.css (100%) rename {tinymce => library/tinymce}/jscripts/tiny_mce/themes/advanced/skins/default/dialog.css (100%) rename {tinymce => library/tinymce}/jscripts/tiny_mce/themes/advanced/skins/default/img/buttons.png (100%) rename {tinymce => library/tinymce}/jscripts/tiny_mce/themes/advanced/skins/default/img/items.gif (100%) rename {tinymce => library/tinymce}/jscripts/tiny_mce/themes/advanced/skins/default/img/menu_arrow.gif (100%) rename {tinymce => library/tinymce}/jscripts/tiny_mce/themes/advanced/skins/default/img/menu_check.gif (100%) rename {tinymce => library/tinymce}/jscripts/tiny_mce/themes/advanced/skins/default/img/progress.gif (100%) rename {tinymce => library/tinymce}/jscripts/tiny_mce/themes/advanced/skins/default/img/tabs.gif (100%) rename {tinymce => library/tinymce}/jscripts/tiny_mce/themes/advanced/skins/default/ui.css (100%) rename {tinymce => library/tinymce}/jscripts/tiny_mce/themes/advanced/skins/o2k7/content.css (100%) rename {tinymce => library/tinymce}/jscripts/tiny_mce/themes/advanced/skins/o2k7/dialog.css (100%) rename {tinymce => library/tinymce}/jscripts/tiny_mce/themes/advanced/skins/o2k7/img/button_bg.png (100%) rename {tinymce => library/tinymce}/jscripts/tiny_mce/themes/advanced/skins/o2k7/img/button_bg_black.png (100%) rename {tinymce => library/tinymce}/jscripts/tiny_mce/themes/advanced/skins/o2k7/img/button_bg_silver.png (100%) rename {tinymce => library/tinymce}/jscripts/tiny_mce/themes/advanced/skins/o2k7/ui.css (100%) rename {tinymce => library/tinymce}/jscripts/tiny_mce/themes/advanced/skins/o2k7/ui_black.css (100%) rename {tinymce => library/tinymce}/jscripts/tiny_mce/themes/advanced/skins/o2k7/ui_silver.css (100%) rename {tinymce => library/tinymce}/jscripts/tiny_mce/themes/advanced/source_editor.htm (100%) rename {tinymce => library/tinymce}/jscripts/tiny_mce/themes/simple/editor_template.js (100%) rename {tinymce => library/tinymce}/jscripts/tiny_mce/themes/simple/editor_template_src.js (100%) rename {tinymce => library/tinymce}/jscripts/tiny_mce/themes/simple/img/icons.gif (100%) rename {tinymce => library/tinymce}/jscripts/tiny_mce/themes/simple/langs/en.js (100%) rename {tinymce => library/tinymce}/jscripts/tiny_mce/themes/simple/skins/default/content.css (100%) rename {tinymce => library/tinymce}/jscripts/tiny_mce/themes/simple/skins/default/ui.css (100%) rename {tinymce => library/tinymce}/jscripts/tiny_mce/themes/simple/skins/o2k7/content.css (100%) rename {tinymce => library/tinymce}/jscripts/tiny_mce/themes/simple/skins/o2k7/img/button_bg.png (100%) rename {tinymce => library/tinymce}/jscripts/tiny_mce/themes/simple/skins/o2k7/ui.css (100%) rename {tinymce => library/tinymce}/jscripts/tiny_mce/tiny_mce.js (100%) rename {tinymce => library/tinymce}/jscripts/tiny_mce/tiny_mce_popup.js (100%) rename {tinymce => library/tinymce}/jscripts/tiny_mce/tiny_mce_src.js (100%) rename {tinymce => library/tinymce}/jscripts/tiny_mce/utils/editable_selects.js (100%) rename {tinymce => library/tinymce}/jscripts/tiny_mce/utils/form_utils.js (100%) rename {tinymce => library/tinymce}/jscripts/tiny_mce/utils/mctabs.js (100%) rename {tinymce => library/tinymce}/jscripts/tiny_mce/utils/validate.js (100%) diff --git a/include/Scrape.php b/include/Scrape.php index 553bd529b2..698ec9cf04 100644 --- a/include/Scrape.php +++ b/include/Scrape.php @@ -442,7 +442,7 @@ function probe_url($url) { if(x($feedret,'photo')) $vcard['photo'] = $feedret['photo']; - require_once('simplepie/simplepie.inc'); + require_once('library/simplepie/simplepie.inc'); $feed = new SimplePie(); $xml = fetch_url($poll); diff --git a/include/expire.php b/include/expire.php index 3c30e01c1b..cf3b7c8e2d 100644 --- a/include/expire.php +++ b/include/expire.php @@ -16,9 +16,9 @@ function expire_run($argv, $argc){ unset($db_host, $db_user, $db_pass, $db_data); }; - require_once('session.php'); - require_once('datetime.php'); - require_once('simplepie/simplepie.inc'); + require_once('include/session.php'); + require_once('include/datetime.php'); + require_once('library/simplepie/simplepie.inc'); require_once('include/items.php'); require_once('include/Contact.php'); diff --git a/include/items.php b/include/items.php index 47a38d5e50..63e180f761 100644 --- a/include/items.php +++ b/include/items.php @@ -995,7 +995,7 @@ function dfrn_deliver($owner,$contact,$atom, $dissolve = false) { function consume_feed($xml,$importer,&$contact, &$hub, $datedir = 0, $secure_feed = false) { - require_once('simplepie/simplepie.inc'); + require_once('library/simplepie/simplepie.inc'); $feed = new SimplePie(); $feed->set_raw_data($xml); diff --git a/include/poller.php b/include/poller.php index 7490bfa819..99517a7ee8 100644 --- a/include/poller.php +++ b/include/poller.php @@ -17,9 +17,9 @@ function poller_run($argv, $argc){ }; - require_once('session.php'); - require_once('datetime.php'); - require_once('simplepie/simplepie.inc'); + require_once('include/session.php'); + require_once('include/datetime.php'); + require_once('library/simplepie/simplepie.inc'); require_once('include/items.php'); require_once('include/Contact.php'); require_once('include/email.php'); diff --git a/include/salmon.php b/include/salmon.php index 74da98c93c..c1af1a8526 100644 --- a/include/salmon.php +++ b/include/salmon.php @@ -145,9 +145,9 @@ EOT; // Setup RSA stuff to PKCS#1 sign the data - set_include_path(get_include_path() . PATH_SEPARATOR . 'phpsec'); + set_include_path(get_include_path() . PATH_SEPARATOR . 'library' . PATH_SEPARATOR . 'phpsec'); - require_once('phpsec/Crypt/RSA.php'); + require_once('library/phpsec/Crypt/RSA.php'); $rsa = new CRYPT_RSA(); $rsa->signatureMode = CRYPT_RSA_SIGNATURE_PKCS1; diff --git a/cropper/cropper.css b/library/cropper/cropper.css similarity index 100% rename from cropper/cropper.css rename to library/cropper/cropper.css diff --git a/cropper/cropper.html b/library/cropper/cropper.html similarity index 100% rename from cropper/cropper.html rename to library/cropper/cropper.html diff --git a/cropper/cropper.js b/library/cropper/cropper.js similarity index 100% rename from cropper/cropper.js rename to library/cropper/cropper.js diff --git a/cropper/cropper.uncompressed.js b/library/cropper/cropper.uncompressed.js similarity index 100% rename from cropper/cropper.uncompressed.js rename to library/cropper/cropper.uncompressed.js diff --git a/cropper/lib/builder.js b/library/cropper/lib/builder.js similarity index 100% rename from cropper/lib/builder.js rename to library/cropper/lib/builder.js diff --git a/cropper/lib/controls.js b/library/cropper/lib/controls.js similarity index 100% rename from cropper/lib/controls.js rename to library/cropper/lib/controls.js diff --git a/cropper/lib/dragdrop.js b/library/cropper/lib/dragdrop.js similarity index 100% rename from cropper/lib/dragdrop.js rename to library/cropper/lib/dragdrop.js diff --git a/cropper/lib/effects.js b/library/cropper/lib/effects.js similarity index 100% rename from cropper/lib/effects.js rename to library/cropper/lib/effects.js diff --git a/cropper/lib/prototype.js b/library/cropper/lib/prototype.js similarity index 100% rename from cropper/lib/prototype.js rename to library/cropper/lib/prototype.js diff --git a/cropper/lib/scriptaculous.js b/library/cropper/lib/scriptaculous.js similarity index 100% rename from cropper/lib/scriptaculous.js rename to library/cropper/lib/scriptaculous.js diff --git a/cropper/lib/slider.js b/library/cropper/lib/slider.js similarity index 100% rename from cropper/lib/slider.js rename to library/cropper/lib/slider.js diff --git a/cropper/lib/unittest.js b/library/cropper/lib/unittest.js similarity index 100% rename from cropper/lib/unittest.js rename to library/cropper/lib/unittest.js diff --git a/cropper/licence.txt b/library/cropper/licence.txt similarity index 100% rename from cropper/licence.txt rename to library/cropper/licence.txt diff --git a/cropper/marqueeHoriz.gif b/library/cropper/marqueeHoriz.gif similarity index 100% rename from cropper/marqueeHoriz.gif rename to library/cropper/marqueeHoriz.gif diff --git a/cropper/marqueeVert.gif b/library/cropper/marqueeVert.gif similarity index 100% rename from cropper/marqueeVert.gif rename to library/cropper/marqueeVert.gif diff --git a/cropper/tests/castle.jpg b/library/cropper/tests/castle.jpg similarity index 100% rename from cropper/tests/castle.jpg rename to library/cropper/tests/castle.jpg diff --git a/cropper/tests/castleMed.jpg b/library/cropper/tests/castleMed.jpg similarity index 100% rename from cropper/tests/castleMed.jpg rename to library/cropper/tests/castleMed.jpg diff --git a/cropper/tests/example-Basic.htm b/library/cropper/tests/example-Basic.htm similarity index 100% rename from cropper/tests/example-Basic.htm rename to library/cropper/tests/example-Basic.htm diff --git a/cropper/tests/example-CSS-Absolute.htm b/library/cropper/tests/example-CSS-Absolute.htm similarity index 100% rename from cropper/tests/example-CSS-Absolute.htm rename to library/cropper/tests/example-CSS-Absolute.htm diff --git a/cropper/tests/example-CSS-Float.htm b/library/cropper/tests/example-CSS-Float.htm similarity index 100% rename from cropper/tests/example-CSS-Float.htm rename to library/cropper/tests/example-CSS-Float.htm diff --git a/cropper/tests/example-CSS-Relative.htm b/library/cropper/tests/example-CSS-Relative.htm similarity index 100% rename from cropper/tests/example-CSS-Relative.htm rename to library/cropper/tests/example-CSS-Relative.htm diff --git a/cropper/tests/example-CoordsOnLoad.htm b/library/cropper/tests/example-CoordsOnLoad.htm similarity index 100% rename from cropper/tests/example-CoordsOnLoad.htm rename to library/cropper/tests/example-CoordsOnLoad.htm diff --git a/cropper/tests/example-CoordsOnLoadWithRatio.htm b/library/cropper/tests/example-CoordsOnLoadWithRatio.htm similarity index 100% rename from cropper/tests/example-CoordsOnLoadWithRatio.htm rename to library/cropper/tests/example-CoordsOnLoadWithRatio.htm diff --git a/cropper/tests/example-Dimensions.htm b/library/cropper/tests/example-Dimensions.htm similarity index 100% rename from cropper/tests/example-Dimensions.htm rename to library/cropper/tests/example-Dimensions.htm diff --git a/cropper/tests/example-DynamicImage.htm b/library/cropper/tests/example-DynamicImage.htm similarity index 100% rename from cropper/tests/example-DynamicImage.htm rename to library/cropper/tests/example-DynamicImage.htm diff --git a/cropper/tests/example-FixedRatio.htm b/library/cropper/tests/example-FixedRatio.htm similarity index 100% rename from cropper/tests/example-FixedRatio.htm rename to library/cropper/tests/example-FixedRatio.htm diff --git a/cropper/tests/example-MinimumDimensions.htm b/library/cropper/tests/example-MinimumDimensions.htm similarity index 100% rename from cropper/tests/example-MinimumDimensions.htm rename to library/cropper/tests/example-MinimumDimensions.htm diff --git a/cropper/tests/example-MinimumWidth.htm b/library/cropper/tests/example-MinimumWidth.htm similarity index 100% rename from cropper/tests/example-MinimumWidth.htm rename to library/cropper/tests/example-MinimumWidth.htm diff --git a/cropper/tests/example-Preview.htm b/library/cropper/tests/example-Preview.htm similarity index 100% rename from cropper/tests/example-Preview.htm rename to library/cropper/tests/example-Preview.htm diff --git a/cropper/tests/poppy.jpg b/library/cropper/tests/poppy.jpg similarity index 100% rename from cropper/tests/poppy.jpg rename to library/cropper/tests/poppy.jpg diff --git a/cropper/tests/staticHTMLStructure.htm b/library/cropper/tests/staticHTMLStructure.htm similarity index 100% rename from cropper/tests/staticHTMLStructure.htm rename to library/cropper/tests/staticHTMLStructure.htm diff --git a/phpsec/Crypt/AES.php b/library/phpsec/Crypt/AES.php similarity index 100% rename from phpsec/Crypt/AES.php rename to library/phpsec/Crypt/AES.php diff --git a/phpsec/Crypt/DES.php b/library/phpsec/Crypt/DES.php similarity index 100% rename from phpsec/Crypt/DES.php rename to library/phpsec/Crypt/DES.php diff --git a/phpsec/Crypt/Hash.php b/library/phpsec/Crypt/Hash.php similarity index 100% rename from phpsec/Crypt/Hash.php rename to library/phpsec/Crypt/Hash.php diff --git a/phpsec/Crypt/RC4.php b/library/phpsec/Crypt/RC4.php similarity index 100% rename from phpsec/Crypt/RC4.php rename to library/phpsec/Crypt/RC4.php diff --git a/phpsec/Crypt/RSA.php b/library/phpsec/Crypt/RSA.php similarity index 100% rename from phpsec/Crypt/RSA.php rename to library/phpsec/Crypt/RSA.php diff --git a/phpsec/Crypt/Random.php b/library/phpsec/Crypt/Random.php similarity index 100% rename from phpsec/Crypt/Random.php rename to library/phpsec/Crypt/Random.php diff --git a/phpsec/Crypt/Rijndael.php b/library/phpsec/Crypt/Rijndael.php similarity index 100% rename from phpsec/Crypt/Rijndael.php rename to library/phpsec/Crypt/Rijndael.php diff --git a/phpsec/Crypt/TripleDES.php b/library/phpsec/Crypt/TripleDES.php similarity index 100% rename from phpsec/Crypt/TripleDES.php rename to library/phpsec/Crypt/TripleDES.php diff --git a/phpsec/Math/BigInteger.php b/library/phpsec/Math/BigInteger.php similarity index 100% rename from phpsec/Math/BigInteger.php rename to library/phpsec/Math/BigInteger.php diff --git a/phpsec/Net/SFTP.php b/library/phpsec/Net/SFTP.php similarity index 100% rename from phpsec/Net/SFTP.php rename to library/phpsec/Net/SFTP.php diff --git a/phpsec/Net/SSH1.php b/library/phpsec/Net/SSH1.php similarity index 100% rename from phpsec/Net/SSH1.php rename to library/phpsec/Net/SSH1.php diff --git a/phpsec/Net/SSH2.php b/library/phpsec/Net/SSH2.php similarity index 100% rename from phpsec/Net/SSH2.php rename to library/phpsec/Net/SSH2.php diff --git a/phpsec/PHP/Compat/Function/array_fill.php b/library/phpsec/PHP/Compat/Function/array_fill.php similarity index 100% rename from phpsec/PHP/Compat/Function/array_fill.php rename to library/phpsec/PHP/Compat/Function/array_fill.php diff --git a/phpsec/PHP/Compat/Function/bcpowmod.php b/library/phpsec/PHP/Compat/Function/bcpowmod.php similarity index 100% rename from phpsec/PHP/Compat/Function/bcpowmod.php rename to library/phpsec/PHP/Compat/Function/bcpowmod.php diff --git a/phpsec/PHP/Compat/Function/str_split.php b/library/phpsec/PHP/Compat/Function/str_split.php similarity index 100% rename from phpsec/PHP/Compat/Function/str_split.php rename to library/phpsec/PHP/Compat/Function/str_split.php diff --git a/phpsec/crypt.html b/library/phpsec/crypt.html similarity index 100% rename from phpsec/crypt.html rename to library/phpsec/crypt.html diff --git a/phpsec/docbook.css b/library/phpsec/docbook.css similarity index 100% rename from phpsec/docbook.css rename to library/phpsec/docbook.css diff --git a/phpsec/index.html b/library/phpsec/index.html similarity index 100% rename from phpsec/index.html rename to library/phpsec/index.html diff --git a/phpsec/intro.html b/library/phpsec/intro.html similarity index 100% rename from phpsec/intro.html rename to library/phpsec/intro.html diff --git a/phpsec/math.html b/library/phpsec/math.html similarity index 100% rename from phpsec/math.html rename to library/phpsec/math.html diff --git a/phpsec/misc_crypt.html b/library/phpsec/misc_crypt.html similarity index 100% rename from phpsec/misc_crypt.html rename to library/phpsec/misc_crypt.html diff --git a/phpsec/net.html b/library/phpsec/net.html similarity index 100% rename from phpsec/net.html rename to library/phpsec/net.html diff --git a/phpsec/sym_crypt.html b/library/phpsec/sym_crypt.html similarity index 100% rename from phpsec/sym_crypt.html rename to library/phpsec/sym_crypt.html diff --git a/simplepie/LICENSE.txt b/library/simplepie/LICENSE.txt similarity index 100% rename from simplepie/LICENSE.txt rename to library/simplepie/LICENSE.txt diff --git a/simplepie/README.markdown b/library/simplepie/README.markdown similarity index 100% rename from simplepie/README.markdown rename to library/simplepie/README.markdown diff --git a/simplepie/compatibility_test/COMPATIBILITY README.txt b/library/simplepie/compatibility_test/COMPATIBILITY README.txt similarity index 100% rename from simplepie/compatibility_test/COMPATIBILITY README.txt rename to library/simplepie/compatibility_test/COMPATIBILITY README.txt diff --git a/simplepie/compatibility_test/sp_compatibility_test.php b/library/simplepie/compatibility_test/sp_compatibility_test.php similarity index 100% rename from simplepie/compatibility_test/sp_compatibility_test.php rename to library/simplepie/compatibility_test/sp_compatibility_test.php diff --git a/simplepie/create.php b/library/simplepie/create.php similarity index 100% rename from simplepie/create.php rename to library/simplepie/create.php diff --git a/simplepie/db.sql b/library/simplepie/db.sql similarity index 100% rename from simplepie/db.sql rename to library/simplepie/db.sql diff --git a/simplepie/demo/cli_test.php b/library/simplepie/demo/cli_test.php similarity index 100% rename from simplepie/demo/cli_test.php rename to library/simplepie/demo/cli_test.php diff --git a/simplepie/demo/for_the_demo/alternate_favicon.png b/library/simplepie/demo/for_the_demo/alternate_favicon.png similarity index 100% rename from simplepie/demo/for_the_demo/alternate_favicon.png rename to library/simplepie/demo/for_the_demo/alternate_favicon.png diff --git a/simplepie/demo/for_the_demo/background_blockquote.png b/library/simplepie/demo/for_the_demo/background_blockquote.png similarity index 100% rename from simplepie/demo/for_the_demo/background_blockquote.png rename to library/simplepie/demo/for_the_demo/background_blockquote.png diff --git a/simplepie/demo/for_the_demo/background_menuitem.gif b/library/simplepie/demo/for_the_demo/background_menuitem.gif similarity index 100% rename from simplepie/demo/for_the_demo/background_menuitem.gif rename to library/simplepie/demo/for_the_demo/background_menuitem.gif diff --git a/simplepie/demo/for_the_demo/background_menuitem_off.gif b/library/simplepie/demo/for_the_demo/background_menuitem_off.gif similarity index 100% rename from simplepie/demo/for_the_demo/background_menuitem_off.gif rename to library/simplepie/demo/for_the_demo/background_menuitem_off.gif diff --git a/simplepie/demo/for_the_demo/background_menuitem_shadow.gif b/library/simplepie/demo/for_the_demo/background_menuitem_shadow.gif similarity index 100% rename from simplepie/demo/for_the_demo/background_menuitem_shadow.gif rename to library/simplepie/demo/for_the_demo/background_menuitem_shadow.gif diff --git a/simplepie/demo/for_the_demo/favicons/alternate.png b/library/simplepie/demo/for_the_demo/favicons/alternate.png similarity index 100% rename from simplepie/demo/for_the_demo/favicons/alternate.png rename to library/simplepie/demo/for_the_demo/favicons/alternate.png diff --git a/simplepie/demo/for_the_demo/favicons/blinklist.png b/library/simplepie/demo/for_the_demo/favicons/blinklist.png similarity index 100% rename from simplepie/demo/for_the_demo/favicons/blinklist.png rename to library/simplepie/demo/for_the_demo/favicons/blinklist.png diff --git a/simplepie/demo/for_the_demo/favicons/blogmarks.png b/library/simplepie/demo/for_the_demo/favicons/blogmarks.png similarity index 100% rename from simplepie/demo/for_the_demo/favicons/blogmarks.png rename to library/simplepie/demo/for_the_demo/favicons/blogmarks.png diff --git a/simplepie/demo/for_the_demo/favicons/delicious.png b/library/simplepie/demo/for_the_demo/favicons/delicious.png similarity index 100% rename from simplepie/demo/for_the_demo/favicons/delicious.png rename to library/simplepie/demo/for_the_demo/favicons/delicious.png diff --git a/simplepie/demo/for_the_demo/favicons/digg.png b/library/simplepie/demo/for_the_demo/favicons/digg.png similarity index 100% rename from simplepie/demo/for_the_demo/favicons/digg.png rename to library/simplepie/demo/for_the_demo/favicons/digg.png diff --git a/simplepie/demo/for_the_demo/favicons/magnolia.png b/library/simplepie/demo/for_the_demo/favicons/magnolia.png similarity index 100% rename from simplepie/demo/for_the_demo/favicons/magnolia.png rename to library/simplepie/demo/for_the_demo/favicons/magnolia.png diff --git a/simplepie/demo/for_the_demo/favicons/myweb2.png b/library/simplepie/demo/for_the_demo/favicons/myweb2.png similarity index 100% rename from simplepie/demo/for_the_demo/favicons/myweb2.png rename to library/simplepie/demo/for_the_demo/favicons/myweb2.png diff --git a/simplepie/demo/for_the_demo/favicons/newsvine.png b/library/simplepie/demo/for_the_demo/favicons/newsvine.png similarity index 100% rename from simplepie/demo/for_the_demo/favicons/newsvine.png rename to library/simplepie/demo/for_the_demo/favicons/newsvine.png diff --git a/simplepie/demo/for_the_demo/favicons/reddit.png b/library/simplepie/demo/for_the_demo/favicons/reddit.png similarity index 100% rename from simplepie/demo/for_the_demo/favicons/reddit.png rename to library/simplepie/demo/for_the_demo/favicons/reddit.png diff --git a/simplepie/demo/for_the_demo/favicons/segnalo.png b/library/simplepie/demo/for_the_demo/favicons/segnalo.png similarity index 100% rename from simplepie/demo/for_the_demo/favicons/segnalo.png rename to library/simplepie/demo/for_the_demo/favicons/segnalo.png diff --git a/simplepie/demo/for_the_demo/favicons/simpy.png b/library/simplepie/demo/for_the_demo/favicons/simpy.png similarity index 100% rename from simplepie/demo/for_the_demo/favicons/simpy.png rename to library/simplepie/demo/for_the_demo/favicons/simpy.png diff --git a/simplepie/demo/for_the_demo/favicons/spurl.png b/library/simplepie/demo/for_the_demo/favicons/spurl.png similarity index 100% rename from simplepie/demo/for_the_demo/favicons/spurl.png rename to library/simplepie/demo/for_the_demo/favicons/spurl.png diff --git a/simplepie/demo/for_the_demo/favicons/technorati.png b/library/simplepie/demo/for_the_demo/favicons/technorati.png similarity index 100% rename from simplepie/demo/for_the_demo/favicons/technorati.png rename to library/simplepie/demo/for_the_demo/favicons/technorati.png diff --git a/simplepie/demo/for_the_demo/favicons/wists.png b/library/simplepie/demo/for_the_demo/favicons/wists.png similarity index 100% rename from simplepie/demo/for_the_demo/favicons/wists.png rename to library/simplepie/demo/for_the_demo/favicons/wists.png diff --git a/simplepie/demo/for_the_demo/feed.png b/library/simplepie/demo/for_the_demo/feed.png similarity index 100% rename from simplepie/demo/for_the_demo/feed.png rename to library/simplepie/demo/for_the_demo/feed.png diff --git a/simplepie/demo/for_the_demo/logo_simplepie_demo.png b/library/simplepie/demo/for_the_demo/logo_simplepie_demo.png similarity index 100% rename from simplepie/demo/for_the_demo/logo_simplepie_demo.png rename to library/simplepie/demo/for_the_demo/logo_simplepie_demo.png diff --git a/simplepie/demo/for_the_demo/lucida-grande-bold.swf b/library/simplepie/demo/for_the_demo/lucida-grande-bold.swf similarity index 100% rename from simplepie/demo/for_the_demo/lucida-grande-bold.swf rename to library/simplepie/demo/for_the_demo/lucida-grande-bold.swf diff --git a/simplepie/demo/for_the_demo/mediaplayer.swf b/library/simplepie/demo/for_the_demo/mediaplayer.swf similarity index 100% rename from simplepie/demo/for_the_demo/mediaplayer.swf rename to library/simplepie/demo/for_the_demo/mediaplayer.swf diff --git a/simplepie/demo/for_the_demo/mediaplayer_readme.htm b/library/simplepie/demo/for_the_demo/mediaplayer_readme.htm similarity index 100% rename from simplepie/demo/for_the_demo/mediaplayer_readme.htm rename to library/simplepie/demo/for_the_demo/mediaplayer_readme.htm diff --git a/simplepie/demo/for_the_demo/mini_podcast.png b/library/simplepie/demo/for_the_demo/mini_podcast.png similarity index 100% rename from simplepie/demo/for_the_demo/mini_podcast.png rename to library/simplepie/demo/for_the_demo/mini_podcast.png diff --git a/simplepie/demo/for_the_demo/place_audio.png b/library/simplepie/demo/for_the_demo/place_audio.png similarity index 100% rename from simplepie/demo/for_the_demo/place_audio.png rename to library/simplepie/demo/for_the_demo/place_audio.png diff --git a/simplepie/demo/for_the_demo/place_video.png b/library/simplepie/demo/for_the_demo/place_video.png similarity index 100% rename from simplepie/demo/for_the_demo/place_video.png rename to library/simplepie/demo/for_the_demo/place_video.png diff --git a/simplepie/demo/for_the_demo/sIFR-print.css b/library/simplepie/demo/for_the_demo/sIFR-print.css similarity index 100% rename from simplepie/demo/for_the_demo/sIFR-print.css rename to library/simplepie/demo/for_the_demo/sIFR-print.css diff --git a/simplepie/demo/for_the_demo/sIFR-screen.css b/library/simplepie/demo/for_the_demo/sIFR-screen.css similarity index 100% rename from simplepie/demo/for_the_demo/sIFR-screen.css rename to library/simplepie/demo/for_the_demo/sIFR-screen.css diff --git a/simplepie/demo/for_the_demo/sifr-config.js b/library/simplepie/demo/for_the_demo/sifr-config.js similarity index 100% rename from simplepie/demo/for_the_demo/sifr-config.js rename to library/simplepie/demo/for_the_demo/sifr-config.js diff --git a/simplepie/demo/for_the_demo/sifr.js b/library/simplepie/demo/for_the_demo/sifr.js similarity index 100% rename from simplepie/demo/for_the_demo/sifr.js rename to library/simplepie/demo/for_the_demo/sifr.js diff --git a/simplepie/demo/for_the_demo/simplepie.css b/library/simplepie/demo/for_the_demo/simplepie.css similarity index 100% rename from simplepie/demo/for_the_demo/simplepie.css rename to library/simplepie/demo/for_the_demo/simplepie.css diff --git a/simplepie/demo/for_the_demo/sleight.js b/library/simplepie/demo/for_the_demo/sleight.js similarity index 100% rename from simplepie/demo/for_the_demo/sleight.js rename to library/simplepie/demo/for_the_demo/sleight.js diff --git a/simplepie/demo/for_the_demo/source_files/place_audio_fireworksfile.png b/library/simplepie/demo/for_the_demo/source_files/place_audio_fireworksfile.png similarity index 100% rename from simplepie/demo/for_the_demo/source_files/place_audio_fireworksfile.png rename to library/simplepie/demo/for_the_demo/source_files/place_audio_fireworksfile.png diff --git a/simplepie/demo/for_the_demo/source_files/place_video_fireworksfile.png b/library/simplepie/demo/for_the_demo/source_files/place_video_fireworksfile.png similarity index 100% rename from simplepie/demo/for_the_demo/source_files/place_video_fireworksfile.png rename to library/simplepie/demo/for_the_demo/source_files/place_video_fireworksfile.png diff --git a/simplepie/demo/for_the_demo/source_files/sIFR-r245/SifrStyleSheet.as b/library/simplepie/demo/for_the_demo/source_files/sIFR-r245/SifrStyleSheet.as similarity index 100% rename from simplepie/demo/for_the_demo/source_files/sIFR-r245/SifrStyleSheet.as rename to library/simplepie/demo/for_the_demo/source_files/sIFR-r245/SifrStyleSheet.as diff --git a/simplepie/demo/for_the_demo/source_files/sIFR-r245/_README_.txt b/library/simplepie/demo/for_the_demo/source_files/sIFR-r245/_README_.txt similarity index 100% rename from simplepie/demo/for_the_demo/source_files/sIFR-r245/_README_.txt rename to library/simplepie/demo/for_the_demo/source_files/sIFR-r245/_README_.txt diff --git a/simplepie/demo/for_the_demo/source_files/sIFR-r245/options.as b/library/simplepie/demo/for_the_demo/source_files/sIFR-r245/options.as similarity index 100% rename from simplepie/demo/for_the_demo/source_files/sIFR-r245/options.as rename to library/simplepie/demo/for_the_demo/source_files/sIFR-r245/options.as diff --git a/simplepie/demo/for_the_demo/source_files/sIFR-r245/sIFR.as b/library/simplepie/demo/for_the_demo/source_files/sIFR-r245/sIFR.as similarity index 100% rename from simplepie/demo/for_the_demo/source_files/sIFR-r245/sIFR.as rename to library/simplepie/demo/for_the_demo/source_files/sIFR-r245/sIFR.as diff --git a/simplepie/demo/for_the_demo/source_files/sIFR-r245/sifr.fla b/library/simplepie/demo/for_the_demo/source_files/sIFR-r245/sifr.fla similarity index 100% rename from simplepie/demo/for_the_demo/source_files/sIFR-r245/sifr.fla rename to library/simplepie/demo/for_the_demo/source_files/sIFR-r245/sifr.fla diff --git a/simplepie/demo/for_the_demo/top_gradient.gif b/library/simplepie/demo/for_the_demo/top_gradient.gif similarity index 100% rename from simplepie/demo/for_the_demo/top_gradient.gif rename to library/simplepie/demo/for_the_demo/top_gradient.gif diff --git a/simplepie/demo/for_the_demo/verdana.swf b/library/simplepie/demo/for_the_demo/verdana.swf similarity index 100% rename from simplepie/demo/for_the_demo/verdana.swf rename to library/simplepie/demo/for_the_demo/verdana.swf diff --git a/simplepie/demo/for_the_demo/yanone-kaffeesatz-bold.swf b/library/simplepie/demo/for_the_demo/yanone-kaffeesatz-bold.swf similarity index 100% rename from simplepie/demo/for_the_demo/yanone-kaffeesatz-bold.swf rename to library/simplepie/demo/for_the_demo/yanone-kaffeesatz-bold.swf diff --git a/simplepie/demo/handler_image.php b/library/simplepie/demo/handler_image.php similarity index 100% rename from simplepie/demo/handler_image.php rename to library/simplepie/demo/handler_image.php diff --git a/simplepie/demo/index.php b/library/simplepie/demo/index.php similarity index 100% rename from simplepie/demo/index.php rename to library/simplepie/demo/index.php diff --git a/simplepie/demo/minimalistic.php b/library/simplepie/demo/minimalistic.php similarity index 100% rename from simplepie/demo/minimalistic.php rename to library/simplepie/demo/minimalistic.php diff --git a/simplepie/demo/multifeeds.php b/library/simplepie/demo/multifeeds.php similarity index 100% rename from simplepie/demo/multifeeds.php rename to library/simplepie/demo/multifeeds.php diff --git a/simplepie/demo/test.php b/library/simplepie/demo/test.php similarity index 100% rename from simplepie/demo/test.php rename to library/simplepie/demo/test.php diff --git a/simplepie/idn/LICENCE b/library/simplepie/idn/LICENCE similarity index 100% rename from simplepie/idn/LICENCE rename to library/simplepie/idn/LICENCE diff --git a/simplepie/idn/ReadMe.txt b/library/simplepie/idn/ReadMe.txt similarity index 100% rename from simplepie/idn/ReadMe.txt rename to library/simplepie/idn/ReadMe.txt diff --git a/simplepie/idn/idna_convert.class.php b/library/simplepie/idn/idna_convert.class.php similarity index 100% rename from simplepie/idn/idna_convert.class.php rename to library/simplepie/idn/idna_convert.class.php diff --git a/simplepie/idn/npdata.ser b/library/simplepie/idn/npdata.ser similarity index 100% rename from simplepie/idn/npdata.ser rename to library/simplepie/idn/npdata.ser diff --git a/simplepie/simplepie.inc b/library/simplepie/simplepie.inc similarity index 100% rename from simplepie/simplepie.inc rename to library/simplepie/simplepie.inc diff --git a/tinymce/changelog.txt b/library/tinymce/changelog.txt similarity index 100% rename from tinymce/changelog.txt rename to library/tinymce/changelog.txt diff --git a/tinymce/examples/css/content.css b/library/tinymce/examples/css/content.css similarity index 100% rename from tinymce/examples/css/content.css rename to library/tinymce/examples/css/content.css diff --git a/tinymce/examples/css/word.css b/library/tinymce/examples/css/word.css similarity index 100% rename from tinymce/examples/css/word.css rename to library/tinymce/examples/css/word.css diff --git a/tinymce/examples/custom_formats.html b/library/tinymce/examples/custom_formats.html similarity index 100% rename from tinymce/examples/custom_formats.html rename to library/tinymce/examples/custom_formats.html diff --git a/tinymce/examples/full.html b/library/tinymce/examples/full.html similarity index 100% rename from tinymce/examples/full.html rename to library/tinymce/examples/full.html diff --git a/tinymce/examples/index.html b/library/tinymce/examples/index.html similarity index 100% rename from tinymce/examples/index.html rename to library/tinymce/examples/index.html diff --git a/tinymce/examples/lists/image_list.js b/library/tinymce/examples/lists/image_list.js similarity index 100% rename from tinymce/examples/lists/image_list.js rename to library/tinymce/examples/lists/image_list.js diff --git a/tinymce/examples/lists/link_list.js b/library/tinymce/examples/lists/link_list.js similarity index 100% rename from tinymce/examples/lists/link_list.js rename to library/tinymce/examples/lists/link_list.js diff --git a/tinymce/examples/lists/media_list.js b/library/tinymce/examples/lists/media_list.js similarity index 100% rename from tinymce/examples/lists/media_list.js rename to library/tinymce/examples/lists/media_list.js diff --git a/tinymce/examples/lists/template_list.js b/library/tinymce/examples/lists/template_list.js similarity index 100% rename from tinymce/examples/lists/template_list.js rename to library/tinymce/examples/lists/template_list.js diff --git a/tinymce/examples/media/logo.jpg b/library/tinymce/examples/media/logo.jpg similarity index 100% rename from tinymce/examples/media/logo.jpg rename to library/tinymce/examples/media/logo.jpg diff --git a/tinymce/examples/media/logo_over.jpg b/library/tinymce/examples/media/logo_over.jpg similarity index 100% rename from tinymce/examples/media/logo_over.jpg rename to library/tinymce/examples/media/logo_over.jpg diff --git a/tinymce/examples/media/sample.avi b/library/tinymce/examples/media/sample.avi similarity index 100% rename from tinymce/examples/media/sample.avi rename to library/tinymce/examples/media/sample.avi diff --git a/tinymce/examples/media/sample.dcr b/library/tinymce/examples/media/sample.dcr similarity index 100% rename from tinymce/examples/media/sample.dcr rename to library/tinymce/examples/media/sample.dcr diff --git a/tinymce/examples/media/sample.mov b/library/tinymce/examples/media/sample.mov similarity index 100% rename from tinymce/examples/media/sample.mov rename to library/tinymce/examples/media/sample.mov diff --git a/tinymce/examples/media/sample.ram b/library/tinymce/examples/media/sample.ram similarity index 100% rename from tinymce/examples/media/sample.ram rename to library/tinymce/examples/media/sample.ram diff --git a/tinymce/examples/media/sample.rm b/library/tinymce/examples/media/sample.rm similarity index 100% rename from tinymce/examples/media/sample.rm rename to library/tinymce/examples/media/sample.rm diff --git a/tinymce/examples/media/sample.swf b/library/tinymce/examples/media/sample.swf similarity index 100% rename from tinymce/examples/media/sample.swf rename to library/tinymce/examples/media/sample.swf diff --git a/tinymce/examples/menu.html b/library/tinymce/examples/menu.html similarity index 100% rename from tinymce/examples/menu.html rename to library/tinymce/examples/menu.html diff --git a/tinymce/examples/simple.html b/library/tinymce/examples/simple.html similarity index 100% rename from tinymce/examples/simple.html rename to library/tinymce/examples/simple.html diff --git a/tinymce/examples/skins.html b/library/tinymce/examples/skins.html similarity index 100% rename from tinymce/examples/skins.html rename to library/tinymce/examples/skins.html diff --git a/tinymce/examples/templates/layout1.htm b/library/tinymce/examples/templates/layout1.htm similarity index 100% rename from tinymce/examples/templates/layout1.htm rename to library/tinymce/examples/templates/layout1.htm diff --git a/tinymce/examples/templates/snippet1.htm b/library/tinymce/examples/templates/snippet1.htm similarity index 100% rename from tinymce/examples/templates/snippet1.htm rename to library/tinymce/examples/templates/snippet1.htm diff --git a/tinymce/examples/translate.html b/library/tinymce/examples/translate.html similarity index 100% rename from tinymce/examples/translate.html rename to library/tinymce/examples/translate.html diff --git a/tinymce/examples/word.html b/library/tinymce/examples/word.html similarity index 100% rename from tinymce/examples/word.html rename to library/tinymce/examples/word.html diff --git a/tinymce/jscripts/tiny_mce/langs/en.js b/library/tinymce/jscripts/tiny_mce/langs/en.js similarity index 100% rename from tinymce/jscripts/tiny_mce/langs/en.js rename to library/tinymce/jscripts/tiny_mce/langs/en.js diff --git a/tinymce/jscripts/tiny_mce/license.txt b/library/tinymce/jscripts/tiny_mce/license.txt similarity index 100% rename from tinymce/jscripts/tiny_mce/license.txt rename to library/tinymce/jscripts/tiny_mce/license.txt diff --git a/tinymce/jscripts/tiny_mce/plugins/advhr/css/advhr.css b/library/tinymce/jscripts/tiny_mce/plugins/advhr/css/advhr.css similarity index 100% rename from tinymce/jscripts/tiny_mce/plugins/advhr/css/advhr.css rename to library/tinymce/jscripts/tiny_mce/plugins/advhr/css/advhr.css diff --git a/tinymce/jscripts/tiny_mce/plugins/advhr/editor_plugin.js b/library/tinymce/jscripts/tiny_mce/plugins/advhr/editor_plugin.js similarity index 100% rename from tinymce/jscripts/tiny_mce/plugins/advhr/editor_plugin.js rename to library/tinymce/jscripts/tiny_mce/plugins/advhr/editor_plugin.js diff --git a/tinymce/jscripts/tiny_mce/plugins/advhr/editor_plugin_src.js b/library/tinymce/jscripts/tiny_mce/plugins/advhr/editor_plugin_src.js similarity index 100% rename from tinymce/jscripts/tiny_mce/plugins/advhr/editor_plugin_src.js rename to library/tinymce/jscripts/tiny_mce/plugins/advhr/editor_plugin_src.js diff --git a/tinymce/jscripts/tiny_mce/plugins/advhr/js/rule.js b/library/tinymce/jscripts/tiny_mce/plugins/advhr/js/rule.js similarity index 100% rename from tinymce/jscripts/tiny_mce/plugins/advhr/js/rule.js rename to library/tinymce/jscripts/tiny_mce/plugins/advhr/js/rule.js diff --git a/tinymce/jscripts/tiny_mce/plugins/advhr/langs/en_dlg.js b/library/tinymce/jscripts/tiny_mce/plugins/advhr/langs/en_dlg.js similarity index 100% rename from tinymce/jscripts/tiny_mce/plugins/advhr/langs/en_dlg.js rename to library/tinymce/jscripts/tiny_mce/plugins/advhr/langs/en_dlg.js diff --git a/tinymce/jscripts/tiny_mce/plugins/advhr/rule.htm b/library/tinymce/jscripts/tiny_mce/plugins/advhr/rule.htm similarity index 100% rename from tinymce/jscripts/tiny_mce/plugins/advhr/rule.htm rename to library/tinymce/jscripts/tiny_mce/plugins/advhr/rule.htm diff --git a/tinymce/jscripts/tiny_mce/plugins/advimage/css/advimage.css b/library/tinymce/jscripts/tiny_mce/plugins/advimage/css/advimage.css similarity index 100% rename from tinymce/jscripts/tiny_mce/plugins/advimage/css/advimage.css rename to library/tinymce/jscripts/tiny_mce/plugins/advimage/css/advimage.css diff --git a/tinymce/jscripts/tiny_mce/plugins/advimage/editor_plugin.js b/library/tinymce/jscripts/tiny_mce/plugins/advimage/editor_plugin.js similarity index 100% rename from tinymce/jscripts/tiny_mce/plugins/advimage/editor_plugin.js rename to library/tinymce/jscripts/tiny_mce/plugins/advimage/editor_plugin.js diff --git a/tinymce/jscripts/tiny_mce/plugins/advimage/editor_plugin_src.js b/library/tinymce/jscripts/tiny_mce/plugins/advimage/editor_plugin_src.js similarity index 100% rename from tinymce/jscripts/tiny_mce/plugins/advimage/editor_plugin_src.js rename to library/tinymce/jscripts/tiny_mce/plugins/advimage/editor_plugin_src.js diff --git a/tinymce/jscripts/tiny_mce/plugins/advimage/image.htm b/library/tinymce/jscripts/tiny_mce/plugins/advimage/image.htm similarity index 100% rename from tinymce/jscripts/tiny_mce/plugins/advimage/image.htm rename to library/tinymce/jscripts/tiny_mce/plugins/advimage/image.htm diff --git a/tinymce/jscripts/tiny_mce/plugins/advimage/img/sample.gif b/library/tinymce/jscripts/tiny_mce/plugins/advimage/img/sample.gif similarity index 100% rename from tinymce/jscripts/tiny_mce/plugins/advimage/img/sample.gif rename to library/tinymce/jscripts/tiny_mce/plugins/advimage/img/sample.gif diff --git a/tinymce/jscripts/tiny_mce/plugins/advimage/js/image.js b/library/tinymce/jscripts/tiny_mce/plugins/advimage/js/image.js similarity index 100% rename from tinymce/jscripts/tiny_mce/plugins/advimage/js/image.js rename to library/tinymce/jscripts/tiny_mce/plugins/advimage/js/image.js diff --git a/tinymce/jscripts/tiny_mce/plugins/advimage/langs/en_dlg.js b/library/tinymce/jscripts/tiny_mce/plugins/advimage/langs/en_dlg.js similarity index 100% rename from tinymce/jscripts/tiny_mce/plugins/advimage/langs/en_dlg.js rename to library/tinymce/jscripts/tiny_mce/plugins/advimage/langs/en_dlg.js diff --git a/tinymce/jscripts/tiny_mce/plugins/advlink/css/advlink.css b/library/tinymce/jscripts/tiny_mce/plugins/advlink/css/advlink.css similarity index 100% rename from tinymce/jscripts/tiny_mce/plugins/advlink/css/advlink.css rename to library/tinymce/jscripts/tiny_mce/plugins/advlink/css/advlink.css diff --git a/tinymce/jscripts/tiny_mce/plugins/advlink/editor_plugin.js b/library/tinymce/jscripts/tiny_mce/plugins/advlink/editor_plugin.js similarity index 100% rename from tinymce/jscripts/tiny_mce/plugins/advlink/editor_plugin.js rename to library/tinymce/jscripts/tiny_mce/plugins/advlink/editor_plugin.js diff --git a/tinymce/jscripts/tiny_mce/plugins/advlink/editor_plugin_src.js b/library/tinymce/jscripts/tiny_mce/plugins/advlink/editor_plugin_src.js similarity index 100% rename from tinymce/jscripts/tiny_mce/plugins/advlink/editor_plugin_src.js rename to library/tinymce/jscripts/tiny_mce/plugins/advlink/editor_plugin_src.js diff --git a/tinymce/jscripts/tiny_mce/plugins/advlink/js/advlink.js b/library/tinymce/jscripts/tiny_mce/plugins/advlink/js/advlink.js similarity index 100% rename from tinymce/jscripts/tiny_mce/plugins/advlink/js/advlink.js rename to library/tinymce/jscripts/tiny_mce/plugins/advlink/js/advlink.js diff --git a/tinymce/jscripts/tiny_mce/plugins/advlink/langs/en_dlg.js b/library/tinymce/jscripts/tiny_mce/plugins/advlink/langs/en_dlg.js similarity index 100% rename from tinymce/jscripts/tiny_mce/plugins/advlink/langs/en_dlg.js rename to library/tinymce/jscripts/tiny_mce/plugins/advlink/langs/en_dlg.js diff --git a/tinymce/jscripts/tiny_mce/plugins/advlink/link.htm b/library/tinymce/jscripts/tiny_mce/plugins/advlink/link.htm similarity index 100% rename from tinymce/jscripts/tiny_mce/plugins/advlink/link.htm rename to library/tinymce/jscripts/tiny_mce/plugins/advlink/link.htm diff --git a/tinymce/jscripts/tiny_mce/plugins/advlist/editor_plugin.js b/library/tinymce/jscripts/tiny_mce/plugins/advlist/editor_plugin.js similarity index 100% rename from tinymce/jscripts/tiny_mce/plugins/advlist/editor_plugin.js rename to library/tinymce/jscripts/tiny_mce/plugins/advlist/editor_plugin.js diff --git a/tinymce/jscripts/tiny_mce/plugins/advlist/editor_plugin_src.js b/library/tinymce/jscripts/tiny_mce/plugins/advlist/editor_plugin_src.js similarity index 100% rename from tinymce/jscripts/tiny_mce/plugins/advlist/editor_plugin_src.js rename to library/tinymce/jscripts/tiny_mce/plugins/advlist/editor_plugin_src.js diff --git a/tinymce/jscripts/tiny_mce/plugins/autoresize/editor_plugin.js b/library/tinymce/jscripts/tiny_mce/plugins/autoresize/editor_plugin.js similarity index 100% rename from tinymce/jscripts/tiny_mce/plugins/autoresize/editor_plugin.js rename to library/tinymce/jscripts/tiny_mce/plugins/autoresize/editor_plugin.js diff --git a/tinymce/jscripts/tiny_mce/plugins/autoresize/editor_plugin_src.js b/library/tinymce/jscripts/tiny_mce/plugins/autoresize/editor_plugin_src.js similarity index 100% rename from tinymce/jscripts/tiny_mce/plugins/autoresize/editor_plugin_src.js rename to library/tinymce/jscripts/tiny_mce/plugins/autoresize/editor_plugin_src.js diff --git a/tinymce/jscripts/tiny_mce/plugins/autosave/editor_plugin.js b/library/tinymce/jscripts/tiny_mce/plugins/autosave/editor_plugin.js similarity index 100% rename from tinymce/jscripts/tiny_mce/plugins/autosave/editor_plugin.js rename to library/tinymce/jscripts/tiny_mce/plugins/autosave/editor_plugin.js diff --git a/tinymce/jscripts/tiny_mce/plugins/autosave/editor_plugin_src.js b/library/tinymce/jscripts/tiny_mce/plugins/autosave/editor_plugin_src.js similarity index 100% rename from tinymce/jscripts/tiny_mce/plugins/autosave/editor_plugin_src.js rename to library/tinymce/jscripts/tiny_mce/plugins/autosave/editor_plugin_src.js diff --git a/tinymce/jscripts/tiny_mce/plugins/autosave/langs/en.js b/library/tinymce/jscripts/tiny_mce/plugins/autosave/langs/en.js similarity index 100% rename from tinymce/jscripts/tiny_mce/plugins/autosave/langs/en.js rename to library/tinymce/jscripts/tiny_mce/plugins/autosave/langs/en.js diff --git a/tinymce/jscripts/tiny_mce/plugins/bbcode/editor_plugin.js b/library/tinymce/jscripts/tiny_mce/plugins/bbcode/editor_plugin.js similarity index 100% rename from tinymce/jscripts/tiny_mce/plugins/bbcode/editor_plugin.js rename to library/tinymce/jscripts/tiny_mce/plugins/bbcode/editor_plugin.js diff --git a/tinymce/jscripts/tiny_mce/plugins/bbcode/editor_plugin_src.js b/library/tinymce/jscripts/tiny_mce/plugins/bbcode/editor_plugin_src.js similarity index 100% rename from tinymce/jscripts/tiny_mce/plugins/bbcode/editor_plugin_src.js rename to library/tinymce/jscripts/tiny_mce/plugins/bbcode/editor_plugin_src.js diff --git a/tinymce/jscripts/tiny_mce/plugins/contextmenu/editor_plugin.js b/library/tinymce/jscripts/tiny_mce/plugins/contextmenu/editor_plugin.js similarity index 100% rename from tinymce/jscripts/tiny_mce/plugins/contextmenu/editor_plugin.js rename to library/tinymce/jscripts/tiny_mce/plugins/contextmenu/editor_plugin.js diff --git a/tinymce/jscripts/tiny_mce/plugins/contextmenu/editor_plugin_src.js b/library/tinymce/jscripts/tiny_mce/plugins/contextmenu/editor_plugin_src.js similarity index 100% rename from tinymce/jscripts/tiny_mce/plugins/contextmenu/editor_plugin_src.js rename to library/tinymce/jscripts/tiny_mce/plugins/contextmenu/editor_plugin_src.js diff --git a/tinymce/jscripts/tiny_mce/plugins/directionality/editor_plugin.js b/library/tinymce/jscripts/tiny_mce/plugins/directionality/editor_plugin.js similarity index 100% rename from tinymce/jscripts/tiny_mce/plugins/directionality/editor_plugin.js rename to library/tinymce/jscripts/tiny_mce/plugins/directionality/editor_plugin.js diff --git a/tinymce/jscripts/tiny_mce/plugins/directionality/editor_plugin_src.js b/library/tinymce/jscripts/tiny_mce/plugins/directionality/editor_plugin_src.js similarity index 100% rename from tinymce/jscripts/tiny_mce/plugins/directionality/editor_plugin_src.js rename to library/tinymce/jscripts/tiny_mce/plugins/directionality/editor_plugin_src.js diff --git a/tinymce/jscripts/tiny_mce/plugins/emotions/editor_plugin.js b/library/tinymce/jscripts/tiny_mce/plugins/emotions/editor_plugin.js similarity index 100% rename from tinymce/jscripts/tiny_mce/plugins/emotions/editor_plugin.js rename to library/tinymce/jscripts/tiny_mce/plugins/emotions/editor_plugin.js diff --git a/tinymce/jscripts/tiny_mce/plugins/emotions/editor_plugin_src.js b/library/tinymce/jscripts/tiny_mce/plugins/emotions/editor_plugin_src.js similarity index 100% rename from tinymce/jscripts/tiny_mce/plugins/emotions/editor_plugin_src.js rename to library/tinymce/jscripts/tiny_mce/plugins/emotions/editor_plugin_src.js diff --git a/tinymce/jscripts/tiny_mce/plugins/emotions/emotions.htm b/library/tinymce/jscripts/tiny_mce/plugins/emotions/emotions.htm similarity index 100% rename from tinymce/jscripts/tiny_mce/plugins/emotions/emotions.htm rename to library/tinymce/jscripts/tiny_mce/plugins/emotions/emotions.htm diff --git a/tinymce/jscripts/tiny_mce/plugins/emotions/img/smiley-cool.gif b/library/tinymce/jscripts/tiny_mce/plugins/emotions/img/smiley-cool.gif similarity index 100% rename from tinymce/jscripts/tiny_mce/plugins/emotions/img/smiley-cool.gif rename to library/tinymce/jscripts/tiny_mce/plugins/emotions/img/smiley-cool.gif diff --git a/tinymce/jscripts/tiny_mce/plugins/emotions/img/smiley-cry.gif b/library/tinymce/jscripts/tiny_mce/plugins/emotions/img/smiley-cry.gif similarity index 100% rename from tinymce/jscripts/tiny_mce/plugins/emotions/img/smiley-cry.gif rename to library/tinymce/jscripts/tiny_mce/plugins/emotions/img/smiley-cry.gif diff --git a/tinymce/jscripts/tiny_mce/plugins/emotions/img/smiley-embarassed.gif b/library/tinymce/jscripts/tiny_mce/plugins/emotions/img/smiley-embarassed.gif similarity index 100% rename from tinymce/jscripts/tiny_mce/plugins/emotions/img/smiley-embarassed.gif rename to library/tinymce/jscripts/tiny_mce/plugins/emotions/img/smiley-embarassed.gif diff --git a/tinymce/jscripts/tiny_mce/plugins/emotions/img/smiley-foot-in-mouth.gif b/library/tinymce/jscripts/tiny_mce/plugins/emotions/img/smiley-foot-in-mouth.gif similarity index 100% rename from tinymce/jscripts/tiny_mce/plugins/emotions/img/smiley-foot-in-mouth.gif rename to library/tinymce/jscripts/tiny_mce/plugins/emotions/img/smiley-foot-in-mouth.gif diff --git a/tinymce/jscripts/tiny_mce/plugins/emotions/img/smiley-frown.gif b/library/tinymce/jscripts/tiny_mce/plugins/emotions/img/smiley-frown.gif similarity index 100% rename from tinymce/jscripts/tiny_mce/plugins/emotions/img/smiley-frown.gif rename to library/tinymce/jscripts/tiny_mce/plugins/emotions/img/smiley-frown.gif diff --git a/tinymce/jscripts/tiny_mce/plugins/emotions/img/smiley-innocent.gif b/library/tinymce/jscripts/tiny_mce/plugins/emotions/img/smiley-innocent.gif similarity index 100% rename from tinymce/jscripts/tiny_mce/plugins/emotions/img/smiley-innocent.gif rename to library/tinymce/jscripts/tiny_mce/plugins/emotions/img/smiley-innocent.gif diff --git a/tinymce/jscripts/tiny_mce/plugins/emotions/img/smiley-kiss.gif b/library/tinymce/jscripts/tiny_mce/plugins/emotions/img/smiley-kiss.gif similarity index 100% rename from tinymce/jscripts/tiny_mce/plugins/emotions/img/smiley-kiss.gif rename to library/tinymce/jscripts/tiny_mce/plugins/emotions/img/smiley-kiss.gif diff --git a/tinymce/jscripts/tiny_mce/plugins/emotions/img/smiley-laughing.gif b/library/tinymce/jscripts/tiny_mce/plugins/emotions/img/smiley-laughing.gif similarity index 100% rename from tinymce/jscripts/tiny_mce/plugins/emotions/img/smiley-laughing.gif rename to library/tinymce/jscripts/tiny_mce/plugins/emotions/img/smiley-laughing.gif diff --git a/tinymce/jscripts/tiny_mce/plugins/emotions/img/smiley-money-mouth.gif b/library/tinymce/jscripts/tiny_mce/plugins/emotions/img/smiley-money-mouth.gif similarity index 100% rename from tinymce/jscripts/tiny_mce/plugins/emotions/img/smiley-money-mouth.gif rename to library/tinymce/jscripts/tiny_mce/plugins/emotions/img/smiley-money-mouth.gif diff --git a/tinymce/jscripts/tiny_mce/plugins/emotions/img/smiley-sealed.gif b/library/tinymce/jscripts/tiny_mce/plugins/emotions/img/smiley-sealed.gif similarity index 100% rename from tinymce/jscripts/tiny_mce/plugins/emotions/img/smiley-sealed.gif rename to library/tinymce/jscripts/tiny_mce/plugins/emotions/img/smiley-sealed.gif diff --git a/tinymce/jscripts/tiny_mce/plugins/emotions/img/smiley-smile.gif b/library/tinymce/jscripts/tiny_mce/plugins/emotions/img/smiley-smile.gif similarity index 100% rename from tinymce/jscripts/tiny_mce/plugins/emotions/img/smiley-smile.gif rename to library/tinymce/jscripts/tiny_mce/plugins/emotions/img/smiley-smile.gif diff --git a/tinymce/jscripts/tiny_mce/plugins/emotions/img/smiley-surprised.gif b/library/tinymce/jscripts/tiny_mce/plugins/emotions/img/smiley-surprised.gif similarity index 100% rename from tinymce/jscripts/tiny_mce/plugins/emotions/img/smiley-surprised.gif rename to library/tinymce/jscripts/tiny_mce/plugins/emotions/img/smiley-surprised.gif diff --git a/tinymce/jscripts/tiny_mce/plugins/emotions/img/smiley-tongue-out.gif b/library/tinymce/jscripts/tiny_mce/plugins/emotions/img/smiley-tongue-out.gif similarity index 100% rename from tinymce/jscripts/tiny_mce/plugins/emotions/img/smiley-tongue-out.gif rename to library/tinymce/jscripts/tiny_mce/plugins/emotions/img/smiley-tongue-out.gif diff --git a/tinymce/jscripts/tiny_mce/plugins/emotions/img/smiley-undecided.gif b/library/tinymce/jscripts/tiny_mce/plugins/emotions/img/smiley-undecided.gif similarity index 100% rename from tinymce/jscripts/tiny_mce/plugins/emotions/img/smiley-undecided.gif rename to library/tinymce/jscripts/tiny_mce/plugins/emotions/img/smiley-undecided.gif diff --git a/tinymce/jscripts/tiny_mce/plugins/emotions/img/smiley-wink.gif b/library/tinymce/jscripts/tiny_mce/plugins/emotions/img/smiley-wink.gif similarity index 100% rename from tinymce/jscripts/tiny_mce/plugins/emotions/img/smiley-wink.gif rename to library/tinymce/jscripts/tiny_mce/plugins/emotions/img/smiley-wink.gif diff --git a/tinymce/jscripts/tiny_mce/plugins/emotions/img/smiley-yell.gif b/library/tinymce/jscripts/tiny_mce/plugins/emotions/img/smiley-yell.gif similarity index 100% rename from tinymce/jscripts/tiny_mce/plugins/emotions/img/smiley-yell.gif rename to library/tinymce/jscripts/tiny_mce/plugins/emotions/img/smiley-yell.gif diff --git a/tinymce/jscripts/tiny_mce/plugins/emotions/js/emotions.js b/library/tinymce/jscripts/tiny_mce/plugins/emotions/js/emotions.js similarity index 100% rename from tinymce/jscripts/tiny_mce/plugins/emotions/js/emotions.js rename to library/tinymce/jscripts/tiny_mce/plugins/emotions/js/emotions.js diff --git a/tinymce/jscripts/tiny_mce/plugins/emotions/langs/en_dlg.js b/library/tinymce/jscripts/tiny_mce/plugins/emotions/langs/en_dlg.js similarity index 100% rename from tinymce/jscripts/tiny_mce/plugins/emotions/langs/en_dlg.js rename to library/tinymce/jscripts/tiny_mce/plugins/emotions/langs/en_dlg.js diff --git a/tinymce/jscripts/tiny_mce/plugins/example/dialog.htm b/library/tinymce/jscripts/tiny_mce/plugins/example/dialog.htm similarity index 100% rename from tinymce/jscripts/tiny_mce/plugins/example/dialog.htm rename to library/tinymce/jscripts/tiny_mce/plugins/example/dialog.htm diff --git a/tinymce/jscripts/tiny_mce/plugins/example/editor_plugin.js b/library/tinymce/jscripts/tiny_mce/plugins/example/editor_plugin.js similarity index 100% rename from tinymce/jscripts/tiny_mce/plugins/example/editor_plugin.js rename to library/tinymce/jscripts/tiny_mce/plugins/example/editor_plugin.js diff --git a/tinymce/jscripts/tiny_mce/plugins/example/editor_plugin_src.js b/library/tinymce/jscripts/tiny_mce/plugins/example/editor_plugin_src.js similarity index 100% rename from tinymce/jscripts/tiny_mce/plugins/example/editor_plugin_src.js rename to library/tinymce/jscripts/tiny_mce/plugins/example/editor_plugin_src.js diff --git a/tinymce/jscripts/tiny_mce/plugins/example/img/example.gif b/library/tinymce/jscripts/tiny_mce/plugins/example/img/example.gif similarity index 100% rename from tinymce/jscripts/tiny_mce/plugins/example/img/example.gif rename to library/tinymce/jscripts/tiny_mce/plugins/example/img/example.gif diff --git a/tinymce/jscripts/tiny_mce/plugins/example/js/dialog.js b/library/tinymce/jscripts/tiny_mce/plugins/example/js/dialog.js similarity index 100% rename from tinymce/jscripts/tiny_mce/plugins/example/js/dialog.js rename to library/tinymce/jscripts/tiny_mce/plugins/example/js/dialog.js diff --git a/tinymce/jscripts/tiny_mce/plugins/example/langs/en.js b/library/tinymce/jscripts/tiny_mce/plugins/example/langs/en.js similarity index 100% rename from tinymce/jscripts/tiny_mce/plugins/example/langs/en.js rename to library/tinymce/jscripts/tiny_mce/plugins/example/langs/en.js diff --git a/tinymce/jscripts/tiny_mce/plugins/example/langs/en_dlg.js b/library/tinymce/jscripts/tiny_mce/plugins/example/langs/en_dlg.js similarity index 100% rename from tinymce/jscripts/tiny_mce/plugins/example/langs/en_dlg.js rename to library/tinymce/jscripts/tiny_mce/plugins/example/langs/en_dlg.js diff --git a/tinymce/jscripts/tiny_mce/plugins/fullpage/css/fullpage.css b/library/tinymce/jscripts/tiny_mce/plugins/fullpage/css/fullpage.css similarity index 100% rename from tinymce/jscripts/tiny_mce/plugins/fullpage/css/fullpage.css rename to library/tinymce/jscripts/tiny_mce/plugins/fullpage/css/fullpage.css diff --git a/tinymce/jscripts/tiny_mce/plugins/fullpage/editor_plugin.js b/library/tinymce/jscripts/tiny_mce/plugins/fullpage/editor_plugin.js similarity index 100% rename from tinymce/jscripts/tiny_mce/plugins/fullpage/editor_plugin.js rename to library/tinymce/jscripts/tiny_mce/plugins/fullpage/editor_plugin.js diff --git a/tinymce/jscripts/tiny_mce/plugins/fullpage/editor_plugin_src.js b/library/tinymce/jscripts/tiny_mce/plugins/fullpage/editor_plugin_src.js similarity index 100% rename from tinymce/jscripts/tiny_mce/plugins/fullpage/editor_plugin_src.js rename to library/tinymce/jscripts/tiny_mce/plugins/fullpage/editor_plugin_src.js diff --git a/tinymce/jscripts/tiny_mce/plugins/fullpage/fullpage.htm b/library/tinymce/jscripts/tiny_mce/plugins/fullpage/fullpage.htm similarity index 100% rename from tinymce/jscripts/tiny_mce/plugins/fullpage/fullpage.htm rename to library/tinymce/jscripts/tiny_mce/plugins/fullpage/fullpage.htm diff --git a/tinymce/jscripts/tiny_mce/plugins/fullpage/js/fullpage.js b/library/tinymce/jscripts/tiny_mce/plugins/fullpage/js/fullpage.js similarity index 100% rename from tinymce/jscripts/tiny_mce/plugins/fullpage/js/fullpage.js rename to library/tinymce/jscripts/tiny_mce/plugins/fullpage/js/fullpage.js diff --git a/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/en_dlg.js b/library/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/en_dlg.js similarity index 100% rename from tinymce/jscripts/tiny_mce/plugins/fullpage/langs/en_dlg.js rename to library/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/en_dlg.js diff --git a/tinymce/jscripts/tiny_mce/plugins/fullscreen/editor_plugin.js b/library/tinymce/jscripts/tiny_mce/plugins/fullscreen/editor_plugin.js similarity index 100% rename from tinymce/jscripts/tiny_mce/plugins/fullscreen/editor_plugin.js rename to library/tinymce/jscripts/tiny_mce/plugins/fullscreen/editor_plugin.js diff --git a/tinymce/jscripts/tiny_mce/plugins/fullscreen/editor_plugin_src.js b/library/tinymce/jscripts/tiny_mce/plugins/fullscreen/editor_plugin_src.js similarity index 100% rename from tinymce/jscripts/tiny_mce/plugins/fullscreen/editor_plugin_src.js rename to library/tinymce/jscripts/tiny_mce/plugins/fullscreen/editor_plugin_src.js diff --git a/tinymce/jscripts/tiny_mce/plugins/fullscreen/fullscreen.htm b/library/tinymce/jscripts/tiny_mce/plugins/fullscreen/fullscreen.htm similarity index 100% rename from tinymce/jscripts/tiny_mce/plugins/fullscreen/fullscreen.htm rename to library/tinymce/jscripts/tiny_mce/plugins/fullscreen/fullscreen.htm diff --git a/tinymce/jscripts/tiny_mce/plugins/iespell/editor_plugin.js b/library/tinymce/jscripts/tiny_mce/plugins/iespell/editor_plugin.js similarity index 100% rename from tinymce/jscripts/tiny_mce/plugins/iespell/editor_plugin.js rename to library/tinymce/jscripts/tiny_mce/plugins/iespell/editor_plugin.js diff --git a/tinymce/jscripts/tiny_mce/plugins/iespell/editor_plugin_src.js b/library/tinymce/jscripts/tiny_mce/plugins/iespell/editor_plugin_src.js similarity index 100% rename from tinymce/jscripts/tiny_mce/plugins/iespell/editor_plugin_src.js rename to library/tinymce/jscripts/tiny_mce/plugins/iespell/editor_plugin_src.js diff --git a/tinymce/jscripts/tiny_mce/plugins/inlinepopups/editor_plugin.js b/library/tinymce/jscripts/tiny_mce/plugins/inlinepopups/editor_plugin.js similarity index 100% rename from tinymce/jscripts/tiny_mce/plugins/inlinepopups/editor_plugin.js rename to library/tinymce/jscripts/tiny_mce/plugins/inlinepopups/editor_plugin.js diff --git a/tinymce/jscripts/tiny_mce/plugins/inlinepopups/editor_plugin_src.js b/library/tinymce/jscripts/tiny_mce/plugins/inlinepopups/editor_plugin_src.js similarity index 100% rename from tinymce/jscripts/tiny_mce/plugins/inlinepopups/editor_plugin_src.js rename to library/tinymce/jscripts/tiny_mce/plugins/inlinepopups/editor_plugin_src.js diff --git a/tinymce/jscripts/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/alert.gif b/library/tinymce/jscripts/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/alert.gif similarity index 100% rename from tinymce/jscripts/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/alert.gif rename to library/tinymce/jscripts/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/alert.gif diff --git a/tinymce/jscripts/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/button.gif b/library/tinymce/jscripts/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/button.gif similarity index 100% rename from tinymce/jscripts/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/button.gif rename to library/tinymce/jscripts/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/button.gif diff --git a/tinymce/jscripts/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/buttons.gif b/library/tinymce/jscripts/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/buttons.gif similarity index 100% rename from tinymce/jscripts/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/buttons.gif rename to library/tinymce/jscripts/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/buttons.gif diff --git a/tinymce/jscripts/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/confirm.gif b/library/tinymce/jscripts/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/confirm.gif similarity index 100% rename from tinymce/jscripts/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/confirm.gif rename to library/tinymce/jscripts/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/confirm.gif diff --git a/tinymce/jscripts/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/corners.gif b/library/tinymce/jscripts/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/corners.gif similarity index 100% rename from tinymce/jscripts/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/corners.gif rename to library/tinymce/jscripts/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/corners.gif diff --git a/tinymce/jscripts/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/horizontal.gif b/library/tinymce/jscripts/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/horizontal.gif similarity index 100% rename from tinymce/jscripts/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/horizontal.gif rename to library/tinymce/jscripts/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/horizontal.gif diff --git a/tinymce/jscripts/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/vertical.gif b/library/tinymce/jscripts/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/vertical.gif similarity index 100% rename from tinymce/jscripts/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/vertical.gif rename to library/tinymce/jscripts/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/vertical.gif diff --git a/tinymce/jscripts/tiny_mce/plugins/inlinepopups/skins/clearlooks2/window.css b/library/tinymce/jscripts/tiny_mce/plugins/inlinepopups/skins/clearlooks2/window.css similarity index 100% rename from tinymce/jscripts/tiny_mce/plugins/inlinepopups/skins/clearlooks2/window.css rename to library/tinymce/jscripts/tiny_mce/plugins/inlinepopups/skins/clearlooks2/window.css diff --git a/tinymce/jscripts/tiny_mce/plugins/inlinepopups/template.htm b/library/tinymce/jscripts/tiny_mce/plugins/inlinepopups/template.htm similarity index 100% rename from tinymce/jscripts/tiny_mce/plugins/inlinepopups/template.htm rename to library/tinymce/jscripts/tiny_mce/plugins/inlinepopups/template.htm diff --git a/tinymce/jscripts/tiny_mce/plugins/insertdatetime/editor_plugin.js b/library/tinymce/jscripts/tiny_mce/plugins/insertdatetime/editor_plugin.js similarity index 100% rename from tinymce/jscripts/tiny_mce/plugins/insertdatetime/editor_plugin.js rename to library/tinymce/jscripts/tiny_mce/plugins/insertdatetime/editor_plugin.js diff --git a/tinymce/jscripts/tiny_mce/plugins/insertdatetime/editor_plugin_src.js b/library/tinymce/jscripts/tiny_mce/plugins/insertdatetime/editor_plugin_src.js similarity index 100% rename from tinymce/jscripts/tiny_mce/plugins/insertdatetime/editor_plugin_src.js rename to library/tinymce/jscripts/tiny_mce/plugins/insertdatetime/editor_plugin_src.js diff --git a/tinymce/jscripts/tiny_mce/plugins/layer/editor_plugin.js b/library/tinymce/jscripts/tiny_mce/plugins/layer/editor_plugin.js similarity index 100% rename from tinymce/jscripts/tiny_mce/plugins/layer/editor_plugin.js rename to library/tinymce/jscripts/tiny_mce/plugins/layer/editor_plugin.js diff --git a/tinymce/jscripts/tiny_mce/plugins/layer/editor_plugin_src.js b/library/tinymce/jscripts/tiny_mce/plugins/layer/editor_plugin_src.js similarity index 100% rename from tinymce/jscripts/tiny_mce/plugins/layer/editor_plugin_src.js rename to library/tinymce/jscripts/tiny_mce/plugins/layer/editor_plugin_src.js diff --git a/tinymce/jscripts/tiny_mce/plugins/legacyoutput/editor_plugin.js b/library/tinymce/jscripts/tiny_mce/plugins/legacyoutput/editor_plugin.js similarity index 100% rename from tinymce/jscripts/tiny_mce/plugins/legacyoutput/editor_plugin.js rename to library/tinymce/jscripts/tiny_mce/plugins/legacyoutput/editor_plugin.js diff --git a/tinymce/jscripts/tiny_mce/plugins/legacyoutput/editor_plugin_src.js b/library/tinymce/jscripts/tiny_mce/plugins/legacyoutput/editor_plugin_src.js similarity index 100% rename from tinymce/jscripts/tiny_mce/plugins/legacyoutput/editor_plugin_src.js rename to library/tinymce/jscripts/tiny_mce/plugins/legacyoutput/editor_plugin_src.js diff --git a/tinymce/jscripts/tiny_mce/plugins/media/css/content.css b/library/tinymce/jscripts/tiny_mce/plugins/media/css/content.css similarity index 100% rename from tinymce/jscripts/tiny_mce/plugins/media/css/content.css rename to library/tinymce/jscripts/tiny_mce/plugins/media/css/content.css diff --git a/tinymce/jscripts/tiny_mce/plugins/media/css/media.css b/library/tinymce/jscripts/tiny_mce/plugins/media/css/media.css similarity index 100% rename from tinymce/jscripts/tiny_mce/plugins/media/css/media.css rename to library/tinymce/jscripts/tiny_mce/plugins/media/css/media.css diff --git a/tinymce/jscripts/tiny_mce/plugins/media/editor_plugin.js b/library/tinymce/jscripts/tiny_mce/plugins/media/editor_plugin.js similarity index 100% rename from tinymce/jscripts/tiny_mce/plugins/media/editor_plugin.js rename to library/tinymce/jscripts/tiny_mce/plugins/media/editor_plugin.js diff --git a/tinymce/jscripts/tiny_mce/plugins/media/editor_plugin_src.js b/library/tinymce/jscripts/tiny_mce/plugins/media/editor_plugin_src.js similarity index 100% rename from tinymce/jscripts/tiny_mce/plugins/media/editor_plugin_src.js rename to library/tinymce/jscripts/tiny_mce/plugins/media/editor_plugin_src.js diff --git a/tinymce/jscripts/tiny_mce/plugins/media/img/flash.gif b/library/tinymce/jscripts/tiny_mce/plugins/media/img/flash.gif similarity index 100% rename from tinymce/jscripts/tiny_mce/plugins/media/img/flash.gif rename to library/tinymce/jscripts/tiny_mce/plugins/media/img/flash.gif diff --git a/tinymce/jscripts/tiny_mce/plugins/media/img/flv_player.swf b/library/tinymce/jscripts/tiny_mce/plugins/media/img/flv_player.swf similarity index 100% rename from tinymce/jscripts/tiny_mce/plugins/media/img/flv_player.swf rename to library/tinymce/jscripts/tiny_mce/plugins/media/img/flv_player.swf diff --git a/tinymce/jscripts/tiny_mce/plugins/media/img/quicktime.gif b/library/tinymce/jscripts/tiny_mce/plugins/media/img/quicktime.gif similarity index 100% rename from tinymce/jscripts/tiny_mce/plugins/media/img/quicktime.gif rename to library/tinymce/jscripts/tiny_mce/plugins/media/img/quicktime.gif diff --git a/tinymce/jscripts/tiny_mce/plugins/media/img/realmedia.gif b/library/tinymce/jscripts/tiny_mce/plugins/media/img/realmedia.gif similarity index 100% rename from tinymce/jscripts/tiny_mce/plugins/media/img/realmedia.gif rename to library/tinymce/jscripts/tiny_mce/plugins/media/img/realmedia.gif diff --git a/tinymce/jscripts/tiny_mce/plugins/media/img/shockwave.gif b/library/tinymce/jscripts/tiny_mce/plugins/media/img/shockwave.gif similarity index 100% rename from tinymce/jscripts/tiny_mce/plugins/media/img/shockwave.gif rename to library/tinymce/jscripts/tiny_mce/plugins/media/img/shockwave.gif diff --git a/tinymce/jscripts/tiny_mce/plugins/media/img/trans.gif b/library/tinymce/jscripts/tiny_mce/plugins/media/img/trans.gif similarity index 100% rename from tinymce/jscripts/tiny_mce/plugins/media/img/trans.gif rename to library/tinymce/jscripts/tiny_mce/plugins/media/img/trans.gif diff --git a/tinymce/jscripts/tiny_mce/plugins/media/img/windowsmedia.gif b/library/tinymce/jscripts/tiny_mce/plugins/media/img/windowsmedia.gif similarity index 100% rename from tinymce/jscripts/tiny_mce/plugins/media/img/windowsmedia.gif rename to library/tinymce/jscripts/tiny_mce/plugins/media/img/windowsmedia.gif diff --git a/tinymce/jscripts/tiny_mce/plugins/media/js/embed.js b/library/tinymce/jscripts/tiny_mce/plugins/media/js/embed.js similarity index 100% rename from tinymce/jscripts/tiny_mce/plugins/media/js/embed.js rename to library/tinymce/jscripts/tiny_mce/plugins/media/js/embed.js diff --git a/tinymce/jscripts/tiny_mce/plugins/media/js/media.js b/library/tinymce/jscripts/tiny_mce/plugins/media/js/media.js similarity index 100% rename from tinymce/jscripts/tiny_mce/plugins/media/js/media.js rename to library/tinymce/jscripts/tiny_mce/plugins/media/js/media.js diff --git a/tinymce/jscripts/tiny_mce/plugins/media/langs/en_dlg.js b/library/tinymce/jscripts/tiny_mce/plugins/media/langs/en_dlg.js similarity index 100% rename from tinymce/jscripts/tiny_mce/plugins/media/langs/en_dlg.js rename to library/tinymce/jscripts/tiny_mce/plugins/media/langs/en_dlg.js diff --git a/tinymce/jscripts/tiny_mce/plugins/media/media.htm b/library/tinymce/jscripts/tiny_mce/plugins/media/media.htm similarity index 100% rename from tinymce/jscripts/tiny_mce/plugins/media/media.htm rename to library/tinymce/jscripts/tiny_mce/plugins/media/media.htm diff --git a/tinymce/jscripts/tiny_mce/plugins/nonbreaking/editor_plugin.js b/library/tinymce/jscripts/tiny_mce/plugins/nonbreaking/editor_plugin.js similarity index 100% rename from tinymce/jscripts/tiny_mce/plugins/nonbreaking/editor_plugin.js rename to library/tinymce/jscripts/tiny_mce/plugins/nonbreaking/editor_plugin.js diff --git a/tinymce/jscripts/tiny_mce/plugins/nonbreaking/editor_plugin_src.js b/library/tinymce/jscripts/tiny_mce/plugins/nonbreaking/editor_plugin_src.js similarity index 100% rename from tinymce/jscripts/tiny_mce/plugins/nonbreaking/editor_plugin_src.js rename to library/tinymce/jscripts/tiny_mce/plugins/nonbreaking/editor_plugin_src.js diff --git a/tinymce/jscripts/tiny_mce/plugins/noneditable/editor_plugin.js b/library/tinymce/jscripts/tiny_mce/plugins/noneditable/editor_plugin.js similarity index 100% rename from tinymce/jscripts/tiny_mce/plugins/noneditable/editor_plugin.js rename to library/tinymce/jscripts/tiny_mce/plugins/noneditable/editor_plugin.js diff --git a/tinymce/jscripts/tiny_mce/plugins/noneditable/editor_plugin_src.js b/library/tinymce/jscripts/tiny_mce/plugins/noneditable/editor_plugin_src.js similarity index 100% rename from tinymce/jscripts/tiny_mce/plugins/noneditable/editor_plugin_src.js rename to library/tinymce/jscripts/tiny_mce/plugins/noneditable/editor_plugin_src.js diff --git a/tinymce/jscripts/tiny_mce/plugins/pagebreak/css/content.css b/library/tinymce/jscripts/tiny_mce/plugins/pagebreak/css/content.css similarity index 100% rename from tinymce/jscripts/tiny_mce/plugins/pagebreak/css/content.css rename to library/tinymce/jscripts/tiny_mce/plugins/pagebreak/css/content.css diff --git a/tinymce/jscripts/tiny_mce/plugins/pagebreak/editor_plugin.js b/library/tinymce/jscripts/tiny_mce/plugins/pagebreak/editor_plugin.js similarity index 100% rename from tinymce/jscripts/tiny_mce/plugins/pagebreak/editor_plugin.js rename to library/tinymce/jscripts/tiny_mce/plugins/pagebreak/editor_plugin.js diff --git a/tinymce/jscripts/tiny_mce/plugins/pagebreak/editor_plugin_src.js b/library/tinymce/jscripts/tiny_mce/plugins/pagebreak/editor_plugin_src.js similarity index 100% rename from tinymce/jscripts/tiny_mce/plugins/pagebreak/editor_plugin_src.js rename to library/tinymce/jscripts/tiny_mce/plugins/pagebreak/editor_plugin_src.js diff --git a/tinymce/jscripts/tiny_mce/plugins/pagebreak/img/pagebreak.gif b/library/tinymce/jscripts/tiny_mce/plugins/pagebreak/img/pagebreak.gif similarity index 100% rename from tinymce/jscripts/tiny_mce/plugins/pagebreak/img/pagebreak.gif rename to library/tinymce/jscripts/tiny_mce/plugins/pagebreak/img/pagebreak.gif diff --git a/tinymce/jscripts/tiny_mce/plugins/pagebreak/img/trans.gif b/library/tinymce/jscripts/tiny_mce/plugins/pagebreak/img/trans.gif similarity index 100% rename from tinymce/jscripts/tiny_mce/plugins/pagebreak/img/trans.gif rename to library/tinymce/jscripts/tiny_mce/plugins/pagebreak/img/trans.gif diff --git a/tinymce/jscripts/tiny_mce/plugins/paste/editor_plugin.js b/library/tinymce/jscripts/tiny_mce/plugins/paste/editor_plugin.js similarity index 100% rename from tinymce/jscripts/tiny_mce/plugins/paste/editor_plugin.js rename to library/tinymce/jscripts/tiny_mce/plugins/paste/editor_plugin.js diff --git a/tinymce/jscripts/tiny_mce/plugins/paste/editor_plugin_src.js b/library/tinymce/jscripts/tiny_mce/plugins/paste/editor_plugin_src.js similarity index 100% rename from tinymce/jscripts/tiny_mce/plugins/paste/editor_plugin_src.js rename to library/tinymce/jscripts/tiny_mce/plugins/paste/editor_plugin_src.js diff --git a/tinymce/jscripts/tiny_mce/plugins/paste/js/pastetext.js b/library/tinymce/jscripts/tiny_mce/plugins/paste/js/pastetext.js similarity index 100% rename from tinymce/jscripts/tiny_mce/plugins/paste/js/pastetext.js rename to library/tinymce/jscripts/tiny_mce/plugins/paste/js/pastetext.js diff --git a/tinymce/jscripts/tiny_mce/plugins/paste/js/pasteword.js b/library/tinymce/jscripts/tiny_mce/plugins/paste/js/pasteword.js similarity index 100% rename from tinymce/jscripts/tiny_mce/plugins/paste/js/pasteword.js rename to library/tinymce/jscripts/tiny_mce/plugins/paste/js/pasteword.js diff --git a/tinymce/jscripts/tiny_mce/plugins/paste/langs/en_dlg.js b/library/tinymce/jscripts/tiny_mce/plugins/paste/langs/en_dlg.js similarity index 100% rename from tinymce/jscripts/tiny_mce/plugins/paste/langs/en_dlg.js rename to library/tinymce/jscripts/tiny_mce/plugins/paste/langs/en_dlg.js diff --git a/tinymce/jscripts/tiny_mce/plugins/paste/pastetext.htm b/library/tinymce/jscripts/tiny_mce/plugins/paste/pastetext.htm similarity index 100% rename from tinymce/jscripts/tiny_mce/plugins/paste/pastetext.htm rename to library/tinymce/jscripts/tiny_mce/plugins/paste/pastetext.htm diff --git a/tinymce/jscripts/tiny_mce/plugins/paste/pasteword.htm b/library/tinymce/jscripts/tiny_mce/plugins/paste/pasteword.htm similarity index 100% rename from tinymce/jscripts/tiny_mce/plugins/paste/pasteword.htm rename to library/tinymce/jscripts/tiny_mce/plugins/paste/pasteword.htm diff --git a/tinymce/jscripts/tiny_mce/plugins/preview/editor_plugin.js b/library/tinymce/jscripts/tiny_mce/plugins/preview/editor_plugin.js similarity index 100% rename from tinymce/jscripts/tiny_mce/plugins/preview/editor_plugin.js rename to library/tinymce/jscripts/tiny_mce/plugins/preview/editor_plugin.js diff --git a/tinymce/jscripts/tiny_mce/plugins/preview/editor_plugin_src.js b/library/tinymce/jscripts/tiny_mce/plugins/preview/editor_plugin_src.js similarity index 100% rename from tinymce/jscripts/tiny_mce/plugins/preview/editor_plugin_src.js rename to library/tinymce/jscripts/tiny_mce/plugins/preview/editor_plugin_src.js diff --git a/tinymce/jscripts/tiny_mce/plugins/preview/example.html b/library/tinymce/jscripts/tiny_mce/plugins/preview/example.html similarity index 100% rename from tinymce/jscripts/tiny_mce/plugins/preview/example.html rename to library/tinymce/jscripts/tiny_mce/plugins/preview/example.html diff --git a/tinymce/jscripts/tiny_mce/plugins/preview/jscripts/embed.js b/library/tinymce/jscripts/tiny_mce/plugins/preview/jscripts/embed.js similarity index 100% rename from tinymce/jscripts/tiny_mce/plugins/preview/jscripts/embed.js rename to library/tinymce/jscripts/tiny_mce/plugins/preview/jscripts/embed.js diff --git a/tinymce/jscripts/tiny_mce/plugins/preview/preview.html b/library/tinymce/jscripts/tiny_mce/plugins/preview/preview.html similarity index 100% rename from tinymce/jscripts/tiny_mce/plugins/preview/preview.html rename to library/tinymce/jscripts/tiny_mce/plugins/preview/preview.html diff --git a/tinymce/jscripts/tiny_mce/plugins/print/editor_plugin.js b/library/tinymce/jscripts/tiny_mce/plugins/print/editor_plugin.js similarity index 100% rename from tinymce/jscripts/tiny_mce/plugins/print/editor_plugin.js rename to library/tinymce/jscripts/tiny_mce/plugins/print/editor_plugin.js diff --git a/tinymce/jscripts/tiny_mce/plugins/print/editor_plugin_src.js b/library/tinymce/jscripts/tiny_mce/plugins/print/editor_plugin_src.js similarity index 100% rename from tinymce/jscripts/tiny_mce/plugins/print/editor_plugin_src.js rename to library/tinymce/jscripts/tiny_mce/plugins/print/editor_plugin_src.js diff --git a/tinymce/jscripts/tiny_mce/plugins/save/editor_plugin.js b/library/tinymce/jscripts/tiny_mce/plugins/save/editor_plugin.js similarity index 100% rename from tinymce/jscripts/tiny_mce/plugins/save/editor_plugin.js rename to library/tinymce/jscripts/tiny_mce/plugins/save/editor_plugin.js diff --git a/tinymce/jscripts/tiny_mce/plugins/save/editor_plugin_src.js b/library/tinymce/jscripts/tiny_mce/plugins/save/editor_plugin_src.js similarity index 100% rename from tinymce/jscripts/tiny_mce/plugins/save/editor_plugin_src.js rename to library/tinymce/jscripts/tiny_mce/plugins/save/editor_plugin_src.js diff --git a/tinymce/jscripts/tiny_mce/plugins/searchreplace/css/searchreplace.css b/library/tinymce/jscripts/tiny_mce/plugins/searchreplace/css/searchreplace.css similarity index 100% rename from tinymce/jscripts/tiny_mce/plugins/searchreplace/css/searchreplace.css rename to library/tinymce/jscripts/tiny_mce/plugins/searchreplace/css/searchreplace.css diff --git a/tinymce/jscripts/tiny_mce/plugins/searchreplace/editor_plugin.js b/library/tinymce/jscripts/tiny_mce/plugins/searchreplace/editor_plugin.js similarity index 100% rename from tinymce/jscripts/tiny_mce/plugins/searchreplace/editor_plugin.js rename to library/tinymce/jscripts/tiny_mce/plugins/searchreplace/editor_plugin.js diff --git a/tinymce/jscripts/tiny_mce/plugins/searchreplace/editor_plugin_src.js b/library/tinymce/jscripts/tiny_mce/plugins/searchreplace/editor_plugin_src.js similarity index 100% rename from tinymce/jscripts/tiny_mce/plugins/searchreplace/editor_plugin_src.js rename to library/tinymce/jscripts/tiny_mce/plugins/searchreplace/editor_plugin_src.js diff --git a/tinymce/jscripts/tiny_mce/plugins/searchreplace/js/searchreplace.js b/library/tinymce/jscripts/tiny_mce/plugins/searchreplace/js/searchreplace.js similarity index 100% rename from tinymce/jscripts/tiny_mce/plugins/searchreplace/js/searchreplace.js rename to library/tinymce/jscripts/tiny_mce/plugins/searchreplace/js/searchreplace.js diff --git a/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/en_dlg.js b/library/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/en_dlg.js similarity index 100% rename from tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/en_dlg.js rename to library/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/en_dlg.js diff --git a/tinymce/jscripts/tiny_mce/plugins/searchreplace/searchreplace.htm b/library/tinymce/jscripts/tiny_mce/plugins/searchreplace/searchreplace.htm similarity index 100% rename from tinymce/jscripts/tiny_mce/plugins/searchreplace/searchreplace.htm rename to library/tinymce/jscripts/tiny_mce/plugins/searchreplace/searchreplace.htm diff --git a/tinymce/jscripts/tiny_mce/plugins/spellchecker/css/content.css b/library/tinymce/jscripts/tiny_mce/plugins/spellchecker/css/content.css similarity index 100% rename from tinymce/jscripts/tiny_mce/plugins/spellchecker/css/content.css rename to library/tinymce/jscripts/tiny_mce/plugins/spellchecker/css/content.css diff --git a/tinymce/jscripts/tiny_mce/plugins/spellchecker/editor_plugin.js b/library/tinymce/jscripts/tiny_mce/plugins/spellchecker/editor_plugin.js similarity index 100% rename from tinymce/jscripts/tiny_mce/plugins/spellchecker/editor_plugin.js rename to library/tinymce/jscripts/tiny_mce/plugins/spellchecker/editor_plugin.js diff --git a/tinymce/jscripts/tiny_mce/plugins/spellchecker/editor_plugin_src.js b/library/tinymce/jscripts/tiny_mce/plugins/spellchecker/editor_plugin_src.js similarity index 100% rename from tinymce/jscripts/tiny_mce/plugins/spellchecker/editor_plugin_src.js rename to library/tinymce/jscripts/tiny_mce/plugins/spellchecker/editor_plugin_src.js diff --git a/tinymce/jscripts/tiny_mce/plugins/spellchecker/img/wline.gif b/library/tinymce/jscripts/tiny_mce/plugins/spellchecker/img/wline.gif similarity index 100% rename from tinymce/jscripts/tiny_mce/plugins/spellchecker/img/wline.gif rename to library/tinymce/jscripts/tiny_mce/plugins/spellchecker/img/wline.gif diff --git a/tinymce/jscripts/tiny_mce/plugins/style/css/props.css b/library/tinymce/jscripts/tiny_mce/plugins/style/css/props.css similarity index 100% rename from tinymce/jscripts/tiny_mce/plugins/style/css/props.css rename to library/tinymce/jscripts/tiny_mce/plugins/style/css/props.css diff --git a/tinymce/jscripts/tiny_mce/plugins/style/editor_plugin.js b/library/tinymce/jscripts/tiny_mce/plugins/style/editor_plugin.js similarity index 100% rename from tinymce/jscripts/tiny_mce/plugins/style/editor_plugin.js rename to library/tinymce/jscripts/tiny_mce/plugins/style/editor_plugin.js diff --git a/tinymce/jscripts/tiny_mce/plugins/style/editor_plugin_src.js b/library/tinymce/jscripts/tiny_mce/plugins/style/editor_plugin_src.js similarity index 100% rename from tinymce/jscripts/tiny_mce/plugins/style/editor_plugin_src.js rename to library/tinymce/jscripts/tiny_mce/plugins/style/editor_plugin_src.js diff --git a/tinymce/jscripts/tiny_mce/plugins/style/js/props.js b/library/tinymce/jscripts/tiny_mce/plugins/style/js/props.js similarity index 100% rename from tinymce/jscripts/tiny_mce/plugins/style/js/props.js rename to library/tinymce/jscripts/tiny_mce/plugins/style/js/props.js diff --git a/tinymce/jscripts/tiny_mce/plugins/style/langs/en_dlg.js b/library/tinymce/jscripts/tiny_mce/plugins/style/langs/en_dlg.js similarity index 100% rename from tinymce/jscripts/tiny_mce/plugins/style/langs/en_dlg.js rename to library/tinymce/jscripts/tiny_mce/plugins/style/langs/en_dlg.js diff --git a/tinymce/jscripts/tiny_mce/plugins/style/props.htm b/library/tinymce/jscripts/tiny_mce/plugins/style/props.htm similarity index 100% rename from tinymce/jscripts/tiny_mce/plugins/style/props.htm rename to library/tinymce/jscripts/tiny_mce/plugins/style/props.htm diff --git a/tinymce/jscripts/tiny_mce/plugins/tabfocus/editor_plugin.js b/library/tinymce/jscripts/tiny_mce/plugins/tabfocus/editor_plugin.js similarity index 100% rename from tinymce/jscripts/tiny_mce/plugins/tabfocus/editor_plugin.js rename to library/tinymce/jscripts/tiny_mce/plugins/tabfocus/editor_plugin.js diff --git a/tinymce/jscripts/tiny_mce/plugins/tabfocus/editor_plugin_src.js b/library/tinymce/jscripts/tiny_mce/plugins/tabfocus/editor_plugin_src.js similarity index 100% rename from tinymce/jscripts/tiny_mce/plugins/tabfocus/editor_plugin_src.js rename to library/tinymce/jscripts/tiny_mce/plugins/tabfocus/editor_plugin_src.js diff --git a/tinymce/jscripts/tiny_mce/plugins/table/cell.htm b/library/tinymce/jscripts/tiny_mce/plugins/table/cell.htm similarity index 100% rename from tinymce/jscripts/tiny_mce/plugins/table/cell.htm rename to library/tinymce/jscripts/tiny_mce/plugins/table/cell.htm diff --git a/tinymce/jscripts/tiny_mce/plugins/table/css/cell.css b/library/tinymce/jscripts/tiny_mce/plugins/table/css/cell.css similarity index 100% rename from tinymce/jscripts/tiny_mce/plugins/table/css/cell.css rename to library/tinymce/jscripts/tiny_mce/plugins/table/css/cell.css diff --git a/tinymce/jscripts/tiny_mce/plugins/table/css/row.css b/library/tinymce/jscripts/tiny_mce/plugins/table/css/row.css similarity index 100% rename from tinymce/jscripts/tiny_mce/plugins/table/css/row.css rename to library/tinymce/jscripts/tiny_mce/plugins/table/css/row.css diff --git a/tinymce/jscripts/tiny_mce/plugins/table/css/table.css b/library/tinymce/jscripts/tiny_mce/plugins/table/css/table.css similarity index 100% rename from tinymce/jscripts/tiny_mce/plugins/table/css/table.css rename to library/tinymce/jscripts/tiny_mce/plugins/table/css/table.css diff --git a/tinymce/jscripts/tiny_mce/plugins/table/editor_plugin.js b/library/tinymce/jscripts/tiny_mce/plugins/table/editor_plugin.js similarity index 100% rename from tinymce/jscripts/tiny_mce/plugins/table/editor_plugin.js rename to library/tinymce/jscripts/tiny_mce/plugins/table/editor_plugin.js diff --git a/tinymce/jscripts/tiny_mce/plugins/table/editor_plugin_src.js b/library/tinymce/jscripts/tiny_mce/plugins/table/editor_plugin_src.js similarity index 100% rename from tinymce/jscripts/tiny_mce/plugins/table/editor_plugin_src.js rename to library/tinymce/jscripts/tiny_mce/plugins/table/editor_plugin_src.js diff --git a/tinymce/jscripts/tiny_mce/plugins/table/js/cell.js b/library/tinymce/jscripts/tiny_mce/plugins/table/js/cell.js similarity index 100% rename from tinymce/jscripts/tiny_mce/plugins/table/js/cell.js rename to library/tinymce/jscripts/tiny_mce/plugins/table/js/cell.js diff --git a/tinymce/jscripts/tiny_mce/plugins/table/js/merge_cells.js b/library/tinymce/jscripts/tiny_mce/plugins/table/js/merge_cells.js similarity index 100% rename from tinymce/jscripts/tiny_mce/plugins/table/js/merge_cells.js rename to library/tinymce/jscripts/tiny_mce/plugins/table/js/merge_cells.js diff --git a/tinymce/jscripts/tiny_mce/plugins/table/js/row.js b/library/tinymce/jscripts/tiny_mce/plugins/table/js/row.js similarity index 100% rename from tinymce/jscripts/tiny_mce/plugins/table/js/row.js rename to library/tinymce/jscripts/tiny_mce/plugins/table/js/row.js diff --git a/tinymce/jscripts/tiny_mce/plugins/table/js/table.js b/library/tinymce/jscripts/tiny_mce/plugins/table/js/table.js similarity index 100% rename from tinymce/jscripts/tiny_mce/plugins/table/js/table.js rename to library/tinymce/jscripts/tiny_mce/plugins/table/js/table.js diff --git a/tinymce/jscripts/tiny_mce/plugins/table/langs/en_dlg.js b/library/tinymce/jscripts/tiny_mce/plugins/table/langs/en_dlg.js similarity index 100% rename from tinymce/jscripts/tiny_mce/plugins/table/langs/en_dlg.js rename to library/tinymce/jscripts/tiny_mce/plugins/table/langs/en_dlg.js diff --git a/tinymce/jscripts/tiny_mce/plugins/table/merge_cells.htm b/library/tinymce/jscripts/tiny_mce/plugins/table/merge_cells.htm similarity index 100% rename from tinymce/jscripts/tiny_mce/plugins/table/merge_cells.htm rename to library/tinymce/jscripts/tiny_mce/plugins/table/merge_cells.htm diff --git a/tinymce/jscripts/tiny_mce/plugins/table/row.htm b/library/tinymce/jscripts/tiny_mce/plugins/table/row.htm similarity index 100% rename from tinymce/jscripts/tiny_mce/plugins/table/row.htm rename to library/tinymce/jscripts/tiny_mce/plugins/table/row.htm diff --git a/tinymce/jscripts/tiny_mce/plugins/table/table.htm b/library/tinymce/jscripts/tiny_mce/plugins/table/table.htm similarity index 100% rename from tinymce/jscripts/tiny_mce/plugins/table/table.htm rename to library/tinymce/jscripts/tiny_mce/plugins/table/table.htm diff --git a/tinymce/jscripts/tiny_mce/plugins/template/blank.htm b/library/tinymce/jscripts/tiny_mce/plugins/template/blank.htm similarity index 100% rename from tinymce/jscripts/tiny_mce/plugins/template/blank.htm rename to library/tinymce/jscripts/tiny_mce/plugins/template/blank.htm diff --git a/tinymce/jscripts/tiny_mce/plugins/template/css/template.css b/library/tinymce/jscripts/tiny_mce/plugins/template/css/template.css similarity index 100% rename from tinymce/jscripts/tiny_mce/plugins/template/css/template.css rename to library/tinymce/jscripts/tiny_mce/plugins/template/css/template.css diff --git a/tinymce/jscripts/tiny_mce/plugins/template/editor_plugin.js b/library/tinymce/jscripts/tiny_mce/plugins/template/editor_plugin.js similarity index 100% rename from tinymce/jscripts/tiny_mce/plugins/template/editor_plugin.js rename to library/tinymce/jscripts/tiny_mce/plugins/template/editor_plugin.js diff --git a/tinymce/jscripts/tiny_mce/plugins/template/editor_plugin_src.js b/library/tinymce/jscripts/tiny_mce/plugins/template/editor_plugin_src.js similarity index 100% rename from tinymce/jscripts/tiny_mce/plugins/template/editor_plugin_src.js rename to library/tinymce/jscripts/tiny_mce/plugins/template/editor_plugin_src.js diff --git a/tinymce/jscripts/tiny_mce/plugins/template/js/template.js b/library/tinymce/jscripts/tiny_mce/plugins/template/js/template.js similarity index 100% rename from tinymce/jscripts/tiny_mce/plugins/template/js/template.js rename to library/tinymce/jscripts/tiny_mce/plugins/template/js/template.js diff --git a/tinymce/jscripts/tiny_mce/plugins/template/langs/en_dlg.js b/library/tinymce/jscripts/tiny_mce/plugins/template/langs/en_dlg.js similarity index 100% rename from tinymce/jscripts/tiny_mce/plugins/template/langs/en_dlg.js rename to library/tinymce/jscripts/tiny_mce/plugins/template/langs/en_dlg.js diff --git a/tinymce/jscripts/tiny_mce/plugins/template/template.htm b/library/tinymce/jscripts/tiny_mce/plugins/template/template.htm similarity index 100% rename from tinymce/jscripts/tiny_mce/plugins/template/template.htm rename to library/tinymce/jscripts/tiny_mce/plugins/template/template.htm diff --git a/tinymce/jscripts/tiny_mce/plugins/visualchars/editor_plugin.js b/library/tinymce/jscripts/tiny_mce/plugins/visualchars/editor_plugin.js similarity index 100% rename from tinymce/jscripts/tiny_mce/plugins/visualchars/editor_plugin.js rename to library/tinymce/jscripts/tiny_mce/plugins/visualchars/editor_plugin.js diff --git a/tinymce/jscripts/tiny_mce/plugins/visualchars/editor_plugin_src.js b/library/tinymce/jscripts/tiny_mce/plugins/visualchars/editor_plugin_src.js similarity index 100% rename from tinymce/jscripts/tiny_mce/plugins/visualchars/editor_plugin_src.js rename to library/tinymce/jscripts/tiny_mce/plugins/visualchars/editor_plugin_src.js diff --git a/tinymce/jscripts/tiny_mce/plugins/wordcount/editor_plugin.js b/library/tinymce/jscripts/tiny_mce/plugins/wordcount/editor_plugin.js similarity index 100% rename from tinymce/jscripts/tiny_mce/plugins/wordcount/editor_plugin.js rename to library/tinymce/jscripts/tiny_mce/plugins/wordcount/editor_plugin.js diff --git a/tinymce/jscripts/tiny_mce/plugins/wordcount/editor_plugin_src.js b/library/tinymce/jscripts/tiny_mce/plugins/wordcount/editor_plugin_src.js similarity index 100% rename from tinymce/jscripts/tiny_mce/plugins/wordcount/editor_plugin_src.js rename to library/tinymce/jscripts/tiny_mce/plugins/wordcount/editor_plugin_src.js diff --git a/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/abbr.htm b/library/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/abbr.htm similarity index 100% rename from tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/abbr.htm rename to library/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/abbr.htm diff --git a/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/acronym.htm b/library/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/acronym.htm similarity index 100% rename from tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/acronym.htm rename to library/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/acronym.htm diff --git a/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/attributes.htm b/library/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/attributes.htm similarity index 100% rename from tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/attributes.htm rename to library/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/attributes.htm diff --git a/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/cite.htm b/library/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/cite.htm similarity index 100% rename from tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/cite.htm rename to library/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/cite.htm diff --git a/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/css/attributes.css b/library/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/css/attributes.css similarity index 100% rename from tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/css/attributes.css rename to library/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/css/attributes.css diff --git a/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/css/popup.css b/library/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/css/popup.css similarity index 100% rename from tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/css/popup.css rename to library/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/css/popup.css diff --git a/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/del.htm b/library/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/del.htm similarity index 100% rename from tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/del.htm rename to library/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/del.htm diff --git a/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/editor_plugin.js b/library/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/editor_plugin.js similarity index 100% rename from tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/editor_plugin.js rename to library/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/editor_plugin.js diff --git a/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/editor_plugin_src.js b/library/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/editor_plugin_src.js similarity index 100% rename from tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/editor_plugin_src.js rename to library/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/editor_plugin_src.js diff --git a/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/ins.htm b/library/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/ins.htm similarity index 100% rename from tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/ins.htm rename to library/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/ins.htm diff --git a/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/js/abbr.js b/library/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/js/abbr.js similarity index 100% rename from tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/js/abbr.js rename to library/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/js/abbr.js diff --git a/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/js/acronym.js b/library/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/js/acronym.js similarity index 100% rename from tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/js/acronym.js rename to library/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/js/acronym.js diff --git a/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/js/attributes.js b/library/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/js/attributes.js similarity index 100% rename from tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/js/attributes.js rename to library/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/js/attributes.js diff --git a/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/js/cite.js b/library/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/js/cite.js similarity index 100% rename from tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/js/cite.js rename to library/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/js/cite.js diff --git a/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/js/del.js b/library/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/js/del.js similarity index 100% rename from tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/js/del.js rename to library/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/js/del.js diff --git a/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/js/element_common.js b/library/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/js/element_common.js similarity index 100% rename from tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/js/element_common.js rename to library/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/js/element_common.js diff --git a/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/js/ins.js b/library/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/js/ins.js similarity index 100% rename from tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/js/ins.js rename to library/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/js/ins.js diff --git a/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/en_dlg.js b/library/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/en_dlg.js similarity index 100% rename from tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/en_dlg.js rename to library/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/en_dlg.js diff --git a/tinymce/jscripts/tiny_mce/themes/advanced/about.htm b/library/tinymce/jscripts/tiny_mce/themes/advanced/about.htm similarity index 100% rename from tinymce/jscripts/tiny_mce/themes/advanced/about.htm rename to library/tinymce/jscripts/tiny_mce/themes/advanced/about.htm diff --git a/tinymce/jscripts/tiny_mce/themes/advanced/anchor.htm b/library/tinymce/jscripts/tiny_mce/themes/advanced/anchor.htm similarity index 100% rename from tinymce/jscripts/tiny_mce/themes/advanced/anchor.htm rename to library/tinymce/jscripts/tiny_mce/themes/advanced/anchor.htm diff --git a/tinymce/jscripts/tiny_mce/themes/advanced/charmap.htm b/library/tinymce/jscripts/tiny_mce/themes/advanced/charmap.htm similarity index 100% rename from tinymce/jscripts/tiny_mce/themes/advanced/charmap.htm rename to library/tinymce/jscripts/tiny_mce/themes/advanced/charmap.htm diff --git a/tinymce/jscripts/tiny_mce/themes/advanced/color_picker.htm b/library/tinymce/jscripts/tiny_mce/themes/advanced/color_picker.htm similarity index 100% rename from tinymce/jscripts/tiny_mce/themes/advanced/color_picker.htm rename to library/tinymce/jscripts/tiny_mce/themes/advanced/color_picker.htm diff --git a/tinymce/jscripts/tiny_mce/themes/advanced/editor_template.js b/library/tinymce/jscripts/tiny_mce/themes/advanced/editor_template.js similarity index 100% rename from tinymce/jscripts/tiny_mce/themes/advanced/editor_template.js rename to library/tinymce/jscripts/tiny_mce/themes/advanced/editor_template.js diff --git a/tinymce/jscripts/tiny_mce/themes/advanced/editor_template_src.js b/library/tinymce/jscripts/tiny_mce/themes/advanced/editor_template_src.js similarity index 100% rename from tinymce/jscripts/tiny_mce/themes/advanced/editor_template_src.js rename to library/tinymce/jscripts/tiny_mce/themes/advanced/editor_template_src.js diff --git a/tinymce/jscripts/tiny_mce/themes/advanced/image.htm b/library/tinymce/jscripts/tiny_mce/themes/advanced/image.htm similarity index 100% rename from tinymce/jscripts/tiny_mce/themes/advanced/image.htm rename to library/tinymce/jscripts/tiny_mce/themes/advanced/image.htm diff --git a/tinymce/jscripts/tiny_mce/themes/advanced/img/colorpicker.jpg b/library/tinymce/jscripts/tiny_mce/themes/advanced/img/colorpicker.jpg similarity index 100% rename from tinymce/jscripts/tiny_mce/themes/advanced/img/colorpicker.jpg rename to library/tinymce/jscripts/tiny_mce/themes/advanced/img/colorpicker.jpg diff --git a/tinymce/jscripts/tiny_mce/themes/advanced/img/icons.gif b/library/tinymce/jscripts/tiny_mce/themes/advanced/img/icons.gif similarity index 100% rename from tinymce/jscripts/tiny_mce/themes/advanced/img/icons.gif rename to library/tinymce/jscripts/tiny_mce/themes/advanced/img/icons.gif diff --git a/tinymce/jscripts/tiny_mce/themes/advanced/js/about.js b/library/tinymce/jscripts/tiny_mce/themes/advanced/js/about.js similarity index 100% rename from tinymce/jscripts/tiny_mce/themes/advanced/js/about.js rename to library/tinymce/jscripts/tiny_mce/themes/advanced/js/about.js diff --git a/tinymce/jscripts/tiny_mce/themes/advanced/js/anchor.js b/library/tinymce/jscripts/tiny_mce/themes/advanced/js/anchor.js similarity index 100% rename from tinymce/jscripts/tiny_mce/themes/advanced/js/anchor.js rename to library/tinymce/jscripts/tiny_mce/themes/advanced/js/anchor.js diff --git a/tinymce/jscripts/tiny_mce/themes/advanced/js/charmap.js b/library/tinymce/jscripts/tiny_mce/themes/advanced/js/charmap.js similarity index 100% rename from tinymce/jscripts/tiny_mce/themes/advanced/js/charmap.js rename to library/tinymce/jscripts/tiny_mce/themes/advanced/js/charmap.js diff --git a/tinymce/jscripts/tiny_mce/themes/advanced/js/color_picker.js b/library/tinymce/jscripts/tiny_mce/themes/advanced/js/color_picker.js similarity index 100% rename from tinymce/jscripts/tiny_mce/themes/advanced/js/color_picker.js rename to library/tinymce/jscripts/tiny_mce/themes/advanced/js/color_picker.js diff --git a/tinymce/jscripts/tiny_mce/themes/advanced/js/image.js b/library/tinymce/jscripts/tiny_mce/themes/advanced/js/image.js similarity index 100% rename from tinymce/jscripts/tiny_mce/themes/advanced/js/image.js rename to library/tinymce/jscripts/tiny_mce/themes/advanced/js/image.js diff --git a/tinymce/jscripts/tiny_mce/themes/advanced/js/link.js b/library/tinymce/jscripts/tiny_mce/themes/advanced/js/link.js similarity index 100% rename from tinymce/jscripts/tiny_mce/themes/advanced/js/link.js rename to library/tinymce/jscripts/tiny_mce/themes/advanced/js/link.js diff --git a/tinymce/jscripts/tiny_mce/themes/advanced/js/source_editor.js b/library/tinymce/jscripts/tiny_mce/themes/advanced/js/source_editor.js similarity index 100% rename from tinymce/jscripts/tiny_mce/themes/advanced/js/source_editor.js rename to library/tinymce/jscripts/tiny_mce/themes/advanced/js/source_editor.js diff --git a/tinymce/jscripts/tiny_mce/themes/advanced/langs/en.js b/library/tinymce/jscripts/tiny_mce/themes/advanced/langs/en.js similarity index 100% rename from tinymce/jscripts/tiny_mce/themes/advanced/langs/en.js rename to library/tinymce/jscripts/tiny_mce/themes/advanced/langs/en.js diff --git a/tinymce/jscripts/tiny_mce/themes/advanced/langs/en_dlg.js b/library/tinymce/jscripts/tiny_mce/themes/advanced/langs/en_dlg.js similarity index 100% rename from tinymce/jscripts/tiny_mce/themes/advanced/langs/en_dlg.js rename to library/tinymce/jscripts/tiny_mce/themes/advanced/langs/en_dlg.js diff --git a/tinymce/jscripts/tiny_mce/themes/advanced/link.htm b/library/tinymce/jscripts/tiny_mce/themes/advanced/link.htm similarity index 100% rename from tinymce/jscripts/tiny_mce/themes/advanced/link.htm rename to library/tinymce/jscripts/tiny_mce/themes/advanced/link.htm diff --git a/tinymce/jscripts/tiny_mce/themes/advanced/skins/default/content.css b/library/tinymce/jscripts/tiny_mce/themes/advanced/skins/default/content.css similarity index 100% rename from tinymce/jscripts/tiny_mce/themes/advanced/skins/default/content.css rename to library/tinymce/jscripts/tiny_mce/themes/advanced/skins/default/content.css diff --git a/tinymce/jscripts/tiny_mce/themes/advanced/skins/default/dialog.css b/library/tinymce/jscripts/tiny_mce/themes/advanced/skins/default/dialog.css similarity index 100% rename from tinymce/jscripts/tiny_mce/themes/advanced/skins/default/dialog.css rename to library/tinymce/jscripts/tiny_mce/themes/advanced/skins/default/dialog.css diff --git a/tinymce/jscripts/tiny_mce/themes/advanced/skins/default/img/buttons.png b/library/tinymce/jscripts/tiny_mce/themes/advanced/skins/default/img/buttons.png similarity index 100% rename from tinymce/jscripts/tiny_mce/themes/advanced/skins/default/img/buttons.png rename to library/tinymce/jscripts/tiny_mce/themes/advanced/skins/default/img/buttons.png diff --git a/tinymce/jscripts/tiny_mce/themes/advanced/skins/default/img/items.gif b/library/tinymce/jscripts/tiny_mce/themes/advanced/skins/default/img/items.gif similarity index 100% rename from tinymce/jscripts/tiny_mce/themes/advanced/skins/default/img/items.gif rename to library/tinymce/jscripts/tiny_mce/themes/advanced/skins/default/img/items.gif diff --git a/tinymce/jscripts/tiny_mce/themes/advanced/skins/default/img/menu_arrow.gif b/library/tinymce/jscripts/tiny_mce/themes/advanced/skins/default/img/menu_arrow.gif similarity index 100% rename from tinymce/jscripts/tiny_mce/themes/advanced/skins/default/img/menu_arrow.gif rename to library/tinymce/jscripts/tiny_mce/themes/advanced/skins/default/img/menu_arrow.gif diff --git a/tinymce/jscripts/tiny_mce/themes/advanced/skins/default/img/menu_check.gif b/library/tinymce/jscripts/tiny_mce/themes/advanced/skins/default/img/menu_check.gif similarity index 100% rename from tinymce/jscripts/tiny_mce/themes/advanced/skins/default/img/menu_check.gif rename to library/tinymce/jscripts/tiny_mce/themes/advanced/skins/default/img/menu_check.gif diff --git a/tinymce/jscripts/tiny_mce/themes/advanced/skins/default/img/progress.gif b/library/tinymce/jscripts/tiny_mce/themes/advanced/skins/default/img/progress.gif similarity index 100% rename from tinymce/jscripts/tiny_mce/themes/advanced/skins/default/img/progress.gif rename to library/tinymce/jscripts/tiny_mce/themes/advanced/skins/default/img/progress.gif diff --git a/tinymce/jscripts/tiny_mce/themes/advanced/skins/default/img/tabs.gif b/library/tinymce/jscripts/tiny_mce/themes/advanced/skins/default/img/tabs.gif similarity index 100% rename from tinymce/jscripts/tiny_mce/themes/advanced/skins/default/img/tabs.gif rename to library/tinymce/jscripts/tiny_mce/themes/advanced/skins/default/img/tabs.gif diff --git a/tinymce/jscripts/tiny_mce/themes/advanced/skins/default/ui.css b/library/tinymce/jscripts/tiny_mce/themes/advanced/skins/default/ui.css similarity index 100% rename from tinymce/jscripts/tiny_mce/themes/advanced/skins/default/ui.css rename to library/tinymce/jscripts/tiny_mce/themes/advanced/skins/default/ui.css diff --git a/tinymce/jscripts/tiny_mce/themes/advanced/skins/o2k7/content.css b/library/tinymce/jscripts/tiny_mce/themes/advanced/skins/o2k7/content.css similarity index 100% rename from tinymce/jscripts/tiny_mce/themes/advanced/skins/o2k7/content.css rename to library/tinymce/jscripts/tiny_mce/themes/advanced/skins/o2k7/content.css diff --git a/tinymce/jscripts/tiny_mce/themes/advanced/skins/o2k7/dialog.css b/library/tinymce/jscripts/tiny_mce/themes/advanced/skins/o2k7/dialog.css similarity index 100% rename from tinymce/jscripts/tiny_mce/themes/advanced/skins/o2k7/dialog.css rename to library/tinymce/jscripts/tiny_mce/themes/advanced/skins/o2k7/dialog.css diff --git a/tinymce/jscripts/tiny_mce/themes/advanced/skins/o2k7/img/button_bg.png b/library/tinymce/jscripts/tiny_mce/themes/advanced/skins/o2k7/img/button_bg.png similarity index 100% rename from tinymce/jscripts/tiny_mce/themes/advanced/skins/o2k7/img/button_bg.png rename to library/tinymce/jscripts/tiny_mce/themes/advanced/skins/o2k7/img/button_bg.png diff --git a/tinymce/jscripts/tiny_mce/themes/advanced/skins/o2k7/img/button_bg_black.png b/library/tinymce/jscripts/tiny_mce/themes/advanced/skins/o2k7/img/button_bg_black.png similarity index 100% rename from tinymce/jscripts/tiny_mce/themes/advanced/skins/o2k7/img/button_bg_black.png rename to library/tinymce/jscripts/tiny_mce/themes/advanced/skins/o2k7/img/button_bg_black.png diff --git a/tinymce/jscripts/tiny_mce/themes/advanced/skins/o2k7/img/button_bg_silver.png b/library/tinymce/jscripts/tiny_mce/themes/advanced/skins/o2k7/img/button_bg_silver.png similarity index 100% rename from tinymce/jscripts/tiny_mce/themes/advanced/skins/o2k7/img/button_bg_silver.png rename to library/tinymce/jscripts/tiny_mce/themes/advanced/skins/o2k7/img/button_bg_silver.png diff --git a/tinymce/jscripts/tiny_mce/themes/advanced/skins/o2k7/ui.css b/library/tinymce/jscripts/tiny_mce/themes/advanced/skins/o2k7/ui.css similarity index 100% rename from tinymce/jscripts/tiny_mce/themes/advanced/skins/o2k7/ui.css rename to library/tinymce/jscripts/tiny_mce/themes/advanced/skins/o2k7/ui.css diff --git a/tinymce/jscripts/tiny_mce/themes/advanced/skins/o2k7/ui_black.css b/library/tinymce/jscripts/tiny_mce/themes/advanced/skins/o2k7/ui_black.css similarity index 100% rename from tinymce/jscripts/tiny_mce/themes/advanced/skins/o2k7/ui_black.css rename to library/tinymce/jscripts/tiny_mce/themes/advanced/skins/o2k7/ui_black.css diff --git a/tinymce/jscripts/tiny_mce/themes/advanced/skins/o2k7/ui_silver.css b/library/tinymce/jscripts/tiny_mce/themes/advanced/skins/o2k7/ui_silver.css similarity index 100% rename from tinymce/jscripts/tiny_mce/themes/advanced/skins/o2k7/ui_silver.css rename to library/tinymce/jscripts/tiny_mce/themes/advanced/skins/o2k7/ui_silver.css diff --git a/tinymce/jscripts/tiny_mce/themes/advanced/source_editor.htm b/library/tinymce/jscripts/tiny_mce/themes/advanced/source_editor.htm similarity index 100% rename from tinymce/jscripts/tiny_mce/themes/advanced/source_editor.htm rename to library/tinymce/jscripts/tiny_mce/themes/advanced/source_editor.htm diff --git a/tinymce/jscripts/tiny_mce/themes/simple/editor_template.js b/library/tinymce/jscripts/tiny_mce/themes/simple/editor_template.js similarity index 100% rename from tinymce/jscripts/tiny_mce/themes/simple/editor_template.js rename to library/tinymce/jscripts/tiny_mce/themes/simple/editor_template.js diff --git a/tinymce/jscripts/tiny_mce/themes/simple/editor_template_src.js b/library/tinymce/jscripts/tiny_mce/themes/simple/editor_template_src.js similarity index 100% rename from tinymce/jscripts/tiny_mce/themes/simple/editor_template_src.js rename to library/tinymce/jscripts/tiny_mce/themes/simple/editor_template_src.js diff --git a/tinymce/jscripts/tiny_mce/themes/simple/img/icons.gif b/library/tinymce/jscripts/tiny_mce/themes/simple/img/icons.gif similarity index 100% rename from tinymce/jscripts/tiny_mce/themes/simple/img/icons.gif rename to library/tinymce/jscripts/tiny_mce/themes/simple/img/icons.gif diff --git a/tinymce/jscripts/tiny_mce/themes/simple/langs/en.js b/library/tinymce/jscripts/tiny_mce/themes/simple/langs/en.js similarity index 100% rename from tinymce/jscripts/tiny_mce/themes/simple/langs/en.js rename to library/tinymce/jscripts/tiny_mce/themes/simple/langs/en.js diff --git a/tinymce/jscripts/tiny_mce/themes/simple/skins/default/content.css b/library/tinymce/jscripts/tiny_mce/themes/simple/skins/default/content.css similarity index 100% rename from tinymce/jscripts/tiny_mce/themes/simple/skins/default/content.css rename to library/tinymce/jscripts/tiny_mce/themes/simple/skins/default/content.css diff --git a/tinymce/jscripts/tiny_mce/themes/simple/skins/default/ui.css b/library/tinymce/jscripts/tiny_mce/themes/simple/skins/default/ui.css similarity index 100% rename from tinymce/jscripts/tiny_mce/themes/simple/skins/default/ui.css rename to library/tinymce/jscripts/tiny_mce/themes/simple/skins/default/ui.css diff --git a/tinymce/jscripts/tiny_mce/themes/simple/skins/o2k7/content.css b/library/tinymce/jscripts/tiny_mce/themes/simple/skins/o2k7/content.css similarity index 100% rename from tinymce/jscripts/tiny_mce/themes/simple/skins/o2k7/content.css rename to library/tinymce/jscripts/tiny_mce/themes/simple/skins/o2k7/content.css diff --git a/tinymce/jscripts/tiny_mce/themes/simple/skins/o2k7/img/button_bg.png b/library/tinymce/jscripts/tiny_mce/themes/simple/skins/o2k7/img/button_bg.png similarity index 100% rename from tinymce/jscripts/tiny_mce/themes/simple/skins/o2k7/img/button_bg.png rename to library/tinymce/jscripts/tiny_mce/themes/simple/skins/o2k7/img/button_bg.png diff --git a/tinymce/jscripts/tiny_mce/themes/simple/skins/o2k7/ui.css b/library/tinymce/jscripts/tiny_mce/themes/simple/skins/o2k7/ui.css similarity index 100% rename from tinymce/jscripts/tiny_mce/themes/simple/skins/o2k7/ui.css rename to library/tinymce/jscripts/tiny_mce/themes/simple/skins/o2k7/ui.css diff --git a/tinymce/jscripts/tiny_mce/tiny_mce.js b/library/tinymce/jscripts/tiny_mce/tiny_mce.js similarity index 100% rename from tinymce/jscripts/tiny_mce/tiny_mce.js rename to library/tinymce/jscripts/tiny_mce/tiny_mce.js diff --git a/tinymce/jscripts/tiny_mce/tiny_mce_popup.js b/library/tinymce/jscripts/tiny_mce/tiny_mce_popup.js similarity index 100% rename from tinymce/jscripts/tiny_mce/tiny_mce_popup.js rename to library/tinymce/jscripts/tiny_mce/tiny_mce_popup.js diff --git a/tinymce/jscripts/tiny_mce/tiny_mce_src.js b/library/tinymce/jscripts/tiny_mce/tiny_mce_src.js similarity index 100% rename from tinymce/jscripts/tiny_mce/tiny_mce_src.js rename to library/tinymce/jscripts/tiny_mce/tiny_mce_src.js diff --git a/tinymce/jscripts/tiny_mce/utils/editable_selects.js b/library/tinymce/jscripts/tiny_mce/utils/editable_selects.js similarity index 100% rename from tinymce/jscripts/tiny_mce/utils/editable_selects.js rename to library/tinymce/jscripts/tiny_mce/utils/editable_selects.js diff --git a/tinymce/jscripts/tiny_mce/utils/form_utils.js b/library/tinymce/jscripts/tiny_mce/utils/form_utils.js similarity index 100% rename from tinymce/jscripts/tiny_mce/utils/form_utils.js rename to library/tinymce/jscripts/tiny_mce/utils/form_utils.js diff --git a/tinymce/jscripts/tiny_mce/utils/mctabs.js b/library/tinymce/jscripts/tiny_mce/utils/mctabs.js similarity index 100% rename from tinymce/jscripts/tiny_mce/utils/mctabs.js rename to library/tinymce/jscripts/tiny_mce/utils/mctabs.js diff --git a/tinymce/jscripts/tiny_mce/utils/validate.js b/library/tinymce/jscripts/tiny_mce/utils/validate.js similarity index 100% rename from tinymce/jscripts/tiny_mce/utils/validate.js rename to library/tinymce/jscripts/tiny_mce/utils/validate.js diff --git a/mod/dfrn_notify.php b/mod/dfrn_notify.php index 31314da7b2..64b5ec479e 100644 --- a/mod/dfrn_notify.php +++ b/mod/dfrn_notify.php @@ -1,6 +1,6 @@ + src="$baseurl/library/tinymce/jscripts/tiny_mce/tiny_mce_src.js"> - - - - - + + + + diff --git a/view/event_head.tpl b/view/event_head.tpl index 4e50631316..fe0b8fe2a0 100644 --- a/view/event_head.tpl +++ b/view/event_head.tpl @@ -1,5 +1,5 @@ + src="$baseurl/library/tinymce/jscripts/tiny_mce/tiny_mce_src.js"> + + + src="$baseurl/library/tinymce/jscripts/tiny_mce/tiny_mce_src.js"> + diff --git a/view/field_richtext.tpl b/view/field_richtext.tpl new file mode 100644 index 0000000000..a5a453d32f --- /dev/null +++ b/view/field_richtext.tpl @@ -0,0 +1,44 @@ + +
+ + + $field.3 + + +
From 779292077c99c7693da78be4a53e25f039bedd8b Mon Sep 17 00:00:00 2001 From: Fabio Comuni Date: Thu, 30 Jun 2011 16:43:04 +0200 Subject: [PATCH 47/89] style template field outside admin pages --- view/theme/duepuntozero/style.css | 53 +++++++++++++++++-------------- view/theme/loozah/style.css | 51 +++++++++++++++-------------- 2 files changed, 56 insertions(+), 48 deletions(-) diff --git a/view/theme/duepuntozero/style.css b/view/theme/duepuntozero/style.css index 0c4b710c0b..dc54398dc0 100644 --- a/view/theme/duepuntozero/style.css +++ b/view/theme/duepuntozero/style.css @@ -2541,6 +2541,35 @@ a.mail-list-link { filter:alpha(opacity=100); } + +/** + * Form fields + */ +.field { + clear: left; + margin-bottom: 5px; + padding-bottom: 5px; +} + +.field label { + float: left; + width: 200px; + font-weight: bold; +} + +.field input, +.field textarea { + width: 400px; +} +.field textarea { height: 100px; } +.field_help { + display: block; + margin-left: 200px; + color: #666666; + +} + + /** * ADMIN */ @@ -2567,30 +2596,6 @@ a.mail-list-link { margin-left: 200px; } -#adminpage .field { - clear: left; - margin-bottom: 5px; - padding-bottom: 5px; -} - -#adminpage .field label { - float: left; - width: 200px; - font-weight: bold; -} - -#adminpage .field input, -#adminpage .field textarea { - width: 400px; -} -#adminpage .field textarea { height: 100px; } -#adminpage .field_help { - display: block; - margin-left: 200px; - color: #666666; - -} - #adminpage h3 { border-bottom: 1px solid #cccccc; } diff --git a/view/theme/loozah/style.css b/view/theme/loozah/style.css index c68e38b68e..7802d176d2 100644 --- a/view/theme/loozah/style.css +++ b/view/theme/loozah/style.css @@ -2559,6 +2559,33 @@ a.mail-list-link { left: 0px; top: 0px; } +/** + * Form fields + */ +.field { + clear: left; + margin-bottom: 5px; + padding-bottom: 5px; +} + +.field label { + float: left; + width: 200px; + font-weight: bold; +} + +.field input, +.field textarea { + width: 400px; +} +.field textarea { height: 100px; } +.field_help { + display: block; + margin-left: 200px; + color: #666666; + +} + /** * ADMIN @@ -2586,30 +2613,6 @@ a.mail-list-link { margin-left: 200px; } -#adminpage .field { - clear: left; - margin-bottom: 5px; - padding-bottom: 5px; -} - -#adminpage .field label { - float: left; - width: 200px; - font-weight: bold; -} - -#adminpage .field input, -#adminpage .field textarea { - width: 400px; -} -#adminpage .field textarea { height: 100px; } -#adminpage .field_help { - display: block; - margin-left: 200px; - color: #666666; - -} - #adminpage h3 { border-bottom: 1px solid #cccccc; } From a07282ea6f79a28e09c0855c22effabf22b7dcd3 Mon Sep 17 00:00:00 2001 From: Fabio Comuni Date: Thu, 30 Jun 2011 16:44:06 +0200 Subject: [PATCH 48/89] tinyMCE loads "source" version of bbcode plugin istead of "compressed" one --- .../tiny_mce/plugins/bbcode/editor_plugin.js | 156 +++++++++++++++++- .../plugins/bbcode/editor_plugin_cmp.js | 1 + .../plugins/bbcode/editor_plugin_src.js | 155 ----------------- 3 files changed, 156 insertions(+), 156 deletions(-) create mode 100644 library/tinymce/jscripts/tiny_mce/plugins/bbcode/editor_plugin_cmp.js delete mode 100644 library/tinymce/jscripts/tiny_mce/plugins/bbcode/editor_plugin_src.js diff --git a/library/tinymce/jscripts/tiny_mce/plugins/bbcode/editor_plugin.js b/library/tinymce/jscripts/tiny_mce/plugins/bbcode/editor_plugin.js index b0926c92a8..db676cd908 100644 --- a/library/tinymce/jscripts/tiny_mce/plugins/bbcode/editor_plugin.js +++ b/library/tinymce/jscripts/tiny_mce/plugins/bbcode/editor_plugin.js @@ -1 +1,155 @@ -(function(){tinymce.create('tinymce.plugins.BBCodePlugin',{init:function(ed,url){var t=this,dialect=ed.getParam('bbcode_dialect','dfrn').toLowerCase();ed.onBeforeSetContent.add(function(ed,o){o.content=t['_'+dialect+'_bbcode2html'](o.content)});ed.onPostProcess.add(function(ed,o){if(o.set)o.content=t['_'+dialect+'_bbcode2html'](o.content);if(o.get)o.content=t['_'+dialect+'_html2bbcode'](o.content)})},getInfo:function(){return{longname:'BBCode Plugin',author:'Moxiecode Systems AB',authorurl:'http://tinymce.moxiecode.com',infourl:'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/bbcode',version:tinymce.majorVersion+"."+tinymce.minorVersion version:tinymce.majorVersion+"."+tinymce.minorVersion}},_dfrn_html2bbcode:function(s){s=tinymce.trim(s);function rep(re,str){s=s.replace(re,str)};rep(/(.*?)<\/a>/gi,"[url=$1]$2[/url]");rep(/(.*?)<\/span>/gi,"[size=$1]$2[/size]");rep(/(.*?)<\/font>/gi,"$1");rep(//gi,"[img]$1[/img]");rep(/(.*?)<\/code>/gi,"[code]$1[/code]");rep(/<\/(strong|b)>/gi,"[/b]");rep(/<(strong|b)>/gi,"[b]");rep(/<\/(em|i)>/gi,"[/i]");rep(/<(em|i)>/gi,"[i]");rep(/<\/u>/gi,"[/u]");rep(/(.*?)<\/span>/gi,"[u]$1[/u]");rep(//gi,"[u]");rep(/]*>/gi,"[quote]");rep(/<\/blockquote>/gi,"[/quote]");rep(/
/gi,"\n");rep(//gi,"\n");rep(/
/gi,"\n");rep(/

/gi,"");rep(/<\/p>/gi,"\n");rep(/ /gi," ");rep(/"/gi,"\"");rep(/</gi,"<");rep(/>/gi,">");rep(/&/gi,"&");return s},_dfrn_bbcode2html:function(s){s=tinymce.trim(s);function rep(re,str){s=s.replace(re,str)};rep(/\n/gi,"
");rep(/\[b\]/gi,"");rep(/\[\/b\]/gi,"");rep(/\[i\]/gi,"");rep(/\[\/i\]/gi,"");rep(/\[u\]/gi,"");rep(/\[\/u\]/gi,"");rep(/\[url=([^\]]+)\](.*?)\[\/url\]/gi,"$2");rep(/\[url\](.*?)\[\/url\]/gi,"$1");rep(/\[img\](.*?)\[\/img\]/gi,"");rep(/\[color=(.*?)\](.*?)\[\/color\]/gi,"$2");rep(/\[code\](.*?)\[\/code\]/gi,"$1");rep(/\[quote.*?\](.*?)\[\/quote\]/gi,"

$1
");return s}});tinymce.PluginManager.add('bbcode',tinymce.plugins.BBCodePlugin)})(); \ No newline at end of file +/** + * editor_plugin_src.js + * + * Copyright 2009, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://tinymce.moxiecode.com/license + * Contributing: http://tinymce.moxiecode.com/contributing + */ + +/* Macgirvin Aug-2010 changed from punbb to dfrn dialect */ + +(function() { + tinymce.create('tinymce.plugins.BBCodePlugin', { + init : function(ed, url) { + var t = this, dialect = ed.getParam('bbcode_dialect', 'dfrn').toLowerCase(); + + ed.onBeforeSetContent.add(function(ed, o) { + o.content = t['_' + dialect + '_bbcode2html'](o.content); + }); + + ed.onPostProcess.add(function(ed, o) { + if (o.set) + o.content = t['_' + dialect + '_bbcode2html'](o.content); + + if (o.get) + o.content = t['_' + dialect + '_html2bbcode'](o.content); + }); + }, + + getInfo : function() { + return { + longname : 'BBCode Plugin', + author : 'Moxiecode Systems AB', + authorurl : 'http://tinymce.moxiecode.com', + infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/bbcode', + version : tinymce.majorVersion + "." + tinymce.minorVersion + }; + }, + + // Private methods + + // HTML -> BBCode in DFRN dialect + _dfrn_html2bbcode : function(s) { + s = tinymce.trim(s); + + function rep(re, str) { + s = s.replace(re, str); + }; + + + + + /* oembed */ + function _h2b_cb(match) { + text = bin2hex(match); + function s_h2b(data) { + match = data; + } + $.ajax({ + url: 'oembed/h2b?text=' + text, + async: false, + success: s_h2b, + dataType: 'html' + }); + return match; + } + s = s.replace(//gi, _h2b_cb); + /* /oembed */ + + + // example: to [b] + rep(/(.*?)<\/a>/gi,"[url=$1]$2[/url]"); + rep(/(.*?)<\/span>/gi,"[size=$1]$2[/size]"); + rep(/(.*?)<\/span>/gi,"[color=$1]$2[/color]"); + rep(/(.*?)<\/font>/gi,"$1"); + rep(//gi,"[img=$1x$2]$3[/img]"); + rep(//gi,"[img=$2x$1]$3[/img]"); + rep(//gi,"[img=$3x$2]$1[/img]"); + rep(//gi,"[img=$2x$3]$1[/img]"); + rep(//gi,"[img]$1[/img]"); + rep(/(.*?)<\/code>/gi,"[code]$1[/code]"); + rep(/<\/(strong|b)>/gi,"[/b]"); + rep(/<(strong|b)>/gi,"[b]"); + rep(/<\/(em|i)>/gi,"[/i]"); + rep(/<(em|i)>/gi,"[i]"); + rep(/<\/u>/gi,"[/u]"); + rep(/(.*?)<\/span>/gi,"[u]$1[/u]"); + rep(//gi,"[u]"); + rep(/]*>/gi,"[quote]"); + rep(/<\/blockquote>/gi,"[/quote]"); + rep(/
/gi,"\n\n"); + rep(//gi,"\n\n"); + rep(/
/gi,"\n"); + rep(/

/gi,""); + rep(/<\/p>/gi,"\n"); + rep(/ /gi," "); + rep(/"/gi,"\""); + rep(/</gi,"<"); + rep(/>/gi,">"); + rep(/&/gi,"&"); + + return s; + }, + + // BBCode -> HTML from DFRN dialect + _dfrn_bbcode2html : function(s) { + s = tinymce.trim(s); + + function rep(re, str) { + s = s.replace(re, str); + }; + + // example: [b] to + rep(/\n/gi,"
"); + rep(/\[b\]/gi,""); + rep(/\[\/b\]/gi,""); + rep(/\[i\]/gi,""); + rep(/\[\/i\]/gi,""); + rep(/\[u\]/gi,""); + rep(/\[\/u\]/gi,""); + rep(/\[url=([^\]]+)\](.*?)\[\/url\]/gi,"$2"); + rep(/\[url\](.*?)\[\/url\]/gi,"$1"); + rep(/\[img=(.*?)x(.*?)\](.*?)\[\/img\]/gi,""); + rep(/\[img\](.*?)\[\/img\]/gi,""); + rep(/\[color=(.*?)\](.*?)\[\/color\]/gi,"$2"); + rep(/\[size=(.*?)\](.*?)\[\/size\]/gi,"$2"); + rep(/\[code\](.*?)\[\/code\]/gi,"$1"); + rep(/\[quote.*?\](.*?)\[\/quote\]/gi,"

$1
"); + + /* oembed */ + function _b2h_cb(match, url) { + url = bin2hex(url); + function s_b2h(data) { + match = data; + } + $.ajax({ + url: 'oembed/b2h?url=' + url, + async: false, + success: s_b2h, + dataType: 'html' + }); + return match; + } + s = s.replace(/\[embed\](.*?)\[\/embed\]/gi, _b2h_cb); + + /* /oembed */ + + return s; + } + }); + + // Register plugin + tinymce.PluginManager.add('bbcode', tinymce.plugins.BBCodePlugin); +})(); \ No newline at end of file diff --git a/library/tinymce/jscripts/tiny_mce/plugins/bbcode/editor_plugin_cmp.js b/library/tinymce/jscripts/tiny_mce/plugins/bbcode/editor_plugin_cmp.js new file mode 100644 index 0000000000..b0926c92a8 --- /dev/null +++ b/library/tinymce/jscripts/tiny_mce/plugins/bbcode/editor_plugin_cmp.js @@ -0,0 +1 @@ +(function(){tinymce.create('tinymce.plugins.BBCodePlugin',{init:function(ed,url){var t=this,dialect=ed.getParam('bbcode_dialect','dfrn').toLowerCase();ed.onBeforeSetContent.add(function(ed,o){o.content=t['_'+dialect+'_bbcode2html'](o.content)});ed.onPostProcess.add(function(ed,o){if(o.set)o.content=t['_'+dialect+'_bbcode2html'](o.content);if(o.get)o.content=t['_'+dialect+'_html2bbcode'](o.content)})},getInfo:function(){return{longname:'BBCode Plugin',author:'Moxiecode Systems AB',authorurl:'http://tinymce.moxiecode.com',infourl:'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/bbcode',version:tinymce.majorVersion+"."+tinymce.minorVersion version:tinymce.majorVersion+"."+tinymce.minorVersion}},_dfrn_html2bbcode:function(s){s=tinymce.trim(s);function rep(re,str){s=s.replace(re,str)};rep(/(.*?)<\/a>/gi,"[url=$1]$2[/url]");rep(/(.*?)<\/span>/gi,"[size=$1]$2[/size]");rep(/(.*?)<\/font>/gi,"$1");rep(//gi,"[img]$1[/img]");rep(/(.*?)<\/code>/gi,"[code]$1[/code]");rep(/<\/(strong|b)>/gi,"[/b]");rep(/<(strong|b)>/gi,"[b]");rep(/<\/(em|i)>/gi,"[/i]");rep(/<(em|i)>/gi,"[i]");rep(/<\/u>/gi,"[/u]");rep(/(.*?)<\/span>/gi,"[u]$1[/u]");rep(//gi,"[u]");rep(/]*>/gi,"[quote]");rep(/<\/blockquote>/gi,"[/quote]");rep(/
/gi,"\n");rep(//gi,"\n");rep(/
/gi,"\n");rep(/

/gi,"");rep(/<\/p>/gi,"\n");rep(/ /gi," ");rep(/"/gi,"\"");rep(/</gi,"<");rep(/>/gi,">");rep(/&/gi,"&");return s},_dfrn_bbcode2html:function(s){s=tinymce.trim(s);function rep(re,str){s=s.replace(re,str)};rep(/\n/gi,"
");rep(/\[b\]/gi,"");rep(/\[\/b\]/gi,"");rep(/\[i\]/gi,"");rep(/\[\/i\]/gi,"");rep(/\[u\]/gi,"");rep(/\[\/u\]/gi,"");rep(/\[url=([^\]]+)\](.*?)\[\/url\]/gi,"$2");rep(/\[url\](.*?)\[\/url\]/gi,"$1");rep(/\[img\](.*?)\[\/img\]/gi,"");rep(/\[color=(.*?)\](.*?)\[\/color\]/gi,"$2");rep(/\[code\](.*?)\[\/code\]/gi,"$1");rep(/\[quote.*?\](.*?)\[\/quote\]/gi,"

$1
");return s}});tinymce.PluginManager.add('bbcode',tinymce.plugins.BBCodePlugin)})(); \ No newline at end of file diff --git a/library/tinymce/jscripts/tiny_mce/plugins/bbcode/editor_plugin_src.js b/library/tinymce/jscripts/tiny_mce/plugins/bbcode/editor_plugin_src.js deleted file mode 100644 index db676cd908..0000000000 --- a/library/tinymce/jscripts/tiny_mce/plugins/bbcode/editor_plugin_src.js +++ /dev/null @@ -1,155 +0,0 @@ -/** - * editor_plugin_src.js - * - * Copyright 2009, Moxiecode Systems AB - * Released under LGPL License. - * - * License: http://tinymce.moxiecode.com/license - * Contributing: http://tinymce.moxiecode.com/contributing - */ - -/* Macgirvin Aug-2010 changed from punbb to dfrn dialect */ - -(function() { - tinymce.create('tinymce.plugins.BBCodePlugin', { - init : function(ed, url) { - var t = this, dialect = ed.getParam('bbcode_dialect', 'dfrn').toLowerCase(); - - ed.onBeforeSetContent.add(function(ed, o) { - o.content = t['_' + dialect + '_bbcode2html'](o.content); - }); - - ed.onPostProcess.add(function(ed, o) { - if (o.set) - o.content = t['_' + dialect + '_bbcode2html'](o.content); - - if (o.get) - o.content = t['_' + dialect + '_html2bbcode'](o.content); - }); - }, - - getInfo : function() { - return { - longname : 'BBCode Plugin', - author : 'Moxiecode Systems AB', - authorurl : 'http://tinymce.moxiecode.com', - infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/bbcode', - version : tinymce.majorVersion + "." + tinymce.minorVersion - }; - }, - - // Private methods - - // HTML -> BBCode in DFRN dialect - _dfrn_html2bbcode : function(s) { - s = tinymce.trim(s); - - function rep(re, str) { - s = s.replace(re, str); - }; - - - - - /* oembed */ - function _h2b_cb(match) { - text = bin2hex(match); - function s_h2b(data) { - match = data; - } - $.ajax({ - url: 'oembed/h2b?text=' + text, - async: false, - success: s_h2b, - dataType: 'html' - }); - return match; - } - s = s.replace(//gi, _h2b_cb); - /* /oembed */ - - - // example: to [b] - rep(/(.*?)<\/a>/gi,"[url=$1]$2[/url]"); - rep(/(.*?)<\/span>/gi,"[size=$1]$2[/size]"); - rep(/(.*?)<\/span>/gi,"[color=$1]$2[/color]"); - rep(/(.*?)<\/font>/gi,"$1"); - rep(//gi,"[img=$1x$2]$3[/img]"); - rep(//gi,"[img=$2x$1]$3[/img]"); - rep(//gi,"[img=$3x$2]$1[/img]"); - rep(//gi,"[img=$2x$3]$1[/img]"); - rep(//gi,"[img]$1[/img]"); - rep(/(.*?)<\/code>/gi,"[code]$1[/code]"); - rep(/<\/(strong|b)>/gi,"[/b]"); - rep(/<(strong|b)>/gi,"[b]"); - rep(/<\/(em|i)>/gi,"[/i]"); - rep(/<(em|i)>/gi,"[i]"); - rep(/<\/u>/gi,"[/u]"); - rep(/(.*?)<\/span>/gi,"[u]$1[/u]"); - rep(//gi,"[u]"); - rep(/]*>/gi,"[quote]"); - rep(/<\/blockquote>/gi,"[/quote]"); - rep(/
/gi,"\n\n"); - rep(//gi,"\n\n"); - rep(/
/gi,"\n"); - rep(/

/gi,""); - rep(/<\/p>/gi,"\n"); - rep(/ /gi," "); - rep(/"/gi,"\""); - rep(/</gi,"<"); - rep(/>/gi,">"); - rep(/&/gi,"&"); - - return s; - }, - - // BBCode -> HTML from DFRN dialect - _dfrn_bbcode2html : function(s) { - s = tinymce.trim(s); - - function rep(re, str) { - s = s.replace(re, str); - }; - - // example: [b] to - rep(/\n/gi,"
"); - rep(/\[b\]/gi,""); - rep(/\[\/b\]/gi,""); - rep(/\[i\]/gi,""); - rep(/\[\/i\]/gi,""); - rep(/\[u\]/gi,""); - rep(/\[\/u\]/gi,""); - rep(/\[url=([^\]]+)\](.*?)\[\/url\]/gi,"$2"); - rep(/\[url\](.*?)\[\/url\]/gi,"$1"); - rep(/\[img=(.*?)x(.*?)\](.*?)\[\/img\]/gi,""); - rep(/\[img\](.*?)\[\/img\]/gi,""); - rep(/\[color=(.*?)\](.*?)\[\/color\]/gi,"$2"); - rep(/\[size=(.*?)\](.*?)\[\/size\]/gi,"$2"); - rep(/\[code\](.*?)\[\/code\]/gi,"$1"); - rep(/\[quote.*?\](.*?)\[\/quote\]/gi,"

$1
"); - - /* oembed */ - function _b2h_cb(match, url) { - url = bin2hex(url); - function s_b2h(data) { - match = data; - } - $.ajax({ - url: 'oembed/b2h?url=' + url, - async: false, - success: s_b2h, - dataType: 'html' - }); - return match; - } - s = s.replace(/\[embed\](.*?)\[\/embed\]/gi, _b2h_cb); - - /* /oembed */ - - return s; - } - }); - - // Register plugin - tinymce.PluginManager.add('bbcode', tinymce.plugins.BBCodePlugin); -})(); \ No newline at end of file From c5cddc742810c03ab86f6e99b0c4d52071c4b523 Mon Sep 17 00:00:00 2001 From: Fabio Comuni Date: Thu, 30 Jun 2011 16:44:54 +0200 Subject: [PATCH 49/89] profile_sidebar hook use byref values in second argument array --- boot.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/boot.php b/boot.php index ff036c3dfa..768493e443 100644 --- a/boot.php +++ b/boot.php @@ -2430,7 +2430,7 @@ function profile_sidebar($profile) { )); - $arr = array('profile' => $profile, 'entry' => $o); + $arr = array('profile' => &$profile, 'entry' => &$o); call_hooks('profile_sidebar', $arr); From 762bb8de795f8bb455da969d287397b2fa6a2f82 Mon Sep 17 00:00:00 2001 From: Fabio Comuni Date: Thu, 30 Jun 2011 17:00:26 +0200 Subject: [PATCH 50/89] update oembed and widgets plugins settings form --- addon/oembed/oembed.php | 28 +++++++++--------------- addon/oembed/settings.tpl | 7 ++++++ addon/widgets/settings.tpl | 19 ++++++++++++++++ addon/widgets/widgets.php | 36 +++++++++++++++---------------- view/theme/duepuntozero/style.css | 14 ++++++++++-- 5 files changed, 65 insertions(+), 39 deletions(-) create mode 100644 addon/oembed/settings.tpl create mode 100644 addon/widgets/settings.tpl diff --git a/addon/oembed/oembed.php b/addon/oembed/oembed.php index 7e677fd6f5..880e4992f5 100644 --- a/addon/oembed/oembed.php +++ b/addon/oembed/oembed.php @@ -25,9 +25,9 @@ function oembed_uninstall() { function oembed_settings_post($a,$b){ if(! local_user()) return; - if (isset($_POST['oembed-submit'])){ - set_pconfig(local_user(), 'oembed', 'use_for_youtube', (isset($_POST['oembed_use_for_youtube'])? intval($_POST['oembed_use_for_youtube']):0)); - notice( t('OEmbed settings updated') . EOL); + if (x($_POST,'oembed-submit')){ + set_pconfig(local_user(), 'oembed', 'use_for_youtube', (x($_POST,'oembed_use_for_youtube')? intval($_POST['oembed_use_for_youtube']):0)); + info( t('OEmbed settings updated') . EOL); } } @@ -36,21 +36,13 @@ function oembed_settings(&$a,&$o) { return; $uofy = intval(get_pconfig(local_user(), 'oembed', 'use_for_youtube' )); - $o.=' -
-

OEmbed

-
- -
-
-
- -
-
'; + $t = file_get_contents( dirname(__file__). "/settings.tpl" ); + $o .= replace_macros($t, array( + '$submit' => t('Submit'), + '$title' => "OEmbed", + '$useoembed' => array('oembed_use_for_youtube', t('Use OEmbed for YouTube videos'), $uofy, ""), + )); + } diff --git a/addon/oembed/settings.tpl b/addon/oembed/settings.tpl new file mode 100644 index 0000000000..5a65ef8e5d --- /dev/null +++ b/addon/oembed/settings.tpl @@ -0,0 +1,7 @@ +
+

$title

+ {{ inc field_checkbox.tpl with $field=$useoembed }}{{ endinc }} +
+ +
+
diff --git a/addon/widgets/settings.tpl b/addon/widgets/settings.tpl new file mode 100644 index 0000000000..9d0f21d296 --- /dev/null +++ b/addon/widgets/settings.tpl @@ -0,0 +1,19 @@ +
+

$title

+
+ + $key +
+ +
+ +
+ +

$widgets_h

+
    + {{ for $widgets as $w }} +
  • $w.1
  • + {{ endfor }} +
+ +
diff --git a/addon/widgets/widgets.php b/addon/widgets/widgets.php index f5f8682223..13c4f93bb2 100644 --- a/addon/widgets/widgets.php +++ b/addon/widgets/widgets.php @@ -33,34 +33,32 @@ function widgets_settings(&$a,&$o) { $key = get_pconfig(local_user(), 'widgets', 'key' ); if ($key=='') { $key = mt_rand(); set_pconfig(local_user(), 'widgets', 'key', $key); } - - $o .='

Widgets

'; - - - $o.=' -
- '. t('Widgets key: ') .''.$key.' -
-
-
- -
'; - - - $o.='

Widgets:

'; - $o .= '
    '; + + $widgets = array(); $d = dir(dirname(__file__)); while(false !== ($f = $d->read())) { if(substr($f,0,7)=="widget_") { preg_match("|widget_([^.]+).php|", $f, $m); $w=$m[1]; require_once($f); - $o.='
  • '. call_user_func($w."_widget_name") .'
  • '; + $widgets[] = array($w, call_user_func($w."_widget_name")); + } } - $o .= '
'; - + + + $t = file_get_contents( dirname(__file__). "/settings.tpl" ); + $o .= replace_macros($t, array( + '$submit' => t('Generate new key'), + '$baseurl' => $a->get_baseurl(), + '$title' => "Widgets", + '$label' => t('Widgets key'), + '$key' => $key, + '$widgets_h' => t('Widgets available'), + '$widgets' => $widgets, + )); + } function widgets_module() { diff --git a/view/theme/duepuntozero/style.css b/view/theme/duepuntozero/style.css index dc54398dc0..67a1546eed 100644 --- a/view/theme/duepuntozero/style.css +++ b/view/theme/duepuntozero/style.css @@ -2541,6 +2541,15 @@ a.mail-list-link { filter:alpha(opacity=100); } +/** + * Plugins settings + */ + +.settings-block > h3, +.settings-heading { + border-bottom: 1px solid #babdb6 +} + /** * Form fields @@ -2554,7 +2563,6 @@ a.mail-list-link { .field label { float: left; width: 200px; - font-weight: bold; } .field input, @@ -2599,7 +2607,9 @@ a.mail-list-link { #adminpage h3 { border-bottom: 1px solid #cccccc; } - +#adminpage .field label { + font-weight: bold; +} #adminpage .submit { clear:left; text-align: right; From 7778dbb67b2c033473b0da9b34df01d28162b5ee Mon Sep 17 00:00:00 2001 From: Fabio Comuni Date: Thu, 30 Jun 2011 17:01:26 +0200 Subject: [PATCH 51/89] twitter and statusnet plugin settings are not parsed on post if their respective submit buttons was not clicked by user --- addon/statusnet/statusnet.php | 63 ++++++++++++++++++----------------- addon/twitter/twitter.php | 7 ++-- 2 files changed, 38 insertions(+), 32 deletions(-) diff --git a/addon/statusnet/statusnet.php b/addon/statusnet/statusnet.php index 22f7dc8f9e..9357b0ebd9 100644 --- a/addon/statusnet/statusnet.php +++ b/addon/statusnet/statusnet.php @@ -89,6 +89,9 @@ function statusnet_jot_nets(&$a,&$b) { function statusnet_settings_post ($a,$post) { if(! local_user()) return; + // don't check statusnet settings if statusnet submit button is not clicked + if (!x($_POST,'statusnet-submit')) return; + if (isset($_POST['statusnet-disconnect'])) { /*** * if the statusnet-disconnect checkbox is set, clear the statusnet configuration @@ -152,28 +155,28 @@ function statusnet_settings_post ($a,$post) { goaway($a->get_baseurl().'/settings/addon'); } else { if (isset($_POST['statusnet-pin'])) { - // if the user supplied us with a PIN from Twitter, let the magic of OAuth happen - logger('got a StatusNet security code'); + // if the user supplied us with a PIN from Twitter, let the magic of OAuth happen + logger('got a StatusNet security code'); $api = get_pconfig(local_user(), 'statusnet', 'baseapi'); - $ckey = get_pconfig(local_user(), 'statusnet', 'consumerkey' ); - $csecret = get_pconfig(local_user(), 'statusnet', 'consumersecret' ); - // the token and secret for which the PIN was generated were hidden in the settings - // form as token and token2, we need a new connection to Twitter using these token - // and secret to request a Access Token with the PIN - $connection = new StatusNetOAuth($api, $ckey, $csecret, $_POST['statusnet-token'], $_POST['statusnet-token2']); - $token = $connection->getAccessToken( $_POST['statusnet-pin'] ); - // ok, now that we have the Access Token, save them in the user config - set_pconfig(local_user(),'statusnet', 'oauthtoken', $token['oauth_token']); - set_pconfig(local_user(),'statusnet', 'oauthsecret', $token['oauth_token_secret']); + $ckey = get_pconfig(local_user(), 'statusnet', 'consumerkey' ); + $csecret = get_pconfig(local_user(), 'statusnet', 'consumersecret' ); + // the token and secret for which the PIN was generated were hidden in the settings + // form as token and token2, we need a new connection to Twitter using these token + // and secret to request a Access Token with the PIN + $connection = new StatusNetOAuth($api, $ckey, $csecret, $_POST['statusnet-token'], $_POST['statusnet-token2']); + $token = $connection->getAccessToken( $_POST['statusnet-pin'] ); + // ok, now that we have the Access Token, save them in the user config + set_pconfig(local_user(),'statusnet', 'oauthtoken', $token['oauth_token']); + set_pconfig(local_user(),'statusnet', 'oauthsecret', $token['oauth_token_secret']); set_pconfig(local_user(),'statusnet', 'post', 1); // reload the Addon Settings page, if we don't do it see Bug #42 goaway($a->get_baseurl().'/settings/addon'); - } else { - // if no PIN is supplied in the POST variables, the user has changed the setting - // to post a tweet for every new __public__ posting to the wall - set_pconfig(local_user(),'statusnet','post',intval($_POST['statusnet-enable'])); - set_pconfig(local_user(),'statusnet','post_by_default',intval($_POST['statusnet-default'])); - info( t('StatusNet settings updated.') . EOL); + } else { + // if no PIN is supplied in the POST variables, the user has changed the setting + // to post a tweet for every new __public__ posting to the wall + set_pconfig(local_user(),'statusnet','post',intval($_POST['statusnet-enable'])); + set_pconfig(local_user(),'statusnet','post_by_default',intval($_POST['statusnet-default'])); + info( t('StatusNet settings updated.') . EOL); }}}} } function statusnet_settings(&$a,&$s) { @@ -217,7 +220,7 @@ function statusnet_settings(&$a,&$s) { $s .= ''. $asn['sitename'] .'
'; } $s .= '

'; - $s .= '
'; + $s .= '
'; } $s .= '

' . t('Provide your own OAuth Credentials') . '

'; $s .= '

'. t('No consumer key pair for StatusNet found. Register your Friendika Account as an desktop client on your StatusNet account, copy the consumer key pair here and enter the API base root.
Before you register your own OAuth key pair ask the administrator if there is already a key pair for this Friendika installation at your favorited StatusNet installation.') .'

'; @@ -231,7 +234,7 @@ function statusnet_settings(&$a,&$s) { $s .= ''; $s .= '
'; $s .= '

'; - $s .= '
'; + $s .= '
'; } else { /*** * ok we have a consumer key pair now look into the OAuth stuff @@ -256,15 +259,15 @@ function statusnet_settings(&$a,&$s) { $s .= ''; $s .= ''; $s .= ''; - $s .= '
'; - $s .= '
'; - $s .= '

'.t('Cancel Connection Process').'

'; - $s .= '
'; - $s .= '

'.t('Current StatusNet API is').': '.$api.'

'; - $s .= ''; - $s .= ''; - $s .= '
'; - $s .= '
'; + $s .= '
'; + $s .= '
'; + $s .= '

'.t('Cancel Connection Process').'

'; + $s .= '
'; + $s .= '

'.t('Current StatusNet API is').': '.$api.'

'; + $s .= ''; + $s .= ''; + $s .= '
'; + $s .= '
'; } else { /*** * we have an OAuth key / secret pair for the user @@ -286,7 +289,7 @@ function statusnet_settings(&$a,&$s) { $s .= ''; $s .= ''; $s .= '
'; - $s .= '
'; + $s .= '
'; } } $s .= '
'; diff --git a/addon/twitter/twitter.php b/addon/twitter/twitter.php index 7829799bc1..183c71126f 100644 --- a/addon/twitter/twitter.php +++ b/addon/twitter/twitter.php @@ -76,6 +76,9 @@ function twitter_jot_nets(&$a,&$b) { function twitter_settings_post ($a,$post) { if(! local_user()) return; + // don't check twitter settings if twitter submit button is not clicked + if (!x($_POST,'twitter-submit')) return; + if (isset($_POST['twitter-disconnect'])) { /*** * if the twitter-disconnect checkbox is set, clear the OAuth key/secret pair @@ -159,7 +162,7 @@ function twitter_settings(&$a,&$s) { $s .= ''; $s .= ''; $s .= '
'; - $s .= '
'; + $s .= '
'; } else { /*** * we have an OAuth key / secret pair for the user @@ -178,7 +181,7 @@ function twitter_settings(&$a,&$s) { $s .= ''; $s .= ''; $s .= '
'; - $s .= '
'; + $s .= '
'; } } $s .= '
'; From 42a6bc81e9f6ddea5ac61e4b79a75515028dcfae Mon Sep 17 00:00:00 2001 From: Friendika Date: Thu, 30 Jun 2011 15:32:39 -0700 Subject: [PATCH 52/89] revup --- boot.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/boot.php b/boot.php index ff036c3dfa..e303f5fc0b 100644 --- a/boot.php +++ b/boot.php @@ -4,7 +4,7 @@ set_time_limit(0); ini_set('pcre.backtrack_limit', 250000); -define ( 'FRIENDIKA_VERSION', '2.2.1026' ); +define ( 'FRIENDIKA_VERSION', '2.2.1027' ); define ( 'DFRN_PROTOCOL_VERSION', '2.21' ); define ( 'DB_UPDATE_VERSION', 1070 ); From 53653f6a4d6b4c9d348d7e9d8eb1648469b031af Mon Sep 17 00:00:00 2001 From: Friendika Date: Thu, 30 Jun 2011 17:35:35 -0700 Subject: [PATCH 53/89] consolidate perrmisions sql, minor duepuntozero validation fixes --- include/security.php | 71 +++++++++++++++++++++++++++++++ mod/attach.php | 45 +++----------------- mod/display.php | 37 +--------------- mod/photo.php | 36 ++-------------- mod/photos.php | 68 ++--------------------------- mod/profile.php | 45 ++++---------------- view/theme/duepuntozero/style.css | 14 +++--- 7 files changed, 101 insertions(+), 215 deletions(-) diff --git a/include/security.php b/include/security.php index c74a9b4a3c..789e47db28 100644 --- a/include/security.php +++ b/include/security.php @@ -44,3 +44,74 @@ function can_write_wall(&$a,$owner) { return false; } + + +function permissions_sql($owner_id,$remote_verified = false,$groups = null) { + + $local_user = local_user(); + $remote_user = remote_user(); + + /** + * Construct permissions + * + * default permissions - anonymous user + */ + + $sql = " AND allow_cid = '' + AND allow_gid = '' + AND deny_cid = '' + AND deny_gid = '' + "; + + /** + * Profile owner - everything is visible + */ + + if(($local_user) && ($local_user == $owner_id)) { + $sql = ''; + } + + /** + * Authenticated visitor. Unless pre-verified, + * check that the contact belongs to this $owner_id + * and load the groups the visitor belongs to. + * If pre-verified, the caller is expected to have already + * done this and passed the groups into this function. + */ + + elseif($remote_user) { + + if(! $remote_verified) { + $r = q("SELECT id FROM contact WHERE id = %d AND uid = %d AND blocked = 0 LIMIT 1", + intval($remote_user), + intval($owner_id) + ); + if(count($r)) { + $remote_verified = true; + $groups = init_groups_visitor($remote_user); + } + } + if($remote_verified) { + + $gs = '<<>>'; // should be impossible to match + + if(is_array($groups) && count($groups)) { + foreach($groups as $g) + $gs .= '|<' . intval($g) . '>'; + } + + $sql = sprintf( + " AND ( allow_cid = '' OR allow_cid REGEXP '<%d>' ) + AND ( deny_cid = '' OR NOT deny_cid REGEXP '<%d>' ) + AND ( allow_gid = '' OR allow_gid REGEXP '%s' ) + AND ( deny_gid = '' OR NOT deny_gid REGEXP '%s') + ", + intval($remote_user), + intval($remote_user), + dbesc($gs), + dbesc($gs) + ); + } + } + return $sql; +} \ No newline at end of file diff --git a/mod/attach.php b/mod/attach.php index 3953d3aa19..ae6540201e 100644 --- a/mod/attach.php +++ b/mod/attach.php @@ -1,5 +1,7 @@ argc != 2) { @@ -9,6 +11,8 @@ function attach_init(&$a) { $item_id = intval($a->argv[1]); + // Check for existence, which will also provide us the owner uid + $r = q("SELECT * FROM `attach` WHERE `id` = %d LIMIT 1", intval($item_id) ); @@ -17,39 +21,7 @@ function attach_init(&$a) { return; } - $owner = $r[0]['uid']; - - $sql_extra = " AND `allow_cid` = '' AND `allow_gid` = '' AND `deny_cid` = '' AND `deny_gid` = '' "; - - if(local_user() && ($owner == $_SESSION['uid'])) { - - // Owner can always see his/her photos - $sql_extra = ''; - - } - elseif(remote_user()) { - - // authenticated visitor - here lie dragons - - $groups = init_groups_visitor($_SESSION['visitor_id']); - $gs = '<<>>'; // should be impossible to match - if(count($groups)) { - foreach($groups as $g) - $gs .= '|<' . intval($g) . '>'; - } - - $sql_extra = sprintf( - " AND ( `allow_cid` = '' OR `allow_cid` REGEXP '<%d>' ) - AND ( `deny_cid` = '' OR NOT `deny_cid` REGEXP '<%d>' ) - AND ( `allow_gid` = '' OR `allow_gid` REGEXP '%s' ) - AND ( `deny_gid` = '' OR NOT `deny_gid` REGEXP '%s') ", - - intval($_SESSION['visitor_id']), - intval($_SESSION['visitor_id']), - dbesc($gs), - dbesc($gs) - ); - } + $sql_extra = permissions_sql($r[0]['uid']); // Now we'll see if we can access the attachment @@ -57,17 +29,14 @@ function attach_init(&$a) { dbesc($item_id) ); - if(count($r)) { - $data = $r[0]['data']; - } - else { + if(! count($r)) { notice( t('Permission denied.') . EOL); return; } header('Content-type: ' . $r[0]['filetype']); header('Content-disposition: attachment; filename=' . $r[0]['filename']); - echo $data; + echo $r[0]['data']; killme(); // NOTREACHED } \ No newline at end of file diff --git a/mod/display.php b/mod/display.php index fdb93e480c..305a21825f 100644 --- a/mod/display.php +++ b/mod/display.php @@ -59,42 +59,7 @@ function display_content(&$a) { if(count($r)) $a->page_contact = $r[0]; - $sql_extra = " - AND `allow_cid` = '' - AND `allow_gid` = '' - AND `deny_cid` = '' - AND `deny_gid` = '' - "; - - - // Profile owner - everything is visible - - if(local_user() && (local_user() == $a->profile['uid'])) { - $sql_extra = ''; - } - - // authenticated visitor - here lie dragons - // If $remotecontact is true, we know that not only is this a remotely authenticated - // person, but that it is *our* contact, which is important in multi-user mode. - - elseif($remote_contact) { - $gs = '<<>>'; // should be impossible to match - if(count($groups)) { - foreach($groups as $g) - $gs .= '|<' . intval($g) . '>'; - } - $sql_extra = sprintf( - " AND ( `allow_cid` = '' OR `allow_cid` REGEXP '<%d>' ) - AND ( `deny_cid` = '' OR NOT `deny_cid` REGEXP '<%d>' ) - AND ( `allow_gid` = '' OR `allow_gid` REGEXP '%s' ) - AND ( `deny_gid` = '' OR NOT `deny_gid` REGEXP '%s') ", - - intval($_SESSION['visitor_id']), - intval($_SESSION['visitor_id']), - dbesc($gs), - dbesc($gs) - ); - } + $sql_extra = permissions_sql($a->profile['uid'],$remote_contact,$groups); $r = q("SELECT `item`.*, `item`.`id` AS `item_id`, `contact`.`name`, `contact`.`photo`, `contact`.`url`, `contact`.`rel`, diff --git a/mod/photo.php b/mod/photo.php index 3bea7e72de..9809aa418d 100644 --- a/mod/photo.php +++ b/mod/photo.php @@ -1,5 +1,7 @@ argc) { @@ -73,39 +75,7 @@ function photo_init(&$a) { ); if(count($r)) { - $owner = $r[0]['uid']; - - $sql_extra = " AND `allow_cid` = '' AND `allow_gid` = '' AND `deny_cid` = '' AND `deny_gid` = '' "; - - if(local_user() && ($owner == $_SESSION['uid'])) { - - // Owner can always see his/her photos - $sql_extra = ''; - - } - elseif(remote_user()) { - - // authenticated visitor - here lie dragons - - $groups = init_groups_visitor($_SESSION['visitor_id']); - $gs = '<<>>'; // should be impossible to match - if(count($groups)) { - foreach($groups as $g) - $gs .= '|<' . intval($g) . '>'; - } - - $sql_extra = sprintf( - " AND ( `allow_cid` = '' OR `allow_cid` REGEXP '<%d>' ) - AND ( `deny_cid` = '' OR NOT `deny_cid` REGEXP '<%d>' ) - AND ( `allow_gid` = '' OR `allow_gid` REGEXP '%s' ) - AND ( `deny_gid` = '' OR NOT `deny_gid` REGEXP '%s') ", - - intval($_SESSION['visitor_id']), - intval($_SESSION['visitor_id']), - dbesc($gs), - dbesc($gs) - ); - } + $sql_extra = permissions_sql($r[0]['uid']); // Now we'll see if we can access the photo diff --git a/mod/photos.php b/mod/photos.php index f8059fc08e..2c896e32f5 100644 --- a/mod/photos.php +++ b/mod/photos.php @@ -3,6 +3,7 @@ require_once('include/Photo.php'); require_once('include/items.php'); require_once('include/acl_selectors.php'); require_once('include/bbcode.php'); +require_once('include/security.php'); function photos_init(&$a) { @@ -23,40 +24,8 @@ function photos_init(&$a) { $a->data['user'] = $r[0]; - - // default permissions - anonymous user - - $sql_extra = " AND `allow_cid` = '' AND `allow_gid` = '' AND `deny_cid` = '' AND `deny_gid` = '' "; - - // Profile owner - everything is visible - - if(local_user() && (local_user() == $a->data['user']['uid'])) { - $sql_extra = ''; - } - elseif(remote_user()) { - - $groups = init_groups_visitor(remote_user()); - - // authenticated visitor - here lie dragons - $gs = '<<>>'; // should be impossible to match - if(count($groups)) { - foreach($groups as $g) - $gs .= '|<' . intval($g) . '>'; - } - $sql_extra = sprintf( - " AND ( `allow_cid` = '' OR `allow_cid` REGEXP '<%d>' ) - AND ( `deny_cid` = '' OR NOT `deny_cid` REGEXP '<%d>' ) - AND ( `allow_gid` = '' OR `allow_gid` REGEXP '%s' ) - AND ( `deny_gid` = '' OR NOT `deny_gid` REGEXP '%s') ", - - intval(remote_user()), - intval(remote_user()), - dbesc($gs), - dbesc($gs) - ); - } - - + $sql_extra = permissions_sql($a->data['user']['uid']); +echo "SQL=$sql_extra"; $albums = q("SELECT distinct(`album`) AS `album` FROM `photo` WHERE `uid` = %d $sql_extra ", intval($a->data['user']['uid']) ); @@ -806,8 +775,6 @@ function photos_content(&$a) { $owner_uid = $a->data['user']['uid']; - - $community_page = (($a->data['user']['page-flags'] == PAGE_COMMUNITY) ? true : false); if((local_user()) && (local_user() == $owner_uid)) @@ -858,34 +825,7 @@ function photos_content(&$a) { return; } - // default permissions - anonymous user - - $sql_extra = " AND `allow_cid` = '' AND `allow_gid` = '' AND `deny_cid` = '' AND `deny_gid` = '' "; - - // Profile owner - everything is visible - - if(local_user() && (local_user() == $owner_uid)) { - $sql_extra = ''; - } - elseif(remote_user()) { - // authenticated visitor - here lie dragons - $gs = '<<>>'; // should be impossible to match - if(count($groups)) { - foreach($groups as $g) - $gs .= '|<' . intval($g) . '>'; - } - $sql_extra = sprintf( - " AND ( `allow_cid` = '' OR `allow_cid` REGEXP '<%d>' ) - AND ( `deny_cid` = '' OR NOT `deny_cid` REGEXP '<%d>' ) - AND ( `allow_gid` = '' OR `allow_gid` REGEXP '%s' ) - AND ( `deny_gid` = '' OR NOT `deny_gid` REGEXP '%s') ", - - intval(remote_user()), - intval(remote_user()), - dbesc($gs), - dbesc($gs) - ); - } + $sql_extra = permissions_sql($owner_uid,$remote_contact,$groups); $o = ""; diff --git a/mod/profile.php b/mod/profile.php index f2dd7f4dfa..e9b144ffdd 100644 --- a/mod/profile.php +++ b/mod/profile.php @@ -164,49 +164,20 @@ function profile_content(&$a, $update = 0) { } } - // Construct permissions - - // default permissions - anonymous user - - $sql_extra = " AND `allow_cid` = '' AND `allow_gid` = '' AND `deny_cid` = '' AND `deny_gid` = '' "; - - // Profile owner - everything is visible - if($is_owner) { - $sql_extra = ''; - - // Oh - while we're here... reset the Unseen messages - $r = q("UPDATE `item` SET `unseen` = 0 WHERE `wall` = 1 AND `unseen` = 1 AND `uid` = %d", - intval($_SESSION['uid']) - ); - - } - - // authenticated visitor - here lie dragons - // If $remotecontact is true, we know that not only is this a remotely authenticated - // person, but that it is *our* contact, which is important in multi-user mode. - - elseif($remote_contact) { - $gs = '<<>>'; // should be impossible to match - if(count($groups)) { - foreach($groups as $g) - $gs .= '|<' . intval($g) . '>'; - } - $sql_extra = sprintf( - " AND ( `allow_cid` = '' OR `allow_cid` REGEXP '<%d>' ) - AND ( `deny_cid` = '' OR NOT `deny_cid` REGEXP '<%d>' ) - AND ( `allow_gid` = '' OR `allow_gid` REGEXP '%s' ) - AND ( `deny_gid` = '' OR NOT `deny_gid` REGEXP '%s') ", - - intval($_SESSION['visitor_id']), - intval($_SESSION['visitor_id']), - dbesc($gs), - dbesc($gs) + intval(local_user()) ); } + /** + * Get permissions SQL - if $remote_contact is true, our remote user has been pre-verified and we already have fetched his/her groups + */ + + $sql_extra = permissions_sql($a->profile['profile_uid'],$remote_contact,$groups); + + $r = q("SELECT COUNT(*) AS `total` FROM `item` LEFT JOIN `contact` ON `contact`.`id` = `item`.`contact-id` WHERE `item`.`uid` = %d AND `item`.`visible` = 1 AND `item`.`deleted` = 0 diff --git a/view/theme/duepuntozero/style.css b/view/theme/duepuntozero/style.css index 67a1546eed..a99d7530fa 100644 --- a/view/theme/duepuntozero/style.css +++ b/view/theme/duepuntozero/style.css @@ -2547,7 +2547,7 @@ a.mail-list-link { .settings-block > h3, .settings-heading { - border-bottom: 1px solid #babdb6 + border-bottom: 1px solid #babdb6; } @@ -2632,7 +2632,7 @@ a.mail-list-link { margin-right: 1em; } -#adminpage table {width:100%; border-bottom: 1p solid #000000; margin: 5px 0px;} +#adminpage table {width:100%; border-bottom: 1px solid #000000; margin: 5px 0px;} #adminpage table th { text-align: left;} #adminpage td .icon { float: left;} #adminpage table#users img { width: 16px; height: 16px; } @@ -2692,9 +2692,9 @@ a.mail-list-link { margin-top: 10px; } -.type-video { background-position: 0px; 0px; } -.type-image { background-position: -20px; 0px; } -.type-audio { background-position: -40px; 0px; } -.type-text { background-position: -60px; 0px; } -.type-unkn { background-position: -80px; 0px; } +.type-video { background-position: 0px 0px; } +.type-image { background-position: -20px 0px; } +.type-audio { background-position: -40px 0px; } +.type-text { background-position: -60px 0px; } +.type-unkn { background-position: -80px 0px; } From 9aeccaaa9ef7f3569149bb7c9aae56e7f8b5f514 Mon Sep 17 00:00:00 2001 From: Friendika Date: Thu, 30 Jun 2011 18:36:38 -0700 Subject: [PATCH 54/89] we still need the source file. Don't know why. --- .../plugins/bbcode/editor_plugin_src.js | 155 ++++++++++++++++++ 1 file changed, 155 insertions(+) create mode 100644 library/tinymce/jscripts/tiny_mce/plugins/bbcode/editor_plugin_src.js diff --git a/library/tinymce/jscripts/tiny_mce/plugins/bbcode/editor_plugin_src.js b/library/tinymce/jscripts/tiny_mce/plugins/bbcode/editor_plugin_src.js new file mode 100644 index 0000000000..db676cd908 --- /dev/null +++ b/library/tinymce/jscripts/tiny_mce/plugins/bbcode/editor_plugin_src.js @@ -0,0 +1,155 @@ +/** + * editor_plugin_src.js + * + * Copyright 2009, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://tinymce.moxiecode.com/license + * Contributing: http://tinymce.moxiecode.com/contributing + */ + +/* Macgirvin Aug-2010 changed from punbb to dfrn dialect */ + +(function() { + tinymce.create('tinymce.plugins.BBCodePlugin', { + init : function(ed, url) { + var t = this, dialect = ed.getParam('bbcode_dialect', 'dfrn').toLowerCase(); + + ed.onBeforeSetContent.add(function(ed, o) { + o.content = t['_' + dialect + '_bbcode2html'](o.content); + }); + + ed.onPostProcess.add(function(ed, o) { + if (o.set) + o.content = t['_' + dialect + '_bbcode2html'](o.content); + + if (o.get) + o.content = t['_' + dialect + '_html2bbcode'](o.content); + }); + }, + + getInfo : function() { + return { + longname : 'BBCode Plugin', + author : 'Moxiecode Systems AB', + authorurl : 'http://tinymce.moxiecode.com', + infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/bbcode', + version : tinymce.majorVersion + "." + tinymce.minorVersion + }; + }, + + // Private methods + + // HTML -> BBCode in DFRN dialect + _dfrn_html2bbcode : function(s) { + s = tinymce.trim(s); + + function rep(re, str) { + s = s.replace(re, str); + }; + + + + + /* oembed */ + function _h2b_cb(match) { + text = bin2hex(match); + function s_h2b(data) { + match = data; + } + $.ajax({ + url: 'oembed/h2b?text=' + text, + async: false, + success: s_h2b, + dataType: 'html' + }); + return match; + } + s = s.replace(//gi, _h2b_cb); + /* /oembed */ + + + // example: to [b] + rep(/(.*?)<\/a>/gi,"[url=$1]$2[/url]"); + rep(/(.*?)<\/span>/gi,"[size=$1]$2[/size]"); + rep(/(.*?)<\/span>/gi,"[color=$1]$2[/color]"); + rep(/(.*?)<\/font>/gi,"$1"); + rep(//gi,"[img=$1x$2]$3[/img]"); + rep(//gi,"[img=$2x$1]$3[/img]"); + rep(//gi,"[img=$3x$2]$1[/img]"); + rep(//gi,"[img=$2x$3]$1[/img]"); + rep(//gi,"[img]$1[/img]"); + rep(/(.*?)<\/code>/gi,"[code]$1[/code]"); + rep(/<\/(strong|b)>/gi,"[/b]"); + rep(/<(strong|b)>/gi,"[b]"); + rep(/<\/(em|i)>/gi,"[/i]"); + rep(/<(em|i)>/gi,"[i]"); + rep(/<\/u>/gi,"[/u]"); + rep(/(.*?)<\/span>/gi,"[u]$1[/u]"); + rep(//gi,"[u]"); + rep(/]*>/gi,"[quote]"); + rep(/<\/blockquote>/gi,"[/quote]"); + rep(/
/gi,"\n\n"); + rep(//gi,"\n\n"); + rep(/
/gi,"\n"); + rep(/

/gi,""); + rep(/<\/p>/gi,"\n"); + rep(/ /gi," "); + rep(/"/gi,"\""); + rep(/</gi,"<"); + rep(/>/gi,">"); + rep(/&/gi,"&"); + + return s; + }, + + // BBCode -> HTML from DFRN dialect + _dfrn_bbcode2html : function(s) { + s = tinymce.trim(s); + + function rep(re, str) { + s = s.replace(re, str); + }; + + // example: [b] to + rep(/\n/gi,"
"); + rep(/\[b\]/gi,""); + rep(/\[\/b\]/gi,""); + rep(/\[i\]/gi,""); + rep(/\[\/i\]/gi,""); + rep(/\[u\]/gi,""); + rep(/\[\/u\]/gi,""); + rep(/\[url=([^\]]+)\](.*?)\[\/url\]/gi,"$2"); + rep(/\[url\](.*?)\[\/url\]/gi,"$1"); + rep(/\[img=(.*?)x(.*?)\](.*?)\[\/img\]/gi,""); + rep(/\[img\](.*?)\[\/img\]/gi,""); + rep(/\[color=(.*?)\](.*?)\[\/color\]/gi,"$2"); + rep(/\[size=(.*?)\](.*?)\[\/size\]/gi,"$2"); + rep(/\[code\](.*?)\[\/code\]/gi,"$1"); + rep(/\[quote.*?\](.*?)\[\/quote\]/gi,"

$1
"); + + /* oembed */ + function _b2h_cb(match, url) { + url = bin2hex(url); + function s_b2h(data) { + match = data; + } + $.ajax({ + url: 'oembed/b2h?url=' + url, + async: false, + success: s_b2h, + dataType: 'html' + }); + return match; + } + s = s.replace(/\[embed\](.*?)\[\/embed\]/gi, _b2h_cb); + + /* /oembed */ + + return s; + } + }); + + // Register plugin + tinymce.PluginManager.add('bbcode', tinymce.plugins.BBCodePlugin); +})(); \ No newline at end of file From cdddfca0b5971d2437eee09ad6985f3df5ae5bfd Mon Sep 17 00:00:00 2001 From: Friendika Date: Thu, 30 Jun 2011 19:02:11 -0700 Subject: [PATCH 55/89] photos were not working in private mail --- boot.php | 2 +- database.sql | 2 +- include/notifier.php | 4 +++- update.php | 9 ++++++++- 4 files changed, 13 insertions(+), 4 deletions(-) diff --git a/boot.php b/boot.php index 1ab00f84b8..2160b2548c 100644 --- a/boot.php +++ b/boot.php @@ -6,7 +6,7 @@ ini_set('pcre.backtrack_limit', 250000); define ( 'FRIENDIKA_VERSION', '2.2.1027' ); define ( 'DFRN_PROTOCOL_VERSION', '2.21' ); -define ( 'DB_UPDATE_VERSION', 1070 ); +define ( 'DB_UPDATE_VERSION', 1071 ); define ( 'EOL', "
\r\n" ); define ( 'ATOM_TIME', 'Y-m-d\TH:i:s\Z' ); diff --git a/database.sql b/database.sql index df99ca7f6c..5187f3c3ec 100644 --- a/database.sql +++ b/database.sql @@ -243,7 +243,7 @@ CREATE TABLE IF NOT EXISTS `mail` ( `from-url` char(255) NOT NULL, `contact-id` char(255) NOT NULL, `title` char(255) NOT NULL, - `body` text NOT NULL, + `body` mediumtext NOT NULL, `seen` tinyint(1) NOT NULL, `replied` tinyint(1) NOT NULL, `uri` char(255) NOT NULL, diff --git a/include/notifier.php b/include/notifier.php index 4b97311f65..9c194d962c 100644 --- a/include/notifier.php +++ b/include/notifier.php @@ -238,6 +238,8 @@ function notifier_run($argv, $argc){ if($cmd === 'mail') { $notify_hub = false; // mail is not public + $body = fix_private_photos($item['body'],$owner['uid']); + $atom .= replace_macros($mail_template, array( '$name' => xmlify($owner['name']), '$profile_page' => xmlify($owner['url']), @@ -245,7 +247,7 @@ function notifier_run($argv, $argc){ '$item_id' => xmlify($item['uri']), '$subject' => xmlify($item['title']), '$created' => xmlify(datetime_convert('UTC', 'UTC', $item['created'] . '+00:00' , ATOM_TIME)), - '$content' => xmlify($item['body']), + '$content' => xmlify($body), '$parent_id' => xmlify($item['parent-uri']) )); } diff --git a/update.php b/update.php index 306731a139..1876629017 100644 --- a/update.php +++ b/update.php @@ -1,6 +1,6 @@ Date: Thu, 30 Jun 2011 20:34:49 -0700 Subject: [PATCH 56/89] match the documentation --- boot.php | 2 ++ 1 file changed, 2 insertions(+) diff --git a/boot.php b/boot.php index 2160b2548c..27c801923f 100644 --- a/boot.php +++ b/boot.php @@ -296,6 +296,8 @@ class App { $this->module = str_replace(".", "_", $this->argv[0]); } else { + $this->argc = 1; + $this->argv = array('home'); $this->module = 'home'; } From 481cd708acfd3291eed7eba6af596c541651963c Mon Sep 17 00:00:00 2001 From: Friendika Date: Thu, 30 Jun 2011 21:56:07 -0700 Subject: [PATCH 57/89] allow polling to mostly survive minor memory shortages. --- addon/facebook/facebook.php | 10 ++++++++-- boot.php | 12 ++++++++++++ include/poller.php | 32 +++++++++++++++++++++++++++++--- 3 files changed, 49 insertions(+), 5 deletions(-) diff --git a/addon/facebook/facebook.php b/addon/facebook/facebook.php index 49f1938043..c54d5b5f09 100644 --- a/addon/facebook/facebook.php +++ b/addon/facebook/facebook.php @@ -376,9 +376,12 @@ function facebook_cron($a,$b) { logger('facebook_cron'); - set_config('facebook','last_poll', time()); - $r = q("SELECT * FROM `pconfig` WHERE `cat` = 'facebook' AND `k` = 'post' AND `v` = '1' "); + // Find the FB users on this site and randomize in case one of them + // uses an obscene amount of memory. It may kill this queue run + // but hopefully we'll get a few others through on each run. + + $r = q("SELECT * FROM `pconfig` WHERE `cat` = 'facebook' AND `k` = 'post' AND `v` = '1' ORDER BY RAND() "); if(count($r)) { foreach($r as $rr) { // check for new friends once a day @@ -392,6 +395,9 @@ function facebook_cron($a,$b) { fb_consume_all($rr['uid']); } } + + set_config('facebook','last_poll', time()); + } diff --git a/boot.php b/boot.php index 27c801923f..b81bd9cfc7 100644 --- a/boot.php +++ b/boot.php @@ -2908,3 +2908,15 @@ function get_plugin_info($plugin){ } return $info; }} + +if(! function_exists('return_bytes')) { +function return_bytes ($size_str) { + switch (substr ($size_str, -1)) + { + case 'M': case 'm': return (int)$size_str * 1048576; + case 'K': case 'k': return (int)$size_str * 1024; + case 'G': case 'g': return (int)$size_str * 1073741824; + default: return $size_str; + } +}} + diff --git a/include/poller.php b/include/poller.php index 4cab5a3b83..666748cbc0 100644 --- a/include/poller.php +++ b/include/poller.php @@ -2,6 +2,7 @@ require_once("boot.php"); + function poller_run($argv, $argc){ global $a, $db; @@ -47,18 +48,26 @@ function poller_run($argv, $argc){ proc_run('php','include/expire.php'); } - // clear old cache q("DELETE FROM `cache` WHERE `updated` < '%s'", dbesc(datetime_convert('UTC','UTC',"now - 30 days"))); $manual_id = 0; + $generation = 0; $hub_update = false; $force = false; + $restart = false; if(($argc > 1) && ($argv[1] == 'force')) $force = true; + if(($argc > 1) && ($argv[1] == 'restart')) { + $restart = true; + $generation = intval($argv[2]); + if(! $generation) + killme(); + } + if(($argc > 1) && intval($argv[1])) { $manual_id = intval($argv[1]); $force = true; @@ -70,7 +79,8 @@ function poller_run($argv, $argc){ $d = datetime_convert(); - call_hooks('cron', $d); + if(! $restart) + call_hooks('cron', $d); $contacts = q("SELECT `id` FROM `contact` @@ -95,7 +105,7 @@ function poller_run($argv, $argc){ continue; foreach($res as $contact) { - + logger('processing a contact'); $xml = false; if($manual_id) @@ -154,6 +164,22 @@ function poller_run($argv, $argc){ continue; } + // Check to see if we are running out of memory - if so spawn a new process and kill this one + + $avail_memory = return_bytes(ini_get('memory_limit')); + $memused = memory_get_peak_usage(true); + if(intval($avail_memory)) { + if(($memused / $avail_memory) > 0.95) { + if($generation + 1 > 10) { + logger('poller: maximum number of spawns exceeded. Terminating.'); + killme(); + } + logger('poller: memory exceeded. ' . $memused . ' bytes used. Spawning new poll.'); + proc_run('php', 'include/poller.php', 'restart', (string) $generation + 1); + killme(); + } + } + $importer_uid = $contact['uid']; $r = q("SELECT * FROM `contact` WHERE `uid` = %d AND `self` = 1 LIMIT 1", From c08b85777aed76a45b0cfbfa381db419f58d047f Mon Sep 17 00:00:00 2001 From: Friendika Date: Thu, 30 Jun 2011 22:00:08 -0700 Subject: [PATCH 58/89] too much logging --- include/poller.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/include/poller.php b/include/poller.php index 666748cbc0..5565130e99 100644 --- a/include/poller.php +++ b/include/poller.php @@ -105,7 +105,7 @@ function poller_run($argv, $argc){ continue; foreach($res as $contact) { - logger('processing a contact'); + $xml = false; if($manual_id) From 762fb878f838e329dd2e0245b1f597203c3833b6 Mon Sep 17 00:00:00 2001 From: Friendika Date: Thu, 30 Jun 2011 23:21:58 -0700 Subject: [PATCH 59/89] don't allow editing of somebody else's event --- mod/events.php | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/mod/events.php b/mod/events.php index 642da3cb75..879a667421 100644 --- a/mod/events.php +++ b/mod/events.php @@ -183,7 +183,8 @@ function events_content(&$a) { $adjust_finish = datetime_convert('UTC', date_default_timezone_get(), $finish); - $r = q("SELECT `event`.*, `item`.`id` AS `itemid`,`item`.`plink` FROM `event` LEFT JOIN `item` ON `item`.`event-id` = `event`.`id` + $r = q("SELECT `event`.*, `item`.`id` AS `itemid`,`item`.`plink`, + `item`.`author-name`, `item`.`author-avatar`, `item`.`author-link` FROM `event` LEFT JOIN `item` ON `item`.`event-id` = `event`.`id` WHERE `event`.`uid` = %d AND (( `adjust` = 0 AND `start` >= '%s' AND `start` <= '%s' ) OR ( `adjust` = 1 AND `start` >= '%s' AND `start` <= '%s' )) ", @@ -218,10 +219,6 @@ function events_content(&$a) { - - - - $last_date = ''; $fmt = t('l, F j'); @@ -235,7 +232,7 @@ function events_content(&$a) { $o .= '
' . $d . '
'; $last_date = $d; $o .= format_event_html($rr); - $o .= ''; + $o .= (($rr['cid']) ? '' : ''); if($rr['plink']) $o .= ''; From 086dc25dd1d3e4bb23444948a508aa0c8ee03dc5 Mon Sep 17 00:00:00 2001 From: Friendika Date: Thu, 30 Jun 2011 23:23:50 -0700 Subject: [PATCH 60/89] logic reversed --- mod/events.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mod/events.php b/mod/events.php index 879a667421..b0b54601fd 100644 --- a/mod/events.php +++ b/mod/events.php @@ -232,7 +232,7 @@ function events_content(&$a) { $o .= '
' . $d . '
'; $last_date = $d; $o .= format_event_html($rr); - $o .= (($rr['cid']) ? '' : ''); + $o .= ((! $rr['cid']) ? '' : ''); if($rr['plink']) $o .= ''; From 6e5532149a08b264e958202fa971d35b446fac3b Mon Sep 17 00:00:00 2001 From: Friendika Date: Thu, 30 Jun 2011 23:27:16 -0700 Subject: [PATCH 61/89] missing minutes in event listings --- include/event.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/include/event.php b/include/event.php index 1032022b34..aab195d245 100644 --- a/include/event.php +++ b/include/event.php @@ -8,7 +8,7 @@ function format_event_html($ev) { if(! ((is_array($ev)) && count($ev))) return ''; - $bd_format = t('l F d, Y \@ g A') ; // Friday January 18, 2011 @ 8 AM + $bd_format = t('l F d, Y \@ g:i A') ; // Friday January 18, 2011 @ 8 AM $o = '
' . "\r\n"; From b1aa77584f972b8c62fd099fa7fe08c36201b631 Mon Sep 17 00:00:00 2001 From: Friendika Date: Fri, 1 Jul 2011 06:14:15 -0700 Subject: [PATCH 62/89] indicate currently selected group in group picker --- include/group.php | 9 +++++---- mod/network.php | 5 +++-- view/theme/duepuntozero/style.css | 6 ++++++ 3 files changed, 14 insertions(+), 6 deletions(-) diff --git a/include/group.php b/include/group.php index 804d0c58f3..fd3439b852 100644 --- a/include/group.php +++ b/include/group.php @@ -136,7 +136,7 @@ function group_public_members($gid) { -function group_side($every="contacts",$each="group",$edit = false) { +function group_side($every="contacts",$each="group",$edit = false, $group_id = 0) { $o = ''; @@ -145,7 +145,7 @@ function group_side($every="contacts",$each="group",$edit = false) { $createtext = t('Create a new group'); $linktext= t('Everybody'); - + $selected = (($group_id == 0 && $every !== 'contacts') ? ' class="group-selected" ' : ''); $o .= <<< EOT
@@ -157,7 +157,7 @@ $o .= <<< EOT \r\n
"; diff --git a/mod/network.php b/mod/network.php index 9c5202ad2d..6169b50834 100644 --- a/mod/network.php +++ b/mod/network.php @@ -7,7 +7,8 @@ function network_init(&$a) { return; } - + $group_id = (($a->argc > 1 && intval($a->argv[1])) ? intval($a->argv[1]) : 0); + require_once('include/group.php'); if(! x($a->page,'aside')) $a->page['aside'] = ''; @@ -29,7 +30,7 @@ function network_init(&$a) { $a->page['aside'] .= '
'; - $a->page['aside'] .= group_side('network','network',true); + $a->page['aside'] .= group_side('network','network',true,$group_id); } diff --git a/view/theme/duepuntozero/style.css b/view/theme/duepuntozero/style.css index a99d7530fa..d07538b878 100644 --- a/view/theme/duepuntozero/style.css +++ b/view/theme/duepuntozero/style.css @@ -249,6 +249,12 @@ div.wall-item-content-wrapper.shiny { cursor: pointer; } +.group-selected { + padding: 3px; + border: 2px solid #CCCCCC; + font-weight: bold; +} + .fakelink:hover { color: #3465a4; text-decoration: underline; From f53a2d6da95e88573c4a8e36d40f1c9327490025 Mon Sep 17 00:00:00 2001 From: Friendika Date: Fri, 1 Jul 2011 06:23:09 -0700 Subject: [PATCH 63/89] add group highlight to other pages --- include/group.php | 4 ++-- mod/group.php | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/include/group.php b/include/group.php index fd3439b852..30a023d419 100644 --- a/include/group.php +++ b/include/group.php @@ -145,7 +145,7 @@ function group_side($every="contacts",$each="group",$edit = false, $group_id = 0 $createtext = t('Create a new group'); $linktext= t('Everybody'); - $selected = (($group_id == 0 && $every !== 'contacts') ? ' class="group-selected" ' : ''); + $selected = (($group_id == 0) ? ' class="group-selected" ' : ''); $o .= <<< EOT
@@ -166,7 +166,7 @@ EOT; ); if(count($r)) { foreach($r as $rr) - $selected = (($group_id == $rr['id'] && $every !== 'contacts') ? ' class="group-selected" ' : ''); + $selected = (($group_id == $rr['id']) ? ' class="group-selected" ' : ''); $o .= ' \r\n"; } $o .= " \r\n
\r\n"; diff --git a/mod/group.php b/mod/group.php index fd54b0effd..981796f67e 100644 --- a/mod/group.php +++ b/mod/group.php @@ -7,7 +7,7 @@ function validate_members(&$item) { function group_init(&$a) { if(local_user()) { require_once('include/group.php'); - $a->page['aside'] = group_side(); + $a->page['aside'] = group_side('contacts','group',false,(($a->argc > 1) ? intval($a->argv[1]) : 0)); } } From 813d6c453ceefe284c8736fa4d8038e9d1eebcb2 Mon Sep 17 00:00:00 2001 From: Friendika Date: Fri, 1 Jul 2011 06:26:46 -0700 Subject: [PATCH 64/89] missed block --- include/group.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/include/group.php b/include/group.php index 30a023d419..da4d41748b 100644 --- a/include/group.php +++ b/include/group.php @@ -165,9 +165,10 @@ EOT; intval($_SESSION['uid']) ); if(count($r)) { - foreach($r as $rr) + foreach($r as $rr) { $selected = (($group_id == $rr['id']) ? ' class="group-selected" ' : ''); $o .= ' \r\n"; + } } $o .= " \r\n \r\n"; From 9816f14d40a04867b2d96891c297252cc4a7006d Mon Sep 17 00:00:00 2001 From: Friendika Date: Fri, 1 Jul 2011 17:39:16 -0700 Subject: [PATCH 65/89] statusnet improvements --- include/items.php | 4 ++-- mod/salmon.php | 6 +++++- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/include/items.php b/include/items.php index 4f6030e5ae..9cafaea629 100644 --- a/include/items.php +++ b/include/items.php @@ -1449,11 +1449,11 @@ function new_follower($importer,$contact,$datarray,$item) { } else { - // create contact record - set to readonly + // create contact record $r = q("INSERT INTO `contact` ( `uid`, `created`, `url`, `name`, `nick`, `photo`, `network`, `rel`, `blocked`, `readonly`, `pending`, `writable` ) - VALUES ( %d, '%s', '%s', '%s', '%s', '%s', '%s', %d, 0, 1, 1, 1 ) ", + VALUES ( %d, '%s', '%s', '%s', '%s', '%s', '%s', %d, 0, 0, 1, 1 ) ", intval($importer['uid']), dbesc(datetime_convert()), dbesc($url), diff --git a/mod/salmon.php b/mod/salmon.php index 3ace417cd8..2a53e914b7 100644 --- a/mod/salmon.php +++ b/mod/salmon.php @@ -183,7 +183,11 @@ function salmon_post(&$a) { if(! count($r)) { logger('mod-salmon: Author unknown to us.'); } - if((count($r)) && ($r[0]['readonly'])) { + + // is this a follower? Or have we ignored the person? + // If so we can not accept this post. + + if((count($r)) && (($r[0]['readonly']) || ($r[0]['rel'] == REL_VIP)) { logger('mod-salmon: Ignoring this author.'); salmon_return(202); // NOTREACHED From c23657ab6eb99750fc271f9fd124ea8731180605 Mon Sep 17 00:00:00 2001 From: Friendika Date: Fri, 1 Jul 2011 17:45:00 -0700 Subject: [PATCH 66/89] also check for blocked --- mod/salmon.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mod/salmon.php b/mod/salmon.php index 2a53e914b7..721eae4371 100644 --- a/mod/salmon.php +++ b/mod/salmon.php @@ -187,7 +187,7 @@ function salmon_post(&$a) { // is this a follower? Or have we ignored the person? // If so we can not accept this post. - if((count($r)) && (($r[0]['readonly']) || ($r[0]['rel'] == REL_VIP)) { + if((count($r)) && (($r[0]['readonly']) || ($r[0]['rel'] == REL_VIP) || ($r[0]['blocked']))) { logger('mod-salmon: Ignoring this author.'); salmon_return(202); // NOTREACHED From d28d2ff440efba47ad65cf28eab4be96e0ea05b2 Mon Sep 17 00:00:00 2001 From: Friendika Date: Fri, 1 Jul 2011 18:18:01 -0700 Subject: [PATCH 67/89] better (more consistent) handling of ostatus contacts --- boot.php | 2 +- include/poller.php | 13 +++++++++++-- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/boot.php b/boot.php index b81bd9cfc7..2c7836301a 100644 --- a/boot.php +++ b/boot.php @@ -4,7 +4,7 @@ set_time_limit(0); ini_set('pcre.backtrack_limit', 250000); -define ( 'FRIENDIKA_VERSION', '2.2.1027' ); +define ( 'FRIENDIKA_VERSION', '2.2.1028' ); define ( 'DFRN_PROTOCOL_VERSION', '2.21' ); define ( 'DB_UPDATE_VERSION', 1071 ); diff --git a/include/poller.php b/include/poller.php index 5565130e99..569eb59d1c 100644 --- a/include/poller.php +++ b/include/poller.php @@ -310,13 +310,22 @@ function poller_run($argv, $argc){ // Upgrading DB fields from an older Friendika version // Will only do this once per notify-enabled OStatus contact + // or if relationship changes - if(($contact['notify']) && (! $contact['writable'])) { - q("UPDATE `contact` SET `writable` = 1 WHERE `id` = %d LIMIT 1", + $stat_writeable = ((($contact['notify']) && ($contact['rel'] == REL_VIP || $contact['rel'] == REL_BUD)) ? 1 : 0); + + if($stat_writeable != $contact['writable']) { + q("UPDATE `contact` SET `writable` = %d WHERE `id` = %d LIMIT 1", + intval($stat_writeable), intval($contact['id']) ); } + // Are we allowed to import from this person? + + if($contact['rel'] == REL_VIP || $contact['blocked'] || $contact['readonly']) + continue; + $xml = fetch_url($contact['poll']); } elseif($contact['network'] === NETWORK_MAIL) { From 9534e335aa3e6897c4714086a71e8c4df088f035 Mon Sep 17 00:00:00 2001 From: Friendika Date: Fri, 1 Jul 2011 18:21:55 -0700 Subject: [PATCH 68/89] doco --- boot.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/boot.php b/boot.php index 2c7836301a..120fb46607 100644 --- a/boot.php +++ b/boot.php @@ -56,9 +56,9 @@ define ( 'REGISTER_OPEN', 2 ); * this relationship with contact['name'] */ -define ( 'REL_VIP', 1); -define ( 'REL_FAN', 2); -define ( 'REL_BUD', 3); +define ( 'REL_VIP', 1); // other person is 'following' us +define ( 'REL_FAN', 2); // we are 'following' other person +define ( 'REL_BUD', 3); // mutual relationship /** * Hook array order From ccb00d68827b1ec7ebc4e9c436e4f70354d1c9c4 Mon Sep 17 00:00:00 2001 From: Friendika Date: Fri, 1 Jul 2011 19:29:56 -0700 Subject: [PATCH 69/89] set user-agent --- boot.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/boot.php b/boot.php index 120fb46607..b9b8871d49 100644 --- a/boot.php +++ b/boot.php @@ -673,7 +673,7 @@ function fetch_url($url,$binary = false, &$redirects = 0) { curl_setopt($ch, CURLOPT_HEADER, true); curl_setopt($ch, CURLOPT_RETURNTRANSFER,true); - + curl_setopt($ch, CURLOPT_USERAGENT, "Friendika"); $curl_time = intval(get_config('system','curl_timeout')); curl_setopt($ch, CURLOPT_TIMEOUT, (($curl_time !== false) ? $curl_time : 60)); @@ -749,6 +749,7 @@ function post_url($url,$params, $headers = null, &$redirects = 0) { curl_setopt($ch, CURLOPT_RETURNTRANSFER,true); curl_setopt($ch, CURLOPT_POST,1); curl_setopt($ch, CURLOPT_POSTFIELDS,$params); + curl_setopt($ch, CURLOPT_USERAGENT, "Friendika"); $curl_time = intval(get_config('system','curl_timeout')); curl_setopt($ch, CURLOPT_TIMEOUT, (($curl_time !== false) ? $curl_time : 60)); From fb0e758ce79c5c6a70d41766e3581bf756881d03 Mon Sep 17 00:00:00 2001 From: Friendika Date: Fri, 1 Jul 2011 22:36:33 -0700 Subject: [PATCH 70/89] add some indexes to photos --- boot.php | 2 +- database.sql | 7 ++++++- update.php | 10 +++++++++- 3 files changed, 16 insertions(+), 3 deletions(-) diff --git a/boot.php b/boot.php index b9b8871d49..1807ff1c41 100644 --- a/boot.php +++ b/boot.php @@ -6,7 +6,7 @@ ini_set('pcre.backtrack_limit', 250000); define ( 'FRIENDIKA_VERSION', '2.2.1028' ); define ( 'DFRN_PROTOCOL_VERSION', '2.21' ); -define ( 'DB_UPDATE_VERSION', 1071 ); +define ( 'DB_UPDATE_VERSION', 1072 ); define ( 'EOL', "
\r\n" ); define ( 'ATOM_TIME', 'Y-m-d\TH:i:s\Z' ); diff --git a/database.sql b/database.sql index 5187f3c3ec..c9f9ae77a3 100644 --- a/database.sql +++ b/database.sql @@ -278,7 +278,12 @@ CREATE TABLE IF NOT EXISTS `photo` ( `allow_gid` mediumtext NOT NULL, `deny_cid` mediumtext NOT NULL, `deny_gid` mediumtext NOT NULL, - PRIMARY KEY (`id`) + PRIMARY KEY (`id`), + KEY `uid` (`uid`), + KEY `resource-id` (`resource-id`), + KEY `album` (`album`), + KEY `scale` (`scale`), + KEY `profile` (`profile`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8; -- -------------------------------------------------------- diff --git a/update.php b/update.php index 1876629017..775bf7b92b 100644 --- a/update.php +++ b/update.php @@ -1,6 +1,6 @@ Date: Sat, 2 Jul 2011 01:21:56 -0700 Subject: [PATCH 71/89] use local 'match people with my interests' if global directory is not configured --- mod/contacts.php | 5 +++-- mod/match.php | 7 +++++-- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/mod/contacts.php b/mod/contacts.php index 444e6dec4c..7a97b53d23 100644 --- a/mod/contacts.php +++ b/mod/contacts.php @@ -11,8 +11,9 @@ function contacts_init(&$a) { if($a->config['register_policy'] != REGISTER_CLOSED) $a->page['aside'] .= ''; - if(strlen(get_config('system','directory_submit_url'))) - $a->page['aside'] .= ''; + + $a->page['aside'] .= ''; $tpl = get_markup_template('follow.tpl'); $a->page['aside'] .= replace_macros($tpl,array( diff --git a/mod/match.php b/mod/match.php index 2d6456b54b..4316d8bd70 100644 --- a/mod/match.php +++ b/mod/match.php @@ -15,7 +15,7 @@ function match_content(&$a) { if(! count($r)) return; if(! $r[0]['pub_keywords'] && (! $r[0]['prv_keywords'])) { - notice('No keywords to match. Please add keywords to your default profile.'); + notice( t('No keywords to match. Please add keywords to your default profile.') . EOL); return; } @@ -27,7 +27,10 @@ function match_content(&$a) { if($a->pager['page'] != 1) $params['p'] = $a->pager['page']; - $x = post_url('http://dir.friendika.com/msearch', $params); + if(strlen(get_config('system','directory_submit_url'))) + $x = post_url('http://dir.friendika.com/msearch', $params); + else + $x = post_url($a->get_baseurl() . '/msearch', $params); $j = json_decode($x); From 2d4f2f86cb9675983cc6976ddc434cc7636ec5fe Mon Sep 17 00:00:00 2001 From: Friendika Date: Sat, 2 Jul 2011 02:34:19 -0700 Subject: [PATCH 72/89] improved group-selected highlighting --- view/theme/duepuntozero/style.css | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/view/theme/duepuntozero/style.css b/view/theme/duepuntozero/style.css index d07538b878..2b0ee93e6e 100644 --- a/view/theme/duepuntozero/style.css +++ b/view/theme/duepuntozero/style.css @@ -251,7 +251,8 @@ div.wall-item-content-wrapper.shiny { .group-selected { padding: 3px; - border: 2px solid #CCCCCC; + border: 1px solid #CCCCCC; + background: #F8F8F8; font-weight: bold; } From 24836f2966842b413ae29f325fbb61b30186a5f7 Mon Sep 17 00:00:00 2001 From: Friendika Date: Sat, 2 Jul 2011 02:47:01 -0700 Subject: [PATCH 73/89] improvied group highlighting, move new group link down --- include/group.php | 15 ++++++++++----- view/theme/duepuntozero/style.css | 4 ++++ view/theme/loozah/style.css | 12 ++++++++++++ 3 files changed, 26 insertions(+), 5 deletions(-) diff --git a/include/group.php b/include/group.php index da4d41748b..e16c900d90 100644 --- a/include/group.php +++ b/include/group.php @@ -151,10 +151,6 @@ $o .= <<< EOT

Groups

- - \r\n
"; + $o .= " \r\n "; + + $o .= <<< EOT + + + + +EOT; return $o; } diff --git a/view/theme/duepuntozero/style.css b/view/theme/duepuntozero/style.css index 2b0ee93e6e..5595045b89 100644 --- a/view/theme/duepuntozero/style.css +++ b/view/theme/duepuntozero/style.css @@ -249,6 +249,10 @@ div.wall-item-content-wrapper.shiny { cursor: pointer; } +#group-sidebar { + margin-bottom: 10px; +} + .group-selected { padding: 3px; border: 1px solid #CCCCCC; diff --git a/view/theme/loozah/style.css b/view/theme/loozah/style.css index 7802d176d2..d2b6441ac7 100644 --- a/view/theme/loozah/style.css +++ b/view/theme/loozah/style.css @@ -137,6 +137,18 @@ blockquote:before { cursor: pointer; } + +#group-sidebar { + margin-bottom: 10px; +} + +.group-selected { + padding: 3px; + border: 1px solid #CCCCCC; + background: #F8F8F8; + font-weight: bold; +} + .fakelink:hover { color: #0CBEFE; text-decoration: none; From 07dc1c3ca931322af683edf9791ef47e295ca6cc Mon Sep 17 00:00:00 2001 From: Friendika Date: Sat, 2 Jul 2011 17:56:57 -0700 Subject: [PATCH 74/89] db support for starred (favorited) items --- boot.php | 4 ++-- database.sql | 2 ++ update.php | 7 ++++++- 3 files changed, 10 insertions(+), 3 deletions(-) diff --git a/boot.php b/boot.php index 1807ff1c41..5ff8b50af4 100644 --- a/boot.php +++ b/boot.php @@ -4,9 +4,9 @@ set_time_limit(0); ini_set('pcre.backtrack_limit', 250000); -define ( 'FRIENDIKA_VERSION', '2.2.1028' ); +define ( 'FRIENDIKA_VERSION', '2.2.1029' ); define ( 'DFRN_PROTOCOL_VERSION', '2.21' ); -define ( 'DB_UPDATE_VERSION', 1072 ); +define ( 'DB_UPDATE_VERSION', 1073 ); define ( 'EOL', "
\r\n" ); define ( 'ATOM_TIME', 'Y-m-d\TH:i:s\Z' ); diff --git a/database.sql b/database.sql index c9f9ae77a3..4952e7c623 100644 --- a/database.sql +++ b/database.sql @@ -202,6 +202,7 @@ CREATE TABLE IF NOT EXISTS `item` ( `private` tinyint(1) NOT NULL DEFAULT '0', `pubmail` tinyint(1) NOT NULL DEFAULT '0', `visible` tinyint(1) NOT NULL DEFAULT '0', + `starred` tinyint(1) NOT NULL DEFAULT '0', `unseen` tinyint(1) NOT NULL DEFAULT '1', `deleted` tinyint(1) NOT NULL DEFAULT '0', `last-child` tinyint(1) unsigned NOT NULL DEFAULT '1', @@ -218,6 +219,7 @@ CREATE TABLE IF NOT EXISTS `item` ( KEY `edited` (`edited`), KEY `received` (`received`), KEY `visible` (`visible`), + KEY `starred` (`starred`), KEY `deleted` (`deleted`), KEY `last-child` (`last-child`), KEY `unseen` (`unseen`), diff --git a/update.php b/update.php index 775bf7b92b..08f1e6854e 100644 --- a/update.php +++ b/update.php @@ -1,6 +1,6 @@ Date: Sat, 2 Jul 2011 20:44:04 -0700 Subject: [PATCH 75/89] updated icons --- images/icons.png | Bin 10702 -> 11879 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/images/icons.png b/images/icons.png index fee7781c84240db21d26cd62837a82fb0b99a1ea..c70b6647443afaff3b5bbfb3f7c48b47cc10d967 100644 GIT binary patch literal 11879 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 delta 10686 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 From ab7f209fe3986ad751bd3a8ec2e155fcf1f9f130 Mon Sep 17 00:00:00 2001 From: Friendika Date: Sat, 2 Jul 2011 20:51:27 -0700 Subject: [PATCH 76/89] add starred, unstarred icons to duepuntozero, loozah --- view/theme/duepuntozero/style.css | 3 +++ view/theme/loozah/style.css | 2 ++ 2 files changed, 5 insertions(+) diff --git a/view/theme/duepuntozero/style.css b/view/theme/duepuntozero/style.css index 5595045b89..e18cc32367 100644 --- a/view/theme/duepuntozero/style.css +++ b/view/theme/duepuntozero/style.css @@ -2690,6 +2690,9 @@ a.mail-list-link { .on { background-position: -144px -32px; } .off { background-position: 0px -48px; } +.starred { background-position: -16px -48px; } +.unstarred { background-position: -32px -48px; } + .icon.dim { opacity: 0.3;filter:alpha(opacity=30); } diff --git a/view/theme/loozah/style.css b/view/theme/loozah/style.css index d2b6441ac7..8f64e4cf88 100644 --- a/view/theme/loozah/style.css +++ b/view/theme/loozah/style.css @@ -2696,6 +2696,8 @@ a.mail-list-link { .on { background-position: -144px -32px; } .off { background-position: 0px -48px; } +.starred { background-position: -16px -48px; } +.unstarred { background-position: -32px -48px; } .icon.dim { opacity: 0.3;filter:alpha(opacity=30); } From cffc4ef14d5ce10411f9e8f01638e9ba523f3c81 Mon Sep 17 00:00:00 2001 From: Friendika Date: Sun, 3 Jul 2011 00:34:56 -0700 Subject: [PATCH 77/89] alter test for http continuation header. Use regex, ignore length. --- boot.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/boot.php b/boot.php index 5ff8b50af4..35adae3308 100644 --- a/boot.php +++ b/boot.php @@ -704,7 +704,7 @@ function fetch_url($url,$binary = false, &$redirects = 0) { $http_code = intval(curl_getinfo($ch, CURLINFO_HTTP_CODE)); $header = substr($s,0,strpos($s,"\r\n\r\n")); - if(stristr($header,'100') && (strlen($header) < 30)) { + if(preg_match('/HTTP\/.+? 100/',$header)) { // 100 Continue has two headers, get the real one $s = substr($s,strlen($header)+4); $header = substr($s,0,strpos($s,"\r\n\r\n")); @@ -777,7 +777,7 @@ function post_url($url,$params, $headers = null, &$redirects = 0) { $http_code = intval(curl_getinfo($ch, CURLINFO_HTTP_CODE)); $header = substr($s,0,strpos($s,"\r\n\r\n")); - if(stristr($header,'100') && (strlen($header) < 30)) { + if(preg_match('/HTTP\/.+? 100/',$header)) { // 100 Continue has two headers, get the real one $s = substr($s,strlen($header)+4); $header = substr($s,0,strpos($s,"\r\n\r\n")); From 12b114f6adfa3f4cd1a50c832509f7205e5b7284 Mon Sep 17 00:00:00 2001 From: Friendika Date: Sun, 3 Jul 2011 02:19:43 -0700 Subject: [PATCH 78/89] use another method to strip out headers --- boot.php | 44 ++++++++++++++------------------------------ 1 file changed, 14 insertions(+), 30 deletions(-) diff --git a/boot.php b/boot.php index 35adae3308..0e9abddd30 100644 --- a/boot.php +++ b/boot.php @@ -702,13 +702,12 @@ function fetch_url($url,$binary = false, &$redirects = 0) { $s = @curl_exec($ch); - $http_code = intval(curl_getinfo($ch, CURLINFO_HTTP_CODE)); - $header = substr($s,0,strpos($s,"\r\n\r\n")); - if(preg_match('/HTTP\/.+? 100/',$header)) { - // 100 Continue has two headers, get the real one - $s = substr($s,strlen($header)+4); - $header = substr($s,0,strpos($s,"\r\n\r\n")); - } + $curl_info = curl_getinfo($ch); + $header_size = $curl_info['header_size']; + $http_code = $curl_info['http_code']; + + $header = substr($s,0,$header_size); + if($http_code == 301 || $http_code == 302 || $http_code == 303 || $http_code == 307) { $matches = array(); preg_match('/(Location:|URI:)(.*?)\n/', $header, $matches); @@ -721,14 +720,7 @@ function fetch_url($url,$binary = false, &$redirects = 0) { } $a->set_curl_code($http_code); - $body = substr($s,strlen($header)+4); - - /* one more try to make sure there are no more headers */ - - if(strpos($body,'HTTP/') === 0) { - $header = substr($body,0,strpos($body,"\r\n\r\n")); - $body = substr($body,strlen($header)+4); - } + $body = substr($s,$header_size); $a->set_curl_headers($header); @@ -775,13 +767,12 @@ function post_url($url,$params, $headers = null, &$redirects = 0) { $s = @curl_exec($ch); - $http_code = intval(curl_getinfo($ch, CURLINFO_HTTP_CODE)); - $header = substr($s,0,strpos($s,"\r\n\r\n")); - if(preg_match('/HTTP\/.+? 100/',$header)) { - // 100 Continue has two headers, get the real one - $s = substr($s,strlen($header)+4); - $header = substr($s,0,strpos($s,"\r\n\r\n")); - } + $curl_info = curl_getinfo($ch); + $header_size = $curl_info['header_size']; + $http_code = $curl_info['http_code']; + + $header = substr($s,0,$header_size); + if($http_code == 301 || $http_code == 302 || $http_code == 303) { $matches = array(); preg_match('/(Location:|URI:)(.*?)\n/', $header, $matches); @@ -793,14 +784,7 @@ function post_url($url,$params, $headers = null, &$redirects = 0) { } } $a->set_curl_code($http_code); - $body = substr($s,strlen($header)+4); - - /* one more try to make sure there are no more headers */ - - if(strpos($body,'HTTP/') === 0) { - $header = substr($body,0,strpos($body,"\r\n\r\n")); - $body = substr($body,strlen($header)+4); - } + $body = substr($s,$header_size); $a->set_curl_headers($header); From 34df1538f33c2d7b4e1e24e47735c7168c586b97 Mon Sep 17 00:00:00 2001 From: Friendika Date: Sun, 3 Jul 2011 03:47:18 -0700 Subject: [PATCH 79/89] one more try at splitting out multiple (> 2) http headers in curl --- boot.php | 31 +++++++++++++++++++++++++------ 1 file changed, 25 insertions(+), 6 deletions(-) diff --git a/boot.php b/boot.php index 0e9abddd30..459bec217e 100644 --- a/boot.php +++ b/boot.php @@ -702,11 +702,20 @@ function fetch_url($url,$binary = false, &$redirects = 0) { $s = @curl_exec($ch); + $base = $s; $curl_info = curl_getinfo($ch); - $header_size = $curl_info['header_size']; $http_code = $curl_info['http_code']; - $header = substr($s,0,$header_size); + $header = ''; + + // Pull out multiple headers, e.g. proxy and continuation headers + // allow for HTTP/2.x without fixing code + + while(preg_match('/^HTTP\/[1-2].+? [1-5][0-9][0-9]/',$base)) { + $chunk = substr($base,0,strpos($base,"\r\n\r\n")+4); + $header .= $chunk; + $base = substr($base,strlen($chunk)); + } if($http_code == 301 || $http_code == 302 || $http_code == 303 || $http_code == 307) { $matches = array(); @@ -718,9 +727,10 @@ function fetch_url($url,$binary = false, &$redirects = 0) { return fetch_url($url,$binary,$redirects); } } + $a->set_curl_code($http_code); - $body = substr($s,$header_size); + $body = substr($s,strlen($header)); $a->set_curl_headers($header); @@ -767,11 +777,20 @@ function post_url($url,$params, $headers = null, &$redirects = 0) { $s = @curl_exec($ch); + $base = $s; $curl_info = curl_getinfo($ch); - $header_size = $curl_info['header_size']; $http_code = $curl_info['http_code']; - $header = substr($s,0,$header_size); + $header = ''; + + // Pull out multiple headers, e.g. proxy and continuation headers + // allow for HTTP/2.x without fixing code + + while(preg_match('/^HTTP\/[1-2].+? [1-5][0-9][0-9]/',$base)) { + $chunk = substr($base,0,strpos($base,"\r\n\r\n")+4); + $header .= $chunk; + $base = substr($base,strlen($chunk)); + } if($http_code == 301 || $http_code == 302 || $http_code == 303) { $matches = array(); @@ -784,7 +803,7 @@ function post_url($url,$params, $headers = null, &$redirects = 0) { } } $a->set_curl_code($http_code); - $body = substr($s,$header_size); + $body = substr($s,strlen($header)); $a->set_curl_headers($header); From 3538dc15cc98cc8bba378357e6802ef48b378e0e Mon Sep 17 00:00:00 2001 From: Friendika Date: Sun, 3 Jul 2011 05:00:11 -0700 Subject: [PATCH 80/89] improved search - ensure you can see all your own content (logged in members). Visitors can only see public wall posts. --- mod/search.php | 20 ++++++++------------ 1 file changed, 8 insertions(+), 12 deletions(-) diff --git a/mod/search.php b/mod/search.php index 9c82b38e81..bb33fb11d2 100644 --- a/mod/search.php +++ b/mod/search.php @@ -35,13 +35,9 @@ function search_content(&$a) { if(! $search) return $o; - - $sql_extra = " - AND `item`.`allow_cid` = '' - AND `item`.`allow_gid` = '' - AND `item`.`deny_cid` = '' - AND `item`.`deny_gid` = '' - "; + // Here is the way permissions work in the search module... + // Only public wall posts can be shown + // OR your own posts if you are a logged in member $s_bool = "AND MATCH (`item`.`body`) AGAINST ( '%s' IN BOOLEAN MODE )"; $s_regx = "AND `item`.`body` REGEXP '%s' "; @@ -54,10 +50,10 @@ function search_content(&$a) { $r = q("SELECT COUNT(*) AS `total` FROM `item` LEFT JOIN `contact` ON `contact`.`id` = `item`.`contact-id` WHERE `item`.`visible` = 1 AND `item`.`deleted` = 0 - AND ( `wall` = 1 OR `contact`.`uid` = %d ) + AND (( `wall` = 1 AND `item`.`allow_cid` = '' AND `item`.`allow_gid` = '' AND `item`.`deny_cid` = '' AND `item`.`deny_gid` = '' ) + OR `item`.`uid` = %d ) AND `contact`.`blocked` = 0 AND `contact`.`pending` = 0 - $search_alg - $sql_extra ", + $search_alg ", intval(local_user()), dbesc($search) ); @@ -78,10 +74,10 @@ function search_content(&$a) { FROM `item` LEFT JOIN `contact` ON `contact`.`id` = `item`.`contact-id` LEFT JOIN `user` ON `user`.`uid` = `item`.`uid` WHERE `item`.`visible` = 1 AND `item`.`deleted` = 0 - AND ( `wall` = 1 OR `contact`.`uid` = %d ) + AND (( `wall` = 1 AND `item`.`allow_cid` = '' AND `item`.`allow_gid` = '' AND `item`.`deny_cid` = '' AND `item`.`deny_gid` = '' ) + OR `item`.`uid` = %d ) AND `contact`.`blocked` = 0 AND `contact`.`pending` = 0 $search_alg - $sql_extra ORDER BY `parent` DESC ", intval(local_user()), dbesc($search) From bef68a8c7fe021bd6effc3e4bad62dbd1d229e87 Mon Sep 17 00:00:00 2001 From: Friendika Date: Sun, 3 Jul 2011 05:54:40 -0700 Subject: [PATCH 81/89] posts from hidden walls not allowed in search results --- mod/search.php | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/mod/search.php b/mod/search.php index bb33fb11d2..c20d1274e6 100644 --- a/mod/search.php +++ b/mod/search.php @@ -48,11 +48,11 @@ function search_content(&$a) { $search_alg = $s_regx; $r = q("SELECT COUNT(*) AS `total` - FROM `item` LEFT JOIN `contact` ON `contact`.`id` = `item`.`contact-id` + FROM `item` LEFT JOIN `contact` ON `contact`.`id` = `item`.`contact-id` LEFT JOIN `profile` ON `profile`.`uid` = `item`.`uid` WHERE `item`.`visible` = 1 AND `item`.`deleted` = 0 - AND (( `wall` = 1 AND `item`.`allow_cid` = '' AND `item`.`allow_gid` = '' AND `item`.`deny_cid` = '' AND `item`.`deny_gid` = '' ) + AND (( `wall` = 1 AND `item`.`allow_cid` = '' AND `item`.`allow_gid` = '' AND `item`.`deny_cid` = '' AND `item`.`deny_gid` = '' AND `profile`.`hidewall` = 0) OR `item`.`uid` = %d ) - AND `contact`.`blocked` = 0 AND `contact`.`pending` = 0 + AND `contact`.`blocked` = 0 AND `contact`.`pending` = 0 AND `profile`.`is-default` = 1 $search_alg ", intval(local_user()), dbesc($search) @@ -70,13 +70,14 @@ function search_content(&$a) { `contact`.`name`, `contact`.`photo`, `contact`.`url`, `contact`.`rel`, `contact`.`network`, `contact`.`thumb`, `contact`.`self`, `contact`.`writable`, `contact`.`id` AS `cid`, `contact`.`uid` AS `contact-uid`, - `user`.`nickname` + `user`.`nickname`, `profile`.`hidewall` FROM `item` LEFT JOIN `contact` ON `contact`.`id` = `item`.`contact-id` - LEFT JOIN `user` ON `user`.`uid` = `item`.`uid` + LEFT JOIN `user` ON `user`.`uid` = `item`.`uid` + LEFT JOIN `profile` ON `profile`.`uid` = `item`.`uid` WHERE `item`.`visible` = 1 AND `item`.`deleted` = 0 - AND (( `wall` = 1 AND `item`.`allow_cid` = '' AND `item`.`allow_gid` = '' AND `item`.`deny_cid` = '' AND `item`.`deny_gid` = '' ) + AND (( `wall` = 1 AND `item`.`allow_cid` = '' AND `item`.`allow_gid` = '' AND `item`.`deny_cid` = '' AND `item`.`deny_gid` = '' AND `profile`.`hidewall` = 0 ) OR `item`.`uid` = %d ) - AND `contact`.`blocked` = 0 AND `contact`.`pending` = 0 + AND `contact`.`blocked` = 0 AND `contact`.`pending` = 0 AND `profile`.`is-default` = 1 $search_alg ORDER BY `parent` DESC ", intval(local_user()), From 5ceeb6752d645036b832077d88b71a8825952322 Mon Sep 17 00:00:00 2001 From: Friendika Date: Sun, 3 Jul 2011 19:41:04 -0700 Subject: [PATCH 82/89] starred items --- boot.php | 2 +- images/icons.png | Bin 11879 -> 11885 bytes include/conversation.php | 9 +++++-- include/main.js | 15 +++++++++++ mod/network.php | 42 +++++++++++++++++++++++------- mod/starred.php | 35 +++++++++++++++++++++++++ view/theme/duepuntozero/style.css | 15 ++++++++++- view/theme/loozah/style.css | 17 +++++++++++- view/wall_item.tpl | 1 + view/wallwall_item.tpl | 1 + 10 files changed, 123 insertions(+), 14 deletions(-) create mode 100644 mod/starred.php diff --git a/boot.php b/boot.php index 459bec217e..855a67dfd2 100644 --- a/boot.php +++ b/boot.php @@ -4,7 +4,7 @@ set_time_limit(0); ini_set('pcre.backtrack_limit', 250000); -define ( 'FRIENDIKA_VERSION', '2.2.1029' ); +define ( 'FRIENDIKA_VERSION', '2.2.1030' ); define ( 'DFRN_PROTOCOL_VERSION', '2.21' ); define ( 'DB_UPDATE_VERSION', 1073 ); diff --git a/images/icons.png b/images/icons.png index c70b6647443afaff3b5bbfb3f7c48b47cc10d967..494555aa69a9f3aec25a566b1bb6bedad46e2e05 100644 GIT binary patch literal 11885 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 diff --git a/include/conversation.php b/include/conversation.php index ff0a7612b1..40981d5f4d 100644 --- a/include/conversation.php +++ b/include/conversation.php @@ -177,6 +177,7 @@ function conversation(&$a, $items, $mode, $update) { $drop = replace_macros($droptpl,array('$id' => $item['id'])); $lock = '
'; + $star = ''; $body = prepare_body($item,true); @@ -197,6 +198,7 @@ function conversation(&$a, $items, $mode, $update) { '$owner_url' => $owner_url, '$owner_photo' => $owner_photo, '$owner_name' => $owner_name, + '$star' => $star, '$drop' => $drop, '$conv' => '
' . t('View in context') . '' )); @@ -381,8 +383,8 @@ function conversation(&$a, $items, $mode, $update) { } $edpost = (((($profile_owner == local_user()) && ($toplevelpost) && (intval($item['wall']) == 1)) || ($mode === 'notes')) - ? '' + ? '' : ''); @@ -394,6 +396,8 @@ function conversation(&$a, $items, $mode, $update) { $drop = replace_macros((($dropping)? $droptpl : $fakedrop), array('$id' => $item['id'], '$select' => t('Select'), '$delete' => t('Delete'))); + $star = (($profile_owner == local_user() && $toplevelpost) ? '' : ''); + $photo = $item['photo']; $thumb = $item['thumb']; @@ -473,6 +477,7 @@ function conversation(&$a, $items, $mode, $update) { '$owner_name' => $owner_name, '$plink' => get_plink($item), '$edpost' => $edpost, + '$star' => $star, '$drop' => $drop, '$vote' => $likebuttons, '$like' => $like, diff --git a/include/main.js b/include/main.js index c2772000d7..26c78b2773 100644 --- a/include/main.js +++ b/include/main.js @@ -174,6 +174,21 @@ liking = 1; } + function dostar(ident) { + $('#like-rotator-' + ident.toString()).show(); + $.get('starred/' + ident.toString(), function(data) { + if(data.match(/1/)) { + $('#starred-' + ident.toString()).addClass('starred'); + $('#starred-' + ident.toString()).removeClass('unstarred'); + } + else { + $('#starred-' + ident.toString()).addClass('unstarred'); + $('#starred-' + ident.toString()).removeClass('starred'); + } + $('#like-rotator-' + ident.toString()).hide(); + }); + } + function getPosition(e) { var cursor = {x:0, y:0}; if ( e.pageX || e.pageY ) { diff --git a/mod/network.php b/mod/network.php index 6169b50834..e5e3d34a73 100644 --- a/mod/network.php +++ b/mod/network.php @@ -14,7 +14,7 @@ function network_init(&$a) { $a->page['aside'] = ''; $search = ((x($_GET,'search')) ? escape_tags($_GET['search']) : ''); - $srchurl = '/network' . ((x($_GET,'cid')) ? '?cid=' . $_GET['cid'] : ''); + $srchurl = '/network' . ((x($_GET,'cid')) ? '?cid=' . $_GET['cid'] : '') . ((x($_GET,'star')) ? '?star=' . $_GET['star'] : ''); $a->page['aside'] .= search($search,'netsearch-box',$srchurl); @@ -22,11 +22,29 @@ function network_init(&$a) { $a->page['aside'] .= ''; + + if(x($_GET,'star')) + $a->page['aside'] .= ''; + else + $a->page['aside'] .= ''; + + } $a->page['aside'] .= ''; @@ -51,6 +69,7 @@ function network_content(&$a, $update = 0) { require_once('include/acl_selectors.php'); $cid = ((x($_GET['cid'])) ? intval($_GET['cid']) : 0); + $star = ((x($_GET['star'])) ? intval($_GET['star']) : 0); if(($a->argc > 2) && $a->argv[2] === 'new') $nouveau = true; @@ -109,6 +128,7 @@ function network_content(&$a, $update = 0) { . "; var netargs = '" . substr($a->cmd,8) . ((x($_GET,'cid')) ? '?cid=' . $_GET['cid'] : '') . ((x($_GET,'search')) ? '?search=' . $_GET['search'] : '') + . ((x($_GET,'star')) ? '?star=' . $_GET['star'] : '') . "'; var profile_page = " . $a->pager['page'] . "; \r\n"; } @@ -117,7 +137,7 @@ function network_content(&$a, $update = 0) { // level which items you've seen and which you haven't. If you're looking // at the top level network page just mark everything seen. - if((! $group) && (! $cid)) { + if((! $group) && (! $cid) && (! $star)) { $r = q("UPDATE `item` SET `unseen` = 0 WHERE `unseen` = 1 AND `uid` = %d", intval($_SESSION['uid']) @@ -128,7 +148,9 @@ function network_content(&$a, $update = 0) { // that belongs to you, hence you can see all of it. We will filter by group if // desired. - $sql_extra = " AND `item`.`parent` IN ( SELECT `parent` FROM `item` WHERE `id` = `parent` ) "; + $star_sql = (($star) ? " AND `starred` = 1 " : ''); + + $sql_extra = " AND `item`.`parent` IN ( SELECT `parent` FROM `item` WHERE `id` = `parent` $star_sql ) "; if($group) { $r = q("SELECT `name`, `id` FROM `group` WHERE `id` = %d AND `uid` = %d LIMIT 1", @@ -152,7 +174,8 @@ function network_content(&$a, $update = 0) { info( t('Group is empty')); } - $sql_extra = " AND `item`.`parent` IN ( SELECT `parent` FROM `item` WHERE `id` = `parent` AND ( `contact-id` IN ( $contact_str ) OR `allow_gid` REGEXP '<" . intval($group) . ">' )) "; + + $sql_extra = " AND `item`.`parent` IN ( SELECT `parent` FROM `item` WHERE `id` = `parent` $star_sql AND ( `contact-id` IN ( $contact_str ) OR `allow_gid` REGEXP '<" . intval($group) . ">' )) "; $o = '

' . t('Group: ') . $r[0]['name'] . '

' . $o; } elseif($cid) { @@ -162,7 +185,7 @@ function network_content(&$a, $update = 0) { intval($cid) ); if(count($r)) { - $sql_extra = " AND `item`.`parent` IN ( SELECT `parent` FROM `item` WHERE `id` = `parent` AND `contact-id` IN ( " . intval($cid) . " )) "; + $sql_extra = " AND `item`.`parent` IN ( SELECT `parent` FROM `item` WHERE `id` = `parent` $star_sql AND `contact-id` IN ( " . intval($cid) . " )) "; $o = '

' . t('Contact: ') . $r[0]['name'] . '

' . $o; if($r[0]['network'] !== NETWORK_MAIL && $r[0]['network'] !== NETWORK_DFRN && $r[0]['network'] !== NETWORK_FACEBOOK && $r[0]['writable'] && (! get_pconfig(local_user(),'system','nowarn_insecure'))) { notice( t('Private messages to this person are at risk of public disclosure.') . EOL); @@ -184,6 +207,7 @@ function network_content(&$a, $update = 0) { if(x($_GET,'search')) $sql_extra .= " AND `item`.`body` REGEXP '" . dbesc(escape_tags($_GET['search'])) . "' "; + $r = q("SELECT COUNT(*) AS `total` FROM `item` LEFT JOIN `contact` ON `contact`.`id` = `item`.`contact-id` diff --git a/mod/starred.php b/mod/starred.php new file mode 100644 index 0000000000..035b81e764 --- /dev/null +++ b/mod/starred.php @@ -0,0 +1,35 @@ +argc > 1) + $message_id = intval($a->argv[1]); + if(! $message_id) + killme(); + + $r = q("SELECT starred FROM item WHERE uid = %d AND id = %d LIMIT 1", + intval(local_user()), + intval($message_id) + ); + if(! count($r)) + killme(); + + if(! intval($r[0]['starred'])) + $starred = 1; + + $r = q("UPDATE item SET starred = %d WHERE uid = %d and id = %d LIMIT 1", + intval($starred), + intval(local_user()), + intval($message_id) + ); + + // the json doesn't really matter, it will either be 0 or 1 + + echo json_encode($starred); + killme(); +} diff --git a/view/theme/duepuntozero/style.css b/view/theme/duepuntozero/style.css index e18cc32367..3a6c94a306 100644 --- a/view/theme/duepuntozero/style.css +++ b/view/theme/duepuntozero/style.css @@ -897,6 +897,14 @@ input#dfrn-url { margin-bottom: 15px; } +#network-star-link{ + margin-top: 10px; +} +.network-star { + float: left; + margin-right: 5px; +} + .wall-item-content-wrapper { margin-top: 10px; border: 1px solid #CCC; @@ -1037,7 +1045,12 @@ input#dfrn-url { } .editpost { - margin-left: 15px; + margin-left: 10px; + float: left; +} +.star-item { + margin-left: 10px; + float: left; } .wall-item-links-wrapper { diff --git a/view/theme/loozah/style.css b/view/theme/loozah/style.css index 8f64e4cf88..04a680017c 100644 --- a/view/theme/loozah/style.css +++ b/view/theme/loozah/style.css @@ -1096,8 +1096,23 @@ input#dfrn-url { } .editpost { - margin-left: 15px; + margin-left: 10px; + float: left; } +.star-item { + margin-left: 10px; + float: left; +} + + +#network-star-link{ + margin-top: 10px; +} +.network-star { + float: left; + margin-right: 5px; +} + .wall-item-info.wallwall { width: 285px; diff --git a/view/wall_item.tpl b/view/wall_item.tpl index a95097be16..1c5e82b17b 100644 --- a/view/wall_item.tpl +++ b/view/wall_item.tpl @@ -34,6 +34,7 @@ $vote $plink $edpost + $star $drop diff --git a/view/wallwall_item.tpl b/view/wallwall_item.tpl index 39c14cf4fa..fd686f0f4b 100644 --- a/view/wallwall_item.tpl +++ b/view/wallwall_item.tpl @@ -38,6 +38,7 @@ $vote $plink $edpost + $star $drop From 07ea67e33b458dd2d2d88efcaaccf9d00576968d Mon Sep 17 00:00:00 2001 From: Friendika Date: Sun, 3 Jul 2011 19:57:20 -0700 Subject: [PATCH 83/89] removed stray debug statement --- mod/photos.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/mod/photos.php b/mod/photos.php index 2c896e32f5..3e0ec5802e 100644 --- a/mod/photos.php +++ b/mod/photos.php @@ -25,7 +25,7 @@ function photos_init(&$a) { $a->data['user'] = $r[0]; $sql_extra = permissions_sql($a->data['user']['uid']); -echo "SQL=$sql_extra"; + $albums = q("SELECT distinct(`album`) AS `album` FROM `photo` WHERE `uid` = %d $sql_extra ", intval($a->data['user']['uid']) ); @@ -1110,6 +1110,7 @@ function photos_content(&$a) { } $tags=Null; + if(count($linked_items) && strlen($link_item['tag'])) { $arr = explode(',',$link_item['tag']); // parse tags and add links From cd7098501e124eb6f56483503b78ad337b9d30ab Mon Sep 17 00:00:00 2001 From: Friendika Date: Sun, 3 Jul 2011 20:18:20 -0700 Subject: [PATCH 84/89] change wording of "new item view" to be consistent --- mod/network.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/mod/network.php b/mod/network.php index e5e3d34a73..28e5402834 100644 --- a/mod/network.php +++ b/mod/network.php @@ -24,9 +24,9 @@ function network_init(&$a) { $a->page['aside'] .= ''; + $a->page['aside'] .= '' . t('View Conversations') . ''; else { - $a->page['aside'] .= '' . t('New Item View') . ''; + $a->page['aside'] .= '' . t('View New Items') . ''; if(x($_GET,'star')) $a->page['aside'] .= ''; diff --git a/mod/msearch.php b/mod/msearch.php index dc94962954..541fd2c7e7 100644 --- a/mod/msearch.php +++ b/mod/msearch.php @@ -16,7 +16,7 @@ function msearch_post(&$a) { if(count($r)) $total = $r[0]['total']; - $r = q("SELECT `username`, `nickname`, `user`.`uid` FROM `user` LEFT JOIN `profile` ON `user`.`uid` = `profile`.`uid` WHERE `is-default` = 1 AND `hidewall` = 0 AND MATCH `pub_keywords` AGAINST ('%s') LIMIT %d , %d ", + $r = q("SELECT `pub_keywords`, `username`, `nickname`, `user`.`uid` FROM `user` LEFT JOIN `profile` ON `user`.`uid` = `profile`.`uid` WHERE `is-default` = 1 AND `hidewall` = 0 AND MATCH `pub_keywords` AGAINST ('%s') LIMIT %d , %d ", dbesc($search), intval($startrec), intval($perpage) @@ -29,6 +29,7 @@ function msearch_post(&$a) { 'name' => $rr['name'], 'url' => $a->get_baseurl() . '/profile/' . $rr['nickname'], 'photo' => $a->get_baseurl() . '/photo/avatar/' . $rr['uid'] . 'jpg' + 'tags' => str_replace(array(',',' '),array(' ',' '),$rr['pub_keywords']); ); } From 9871cc8c0e07c112446b292548292301dbfd159f Mon Sep 17 00:00:00 2001 From: Friendika Date: Sun, 3 Jul 2011 22:53:11 -0700 Subject: [PATCH 86/89] profile match layout issues --- view/theme/duepuntozero/style.css | 3 +++ view/theme/loozah/style.css | 4 ++++ 2 files changed, 7 insertions(+) diff --git a/view/theme/duepuntozero/style.css b/view/theme/duepuntozero/style.css index 3a6c94a306..4df36b4a91 100644 --- a/view/theme/duepuntozero/style.css +++ b/view/theme/duepuntozero/style.css @@ -2380,6 +2380,9 @@ a.mail-list-link { .profile-match-wrapper { float: left; padding: 10px; + width: 120px; + height: 120px; + scroll: auto; } #profile-match-wrapper-end { clear: both; diff --git a/view/theme/loozah/style.css b/view/theme/loozah/style.css index 04a680017c..df14a29dbd 100644 --- a/view/theme/loozah/style.css +++ b/view/theme/loozah/style.css @@ -2341,6 +2341,10 @@ a.mail-list-link { .profile-match-wrapper { float: left; padding: 10px; + width: 120px; + height: 120px; + scroll: auto; + } #profile-match-wrapper-end { clear: both; From a82e0e32b33a1c58bccbc4dcd3ce0a2953591db0 Mon Sep 17 00:00:00 2001 From: Friendika Date: Mon, 4 Jul 2011 00:44:25 -0700 Subject: [PATCH 87/89] add site info to site json response --- mod/friendika.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mod/friendika.php b/mod/friendika.php index 7762bfbb52..8c034c4acc 100644 --- a/mod/friendika.php +++ b/mod/friendika.php @@ -21,7 +21,7 @@ function friendika_init(&$a) { 'register_policy' => $register_policy[$a->config['register_policy']], 'admin' => $admin, 'site_name' => $a->config['sitename'], - + 'info' => ((x($a->config,'info')) ? $a->config['info'] : '') ); echo json_encode($data); From 78363ecfb10edb29da9394770b68bb66f199e70b Mon Sep 17 00:00:00 2001 From: Friendika Date: Mon, 4 Jul 2011 00:46:23 -0700 Subject: [PATCH 88/89] msearch typo --- mod/msearch.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/mod/msearch.php b/mod/msearch.php index 541fd2c7e7..7d9bbe9e73 100644 --- a/mod/msearch.php +++ b/mod/msearch.php @@ -28,8 +28,8 @@ function msearch_post(&$a) { $results[] = array( 'name' => $rr['name'], 'url' => $a->get_baseurl() . '/profile/' . $rr['nickname'], - 'photo' => $a->get_baseurl() . '/photo/avatar/' . $rr['uid'] . 'jpg' - 'tags' => str_replace(array(',',' '),array(' ',' '),$rr['pub_keywords']); + 'photo' => $a->get_baseurl() . '/photo/avatar/' . $rr['uid'] . 'jpg', + 'tags' => str_replace(array(',',' '),array(' ',' '),$rr['pub_keywords']) ); } From 2359783b9f6c0ec754c641453026712cf22e7cb6 Mon Sep 17 00:00:00 2001 From: Fabio Comuni Date: Mon, 4 Jul 2011 11:30:53 +0200 Subject: [PATCH 89/89] dispy: style private mails --- view/theme/dispy/style.css | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/view/theme/dispy/style.css b/view/theme/dispy/style.css index ac70ff6790..0cb95f6937 100644 --- a/view/theme/dispy/style.css +++ b/view/theme/dispy/style.css @@ -689,6 +689,15 @@ div[id$="wrapper"] br { clear: left; } .mail-list-delete-wrapper { float: right; } .mail-list-outside-wrapper-end { clear: both;} +.mail-conv-sender {float: left; margin: 0px 5px 5px 0px } +.mail-conv-sender-photo { width: 32px; height: 32px } +.mail-conv-sender-name { float: left } +.mail-conv-date { float: right } +.mail-conv-subject { clear: right; font-weight: bold; font-size: 1.2em } +.mail-conv-body { clear: both; } +.mail-conv-delete-wrapper { margin-top: 5px; } + + /** * contacts */