git.gnu.io has moved to IP address 209.51.188.249 -- please double check where you are logging in.

Commit e04ce18a authored by Evan Prodromou's avatar Evan Prodromou

Merge branch '1.0.x' into testing

parents 362e8b66 9145ce42
......@@ -63,7 +63,56 @@ class Memcached_DataObject extends Safe_DataObject
}
return $i;
}
function multiGet($cls, $keyCol, $keyVals)
{
$result = array_fill_keys($keyVals, null);
$toFetch = array();
foreach ($keyVals as $keyVal) {
$i = self::getcached($cls, $keyCol, $keyVal);
if ($i !== false) {
$result[$keyVal] = $i;
} else if (!empty($keyVal)) {
$toFetch[] = $keyVal;
}
}
if (count($toFetch) > 0) {
$i = DB_DataObject::factory($cls);
if (empty($i)) {
throw new Exception(_('Cannot instantiate class ' . $cls));
}
$i->whereAddIn($keyCol, $toFetch, $i->columnType($keyCol));
if ($i->find()) {
while ($i->fetch()) {
$copy = clone($i);
$copy->encache();
$result[$i->$keyCol] = $copy;
}
}
}
return new ArrayWrapper(array_values($result));
}
function columnType($columnName)
{
$keys = $this->table();
if (!array_key_exists($columnName, $keys)) {
throw new Exception('Unknown key column ' . $columnName . ' in ' . join(',', array_keys($keys)));
}
$def = $keys[$columnName];
if ($def & DB_DATAOBJECT_INT) {
return 'integer';
} else {
return 'string';
}
}
/**
* @fixme Should this return false on lookup fail to match staticGet?
*/
......
......@@ -84,6 +84,11 @@ class Notice extends Memcached_DataObject
/* the code above is auto generated do not remove the tag below */
###END_AUTOCODE
function multiGet($kc, $kvs)
{
return Memcached_DataObject::multiGet('Notice', $kc, $kvs);
}
/* Notice types */
const LOCAL_PUBLIC = 1;
const REMOTE_OMB = 0;
......@@ -1856,7 +1861,11 @@ class Notice extends Memcached_DataObject
} else {
$idstr = $cache->get(Cache::key('notice:repeats:'.$this->id));
if ($idstr !== false) {
$ids = explode(',', $idstr);
if (empty($idstr)) {
$ids = array();
} else {
$ids = explode(',', $idstr);
}
} else {
$ids = $this->_repeatStreamDirect(100);
$cache->set(Cache::key('notice:repeats:'.$this->id), implode(',', $ids));
......@@ -1885,18 +1894,7 @@ class Notice extends Memcached_DataObject
$notice->limit(0, $limit);
}
$ids = array();
if ($notice->find()) {
while ($notice->fetch()) {
$ids[] = $notice->id;
}
}
$notice->free();
$notice = NULL;
return $ids;
return $notice->fetchAll('id');
}
function locationOptions($lat, $lon, $location_id, $location_ns, $profile = null)
......
......@@ -95,14 +95,6 @@ class RawConversationNoticeStream extends NoticeStream
Notice::addWhereSinceId($notice, $since_id);
Notice::addWhereMaxId($notice, $max_id);
$ids = array();
if ($notice->find()) {
while ($notice->fetch()) {
$ids[] = $notice->id;
}
}
return $ids;
return $notice->fetchAll('id');
}
}
\ No newline at end of file
......@@ -59,42 +59,6 @@ abstract class NoticeStream
static function getStreamByIds($ids)
{
$cache = Cache::instance();
if (!empty($cache)) {
$notices = array();
foreach ($ids as $id) {
$n = Notice::staticGet('id', $id);
if (!empty($n)) {
$notices[] = $n;
}
}
return new ArrayWrapper($notices);
} else {
$notice = new Notice();
if (empty($ids)) {
//if no IDs requested, just return the notice object
return $notice;
}
$notice->whereAdd('id in (' . implode(', ', $ids) . ')');
$notice->find();
$temp = array();
while ($notice->fetch()) {
$temp[$notice->id] = clone($notice);
}
$wrapped = array();
foreach ($ids as $id) {
if (array_key_exists($id, $temp)) {
$wrapped[] = $temp[$id];
}
}
return new ArrayWrapper($wrapped);
}
return Notice::multiGet('id', $ids);
}
}
......@@ -75,13 +75,9 @@ Administration panel
As of StatusNet 0.9.0 there is a new administration panel that allows
you to configure Twitter bridge settings within StatusNet itself,
instead of having to specify them manually in your config.php. To enable
the administration panel, you will need to add it to the list of active
administration panels. You can do this via your config.php. E.g.:
instead of having to specify them manually in your config.php.
$config['admin']['panels'][] = 'twitter';
And to access it, you'll need to use a user with the "administrator"
To access it, you'll need to use a user with the "administrator"
role (see: scripts/userrole.php).
Sign in with Twitter
......
......@@ -287,6 +287,18 @@ class TwitterBridgePlugin extends Plugin
return true;
}
/**
* If the plugin's installed, this should be accessible to admins
*/
function onAdminPanelCheck($name, &$isOK)
{
if ($name == 'twitter') {
$isOK = true;
return false;
}
return true;
}
/**
* Add a Twitter tab to the admin panel
*
......
/** theme: neo-blue
*
* @package StatusNet
* @author Samantha Doherty <sammy@status.net>
* @copyright 2011 StatusNet, Inc.
* @license http://creativecommons.org/licenses/by/3.0/ Creative Commons Attribution 3.0 Unported
* @link http://status.net/
*/
@media screen, projection, tv {
body {
background: #7e89a4;
}
#wrap {
border: none;
padding: 0px 10px;
box-shadow: 0px 0px 12px rgba(0, 0, 0, 0.7);
-moz-box-shadow: 0px 0px 12px rgba(0, 0, 0, 0.7);
-webkit-box-shadow: 0px 0px 12px rgba(0, 0, 0, 0.7);
background: #fff;
}
#header {
padding-top: 7px;
}
address {
left: 5px;
}
#site_nav_global_primary {
top: 0px;
right: -14px;
padding-top: 5px;
height: 30px;
width: 986px;
box-shadow: 0px 0px 6px rgba(0, 0, 0, 0.7);
-moz-box-shadow: 0px 0px 6px rgba(0, 0, 0, 0.7);
-webkit-box-shadow: 0px 0px 6px rgba(0, 0, 0, 0.7);
-webkit-border-bottom-left-radius: 4px;
-moz-border-radius-bottomleft: 4px;
border-bottom-left-radius: 4px;
-webkit-border-bottom-right-radius: 4px;
-moz-border-radius-bottomright: 4px;
border-bottom-right-radius: 4px;
z-index: 98;
border-bottom: 1px solid #fff;
border-left: 1px solid #516499;
border-right: 1px solid #516499;
}
#site_nav_global_primary a:hover {
background: #4c619c;
-webkit-border-radius: 4px;
-moz-border-radius: 4px;
border-radius: 4px;
}
#site_notice {
margin: 45px 0px 0px 0px;
background-color: #f2f2f2; /* XXX */
}
#core {
border-top: none;
margin-top: 3px;
}
.input_forms {
background-color: #fff;
left: 0px;
padding: 18px 0px 0px 0px;
}
}/*end of @media screen, projection, tv*/
/* mobile style */
body {
background-image: none;
min-width: 0;
}
#wrap {
margin: 0;
padding: 0;
min-width:0;
max-width:100%;
width: auto;
border: none;
}
#header {
width: 100%;
padding: 0;
}
address {
float:left;
margin: 0px;
width: auto;
left: 0px;
}
address img {
float: left;
background: #fff;
padding: 2px 2px 2px 6px;
}
address img + .fn {
display:block;
margin-top: 8px;
clear: left;
float: left;
color: #000;
margin-left: 6px;
}
#site_nav_global_primary {
margin:0;
width: 100%;
padding: 2px 0;
height: auto;
position:absolute;
top:0;
left:0;
font-size: 1em;
letter-spacing: 0em;
border-top: none;
-webkit-border-top-right-radius: 0px;
-moz-border-radius-topright: 0px;
border-top-right-radius: 0px;
height: 24px;
line-height: 16px;
}
#site_nav_global_primary li {
margin-left:0;
margin-right: 2px;
float:left;
font-size:0.9em;
padding: 2px 4px;
line-height: 1em;
height: auto;
}
#site_nav_global_primary li:last-child {
margin-right: 0px;
}
#site_nav_global_primary a {
padding: 2px 4px;
height: 20px;
}
#core {
width: 100%;
border-left: none;
border-right: none;
}
#aside_primary_wrapper {
background: none;
}
#content_wrapper {
right: 0px;
border: none;
}
#site_nav_local_views_wrapper {
right: 0px;
border: none;
}
#navtoggle {
float: right;
padding: 2px 6px;
text-decoration: none;
}
#site_nav_local_views {
height: auto;
font-size: 1em;
line-height: 2em;
margin-bottom: 0px;
padding: 10px 0px 10px 6px;
background: none;
left: 0px;
width: 100%;
display: none;
}
#site_nav_local_views h3 {
color: #333;
font-size: 1em;
margin-bottom: 0px;
background: none;
text-transform: none;
letter-spacing: 0;
padding-bottom: 0;
}
#site_nav_local_views li {
margin-right: 6px;
margin-bottom: 0px;
clear: left;
}
#site_nav_local_views li li {
float: left;
clear: none;
margin-bottom: 6px;
}
#site_nav_local_views a {
color: #fff;
text-shadow: 0px 1px 1px rgba(0, 0, 0, 0.5);;
background: #364a84;
background: -moz-linear-gradient(top, #7b8dbb , #364a84);
background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#7b8dbb), color-stop(100%,#364a84));
font-size: 0.9em;
width: auto;
}
#site_nav_local_views a:hover {
background: #7b8dbb;
background: -moz-linear-gradient(top, #364a84 , #7b8dbb);
background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#364a84), color-stop(100%,#7b8dbb));
}
#login #site_nav_local_views, #register #site_nav_local_views, #openidlogin #site_nav_local_views {
display: block;
margin-top: 25px;
}
#login #navtoggle, #register #navtoggle, #openidlogin #navtoggle {
display: none;
}
#login #site_nav_local_views li, #register #site_nav_local_views li, #openidlogin #site_nav_local_views li {
float: left;
clear: none;
margin-bottom: 6px;
}
#content {
width: 96%;
padding: 10px 2%;
margin: 0;
min-height: auto;
left: 0px;
}
#content h1 {
clear: left;
}
#footer {
width: auto;
margin: 0;
padding: 10px 4px 4px 4px;
}
.input_forms {
display: block;
width: 102%;
top: -10px;
left: -2%;
padding-left: 2%;
padding-right: 0;
}
#input_form_nav li a {
padding: 0px 4px 1px 4px;
margin-right: 6px;
}
.input_form {
clear: left;
width: 100%;
padding-bottom: 0px;
}
#input_form_status, #input_form_direct {
padding-bottom: 40px;
}
.form_notice_placeholder .placeholder {
width: 290px;
margin-bottom: 20px;
}
.form_notice {
float: left;
margin-left: 0px;
width: 300px;
padding: 4px 0px;
}
#form_notice-direct.form_notice {
padding-top: 0px;
}
.form_notice textarea, #form_notice-direct.form_notice textarea {
width: 292px;
height: 36px;
padding: 4px 4px 16px 4px;
font-size: 1em;
}
.form_notice .count {
position: absolute;
top: 44px;
left: 270px;
}
#form_notice-direct.form_notice .count {
top: 70px;
left: 270px;
}
.form_notice .error,
.form_notice .success,
.form_notice .notice-status {
width: 285px;
}
/*input type=file no good in
iPhone/iPod Touch, Android, Opera Mini Simulator
*/
.form_notice .notice_data-attach, .form_notice .notice_data-geo_wrap label, .form_notice .notice_data-geo_wrap input {
display:none;
}
.checkbox-wrapper {
margin-left: 0px;
clear: left;
float: left;
width: 200px;
z-index: 2;
}
.form_notice .checkbox-wrapper {
display: inline;
margin-left: 0px;
}
.checkbox-wrapper label.checkbox {
display: none !important;
}
.checkbox-wrapper #notice_private {
display: inline;
margin-top: 10px;
margin-left: 20px;
}
.form_notice .checkbox-wrapper #notice_private {
margin-left: 0px;
}
.checkbox-wrapper:before {
content: "Send privately?";
}
.input_form fieldset fieldset {
width: 300px;
}
.input_form .form_settings label {
display: inline;
}
.input_form .form_settings li input {
width: 292px;
}
.input_form .form_settings li textarea {
width: 292px;
}
.bookmarkform-thumbnail {
display: none;
}
#event-startdate, #event-starttime, #event-enddate, #event-endtime {
width: 120px;
margin-right: 12px;
}
.input_form .form_settings .submit {
font-size: 1em;
margin: 10px 0;
clear: left;
float: left;
}
.form_notice #notice_action-submit {
text-align: center;
left: 0px;
top: 100%;
margin-top: -45px;
width: 80px;
font-size: 1em;
}
#form_notice-direct.form_notice #notice_action-submit {
top: 148px;
}
.threaded-replies {
width: 80%;
margin-left: 59px;
}
#content .notice .threaded-replies .notice {
width: 95%;
}
.threaded-replies .placeholder {
margin: 10px;
width: 92%;
}
.threaded-replies .form_notice {
margin-bottom: 10px;
}
.threaded-replies .form_notice textarea {
width: 220px;
}
.threaded-replies .form_notice .count {
left: 205px;
top: 53px;
}
.threaded-replies .form_notice #notice_action-submit {
position: relative;
top: 0;
bottom: 0px;
left: 0;
margin-top: 10px;
}
.threaded-replies .form_notice .error,
.threaded-replies .form_notice .success,
.threaded-replies .form_notice .notice-status {
width: 210px;
}
.form_settings fieldset {
margin-bottom:7px;
}
.form_settings label {
width:auto;
display:block;
float:none;
text-align: left;
}
.form_settings .form_data li {
margin-bottom:7px;
}
.form_settings .form_data textarea,
.form_settings .form_data select,
.form_settings .form_data input {
margin-left:0;
display:block;
}
.form_settings .form_data textarea {
width:96.41%;
}
.form_settings .form_data label {
float:none;
}
.form_settings .form_data p.form_guide {
width:auto;
margin-left:0 !important;
}
#settings_design_color .form_data {
width: auto;
margin-right: 0;
}
.form_settings input.checkbox, .form_settings input.radio {
left: 0px;
}
.form_settings label.checkbox, .form_settings label.radio {
left: -10px;
}
.notice .addressees:before {
content: '\003E';
}
.user_in .notice div.entry-content {
max-width: 150px;
}
ul.qna-dummy {
width: 80%;
}
.qna-dummy-placeholder input {
width: 92%;
}
.question #qna-answer, .qna-full-question #qna-answer {
width: 220px;
}
.threaded-replies #answer-form fieldset {
width: 220px;
}
.threaded-replies #qna-answer-submit {
float: left;
clear: left;
position: relative;
top: 0;
bottom: 0px;
left: 0;
margin-top: 10px;
}
a.company_logo {