aboutsummaryrefslogtreecommitdiff
path: root/engine/lib
diff options
context:
space:
mode:
authorBrett Profitt <brett.profitt@gmail.com>2011-04-26 15:03:02 -0400
committerBrett Profitt <brett.profitt@gmail.com>2011-04-26 15:03:02 -0400
commitc80ba5aa03264dd64c20ed8ae222e87f9371a44d (patch)
tree9355d87a9ab4570b9e54685ad9869cd4fedd392f /engine/lib
parent581c2d35ae053aed07a607b8bb844603c48b7c2f (diff)
parent632cf13234d04a3f6b7acf67866a82e0bebde55c (diff)
downloadelgg-c80ba5aa03264dd64c20ed8ae222e87f9371a44d.tar.gz
elgg-c80ba5aa03264dd64c20ed8ae222e87f9371a44d.tar.bz2
Merge remote branch 'upstream/master'
Diffstat (limited to 'engine/lib')
-rw-r--r--engine/lib/admin.php70
-rw-r--r--engine/lib/annotations.php21
-rw-r--r--engine/lib/elgglib.php42
-rw-r--r--engine/lib/input.php2
-rw-r--r--engine/lib/metastrings.php77
-rw-r--r--engine/lib/plugins.php2
-rw-r--r--engine/lib/statistics.php6
-rw-r--r--engine/lib/views.php15
8 files changed, 178 insertions, 57 deletions
diff --git a/engine/lib/admin.php b/engine/lib/admin.php
index a9a0382cc..06418c44f 100644
--- a/engine/lib/admin.php
+++ b/engine/lib/admin.php
@@ -303,6 +303,7 @@ function admin_init() {
elgg_register_page_handler('admin', 'admin_settings_page_handler');
elgg_register_page_handler('admin_plugin_screenshot', 'admin_plugin_screenshot_page_handler');
+ elgg_register_page_handler('admin_plugin_text_file', 'admin_markdown_page_handler');
}
/**
@@ -446,7 +447,8 @@ function admin_settings_page_handler($page) {
* @return true
*/
function admin_plugin_screenshot_page_handler($pages) {
- admin_gatekeeper(); // only admins can use this - security feature
+ // only admins can use this for security
+ admin_gatekeeper();
$plugin_id = elgg_extract(0, $pages);
// only thumbnail or full.
@@ -485,6 +487,72 @@ function admin_plugin_screenshot_page_handler($pages) {
}
/**
+ * Formats and serves out markdown files from plugins.
+ *
+ * URLs in format like admin_plugin_text_file/<plugin_id>/filename.ext
+ *
+ * The only valid files are:
+ * * README.txt
+ * * CHANGES.txt
+ * * INSTALL.txt
+ * * COPYRIGHT.txt
+ * * LICENSE.txt
+ *
+ * @param type $page
+ */
+function admin_markdown_page_handler($pages) {
+ admin_gatekeeper();
+
+ elgg_set_context('admin');
+
+ elgg_unregister_css('elgg');
+ $url = elgg_get_simplecache_url('js', 'admin');
+ elgg_register_js('elgg.admin', $url);
+ elgg_load_js('elgg.admin');
+ elgg_load_library('elgg:markdown');
+
+ $plugin_id = elgg_extract(0, $pages);
+ $plugin = elgg_get_plugin_from_id($plugin_id);
+ $filename = elgg_extract(1, $pages);
+
+ $error = false;
+
+ if (!$plugin) {
+ $error = elgg_echo('admin:plugins:markdown:unknown_plugin');
+ }
+
+ $text_files = $plugin->getAvailableTextFiles();
+
+ if (!array_key_exists($filename, $text_files)) {
+ $error = elgg_echo('admin:plugins:markdown:unknown_file');
+ }
+
+ $file = $text_files[$filename];
+ $file_contents = file_get_contents($file);
+
+ if (!$file_contents) {
+ $error = elgg_echo('admin:plugins:markdown:unknown_file');
+ }
+
+ if ($error) {
+ $title = $error;
+ $body = elgg_view_layout('admin', array('content' => $error, 'title' => $title));
+ echo elgg_view_page($title, $body, 'admin');
+ return true;
+ }
+
+ $title = $plugin->manifest->getName() . ": $filename";
+ $text = Markdown($file_contents);
+
+ $body = elgg_view_layout('admin', array(
+ 'content' => $text,
+ 'title' => $title
+ ));
+
+ echo elgg_view_page($title, $body, 'admin');
+}
+
+/**
* Adds default admin widgets to the admin dashboard.
*
* @return void
diff --git a/engine/lib/annotations.php b/engine/lib/annotations.php
index 7a4e62921..80ffbe74e 100644
--- a/engine/lib/annotations.php
+++ b/engine/lib/annotations.php
@@ -388,13 +388,10 @@ function elgg_list_entities_from_annotations($options = array()) {
/**
* Get entities ordered by a mathematical calculation on annotation values
*
- * @todo I think at some point this could run through elgg_get_annotations() and pass a the callback
- * as entity_row_to_elggstar
- *
* @param array $options An options array:
* 'annotation_calculation' => The calculation to use. Must be a valid MySQL function.
* Defaults to sum. Result selected as 'annotation_calculation'.
- * 'order_by' => The order for the sorting. Defaults to 'calculation desc'.
+ * 'order_by' => The order for the sorting. Defaults to 'annotation_calculation desc'.
* 'annotation_names' => The names of annotations on the entity.
* 'annotation_values' => The values of annotations on the entity.
*
@@ -404,9 +401,10 @@ function elgg_list_entities_from_annotations($options = array()) {
* @return mixed
*/
function elgg_get_entities_from_annotation_calculation($options) {
+ $db_prefix = elgg_get_config('dbprefix');
$defaults = array(
- 'calculation' => 'sum',
- 'order_by' => 'calculation desc'
+ 'calculation' => 'sum',
+ 'order_by' => 'annotation_calculation desc'
);
$options = array_merge($defaults, $options);
@@ -415,14 +413,13 @@ function elgg_get_entities_from_annotation_calculation($options) {
// you must cast this as an int or it sorts wrong.
$options['selects'][] = 'e.*';
- $options['selects'][] = "$function(cast(v.string as signed)) as calculation";
+ $options['selects'][] = "$function(cast(a_msv.string as signed)) as annotation_calculation";
- // need our own join to get the values.
-// $options['joins'][] = "JOIN {$db_prefix}metastrings msv ON a.value_id = msv.id";
-// $options['joins'][] = "JOIN {$db_prefix}entities ae ON a.entity_guid = ae.guid";
+ // need our own join to get the values because the lower level functions don't
+ // add all the joins if it's a different callback.
+ $options['joins'][] = "JOIN {$db_prefix}metastrings a_msv ON n_table.value_id = a_msv.id";
- $options['wheres'][] = get_access_sql_suffix('n_table');
-// $options['wheres'][] = "e.guid = a.entity_guid";
+ // don't need access control because it's taken care of by elgg_get_annotations.
$options['group_by'] = 'n_table.entity_guid';
$options['callback'] = 'entity_row_to_elggstar';
diff --git a/engine/lib/elgglib.php b/engine/lib/elgglib.php
index 6c94133df..e67f8b627 100644
--- a/engine/lib/elgglib.php
+++ b/engine/lib/elgglib.php
@@ -202,6 +202,7 @@ function elgg_unregister_js($name) {
*
* @param string $name Identifier of the JavaScript resource
*
+ * @return void
* @since 1.8.0
*/
function elgg_load_js($name) {
@@ -254,6 +255,7 @@ function elgg_unregister_css($name) {
*
* @param string $name Identifier of the CSS file
*
+ * @return void
* @since 1.8.0
*/
function elgg_load_css($name) {
@@ -354,8 +356,9 @@ function elgg_unregister_external_file($type, $name) {
* Load an external resource for use on this page
*
* @param string $type Type of file: js or css
- * @param string $name
+ * @param string $name The identifier for the file
*
+ * @return void
* @since 1.8.0
*/
function elgg_load_external_file($type, $name) {
@@ -1152,13 +1155,16 @@ function elgg_dump($value, $to_screen = TRUE, $level = 'NOTICE') {
*
* @see CODING.txt
*
- * @param str $msg Message to log / display.
- * @param str $dep_version Human-readable *release* version: 1.7, 1.7.3
+ * @param str $msg Message to log / display.
+ * @param str $dep_version Human-readable *release* version: 1.7, 1.7.3
+ * @param int $backtrace_level How many levels back to display the backtrace. Useful if calling from
+ * functions that are called from other places (like elgg_view()). Set
+ * to -1 for a full backtrace.
*
* @return bool
* @since 1.7.0
*/
-function elgg_deprecated_notice($msg, $dep_version) {
+function elgg_deprecated_notice($msg, $dep_version, $backtrace_level = 1) {
// if it's a major release behind, visual and logged
// if it's a 1 minor release behind, visual and logged
// if it's for current minor release, logged.
@@ -1192,9 +1198,26 @@ function elgg_deprecated_notice($msg, $dep_version) {
// Get a file and line number for the log. Never show this in the UI.
// Skip over the function that sent this notice and see who called the deprecated
// function itself.
+ $msg .= " Called from ";
+ $stack = array();
$backtrace = debug_backtrace();
- $caller = $backtrace[1];
- $msg .= " (Called from {$caller['file']}:{$caller['line']})";
+ // never show this call.
+ array_shift($backtrace);
+ $i = count($backtrace);
+
+ foreach ($backtrace as $trace) {
+ $stack[] = "[#$i] {$trace['file']}:{$trace['line']}";
+ $i--;
+
+ if ($backtrace_level > 0) {
+ if ($backtrace_level <= 1) {
+ break;
+ }
+ $backtrace_level--;
+ }
+ }
+
+ $msg .= implode("<br /> -> ", $stack);
elgg_log($msg, 'WARNING');
@@ -1623,8 +1646,9 @@ function is_not_null($string) {
* names by singular names.
*
* @param array $options The options array. $options['keys'] = 'values';
- * @param array $singulars A list of sinular words to pluralize by adding 's'.
+ * @param array $singulars A list of singular words to pluralize by adding 's'.
*
+ * @access private
* @return array
* @since 1.7.0
*/
@@ -1744,8 +1768,8 @@ function elgg_css_page_handler($page) {
*
* /<css||js>/name/of/view.<last_cache>.<css||js>
*
- * @param array $page The page array
- * @param string $type The type: js or css
+ * @param array $page The page array
+ * @param string $type The type: js or css
*
* @return mixed
*/
diff --git a/engine/lib/input.php b/engine/lib/input.php
index 25416b868..84752bc7d 100644
--- a/engine/lib/input.php
+++ b/engine/lib/input.php
@@ -237,7 +237,7 @@ function input_livesearch_page_handler($page) {
exit;
}
- if (!$q = get_input('q')) {
+ if (!$q = get_input('term', get_input('q'))) {
exit;
}
diff --git a/engine/lib/metastrings.php b/engine/lib/metastrings.php
index 655617ac6..d444121d0 100644
--- a/engine/lib/metastrings.php
+++ b/engine/lib/metastrings.php
@@ -211,23 +211,29 @@ function delete_orphaned_metastrings() {
*
* @param array $options Array in format:
*
- * metastring_names => NULL|ARR metastring names
+ * metastring_names => NULL|ARR metastring names
*
- * metastring_values => NULL|ARR metastring values
+ * metastring_values => NULL|ARR metastring values
*
- * metastring_ids => NULL|ARR metastring ids
+ * metastring_ids => NULL|ARR metastring ids
*
- * metastring_case_sensitive => BOOL Overall Case sensitive
+ * metastring_case_sensitive => BOOL Overall Case sensitive
*
- * metastring_owner_guids => NULL|ARR guids for metadata owners
+ * metastring_owner_guids => NULL|ARR Guids for metadata owners
*
- * metastring_created_time_lower => INT Lower limit for created time.
+ * metastring_created_time_lower => INT Lower limit for created time.
*
- * metastring_created_time_upper => INT Upper limit for created time.
+ * metastring_created_time_upper => INT Upper limit for created time.
*
- * metastring_calculation => STR Perform the MySQL function on the metastring values returned.
+ * metastring_calculation => STR Perform the MySQL function on the metastring values
+ * returned.
+ * This differs from egef_annotation_calculation in that
+ * it returns only the calculation of all annotation values.
+ * You can sum, avg, count, etc. egef_annotation_calculation()
+ * returns ElggEntities ordered by a calculation on their
+ * annotation values.
*
- * metastring_type => STR metadata or annotation(s)
+ * metastring_type => STR metadata or annotation(s)
*
* @return mixed
* @access private
@@ -373,14 +379,35 @@ function elgg_get_metastring_based_objects($options) {
}
$joins = $options['joins'];
-
$joins[] = "JOIN {$db_prefix}entities e ON n_table.entity_guid = e.guid";
- $joins[] = "JOIN {$db_prefix}metastrings n on n_table.name_id = n.id";
- $joins[] = "JOIN {$db_prefix}metastrings v on n_table.value_id = v.id";
+ // evaluate selects
+ if (!is_array($options['selects'])) {
+ $options['selects'] = array($options['selects']);
+ }
- // remove identical join clauses
- $joins = array_unique($joins);
+ $selects = $options['selects'];
+
+ // allow count shortcut
+ if ($options['count']) {
+ $options['metastring_calculation'] = 'count';
+ }
+
+ // For performance reasons we don't want the joins required for metadata / annotations
+ // unless we're going through one of their callbacks.
+ // this means we expect the functions passing different callbacks to pass their required joins.
+ // If we're doing a calculation
+ $custom_callback = ($options['callback'] == 'row_to_elggmetadata'
+ || $options['callback'] == 'row_to_elggannotation');
+ $is_calculation = $options['metastring_calculation'] ? true : false;
+
+ if ($custom_callback || $is_calculation) {
+ $joins[] = "JOIN {$db_prefix}metastrings n on n_table.name_id = n.id";
+ $joins[] = "JOIN {$db_prefix}metastrings v on n_table.value_id = v.id";
+
+ $selects[] = 'n.string as name';
+ $selects[] = 'v.string as value';
+ }
foreach ($joins as $i => $join) {
if ($join === FALSE) {
@@ -400,28 +427,24 @@ function elgg_get_metastring_based_objects($options) {
$joins = array_merge($joins, $metastring_clauses['joins']);
}
- // check for calculations
- if ($options['count']) {
- $options['metastring_calculation'] = 'count';
- }
-
if ($options['metastring_calculation'] === ELGG_ENTITIES_NO_VALUE) {
+ $selects = array_unique($selects);
// evalutate selects
- if ($options['selects']) {
- $selects = '';
- foreach ($options['selects'] as $select) {
- $selects .= ", $select";
+ $select_str = '';
+ if ($selects) {
+ foreach ($selects as $select) {
+ $select_str .= ", $select";
}
- } else {
- $selects = '';
}
- $query = "SELECT DISTINCT n_table.*, n.string as name,
- v.string as value{$selects} FROM {$db_prefix}$type n_table";
+ $query = "SELECT DISTINCT n_table.*{$select_str} FROM {$db_prefix}$type n_table";
} else {
$query = "SELECT {$options['metastring_calculation']}(v.string) as calculation FROM {$db_prefix}$type n_table";
}
+ // remove identical join clauses
+ $joins = array_unique($joins);
+
// add joins
foreach ($joins as $j) {
$query .= " $j ";
diff --git a/engine/lib/plugins.php b/engine/lib/plugins.php
index 3a144abc5..0947b7a8e 100644
--- a/engine/lib/plugins.php
+++ b/engine/lib/plugins.php
@@ -1088,6 +1088,8 @@ function plugin_init() {
elgg_register_action('admin/plugins/deactivate_all', '', 'admin');
elgg_register_action('admin/plugins/set_priority', '', 'admin');
+
+ elgg_register_library('elgg:markdown', elgg_get_root_path() . 'vendors/markdown/markdown.php');
}
elgg_register_event_handler('init', 'system', 'plugin_init');
diff --git a/engine/lib/statistics.php b/engine/lib/statistics.php
index 4e822e8af..cd2b7a6a1 100644
--- a/engine/lib/statistics.php
+++ b/engine/lib/statistics.php
@@ -100,7 +100,11 @@ function get_online_users() {
$objects = find_active_users(600, 10, $offset);
if ($objects) {
- return elgg_view_entity_list($objects, $count, $offset, 10, false);
+ return elgg_view_entity_list($objects, array(
+ 'count' => $count,
+ 'offset' => $offset,
+ 'limit' => 10
+ ));
}
}
diff --git a/engine/lib/views.php b/engine/lib/views.php
index e2cf6b5c3..45b2c35f8 100644
--- a/engine/lib/views.php
+++ b/engine/lib/views.php
@@ -395,8 +395,10 @@ function elgg_view($view, $vars = array(), $bypass = false, $debug = false, $vie
}
// full_view is the new preferred key for full view on entities @see elgg_view_entity()
- if (isset($vars['full'])) {
- elgg_deprecated_notice("Use \$vars['full_view'] instead of \$vars['full']", 1.8);
+ // check if full_view is set because that means we've already rewritten it and this is
+ // coming from another view passing $vars directly.
+ if (isset($vars['full']) && !isset($vars['full_view'])) {
+ elgg_deprecated_notice("Use \$vars['full_view'] instead of \$vars['full']", 1.8, 2);
$vars['full_view'] = $vars['full'];
}
if (isset($vars['full_view'])) {
@@ -404,16 +406,17 @@ function elgg_view($view, $vars = array(), $bypass = false, $debug = false, $vie
}
// internalname => name (1.8)
- if (isset($vars['internalname'])) {
- elgg_deprecated_notice('You should pass $vars[\'name\'] now instead of $vars[\'internalname\']', 1.8);
+ if (isset($vars['internalname']) && !isset($vars['name'])) {
+ elgg_deprecated_notice('You should pass $vars[\'name\'] now instead of $vars[\'internalname\']', 1.8, 2);
$vars['name'] = $vars['internalname'];
+ $test=false;
} elseif (isset($vars['name'])) {
$vars['internalname'] = $vars['name'];
}
// internalid => id (1.8)
- if (isset($vars['internalid'])) {
- elgg_deprecated_notice('You should pass $vars[\'id\'] now instead of $vars[\'internalid\']', 1.8);
+ if (isset($vars['internalid']) && !isset($vars['name'])) {
+ elgg_deprecated_notice('You should pass $vars[\'id\'] now instead of $vars[\'internalid\']', 1.8, 2);
$vars['id'] = $vars['internalid'];
} elseif (isset($vars['id'])) {
$vars['internalid'] = $vars['id'];