aboutsummaryrefslogtreecommitdiff
path: root/mod/profile
diff options
context:
space:
mode:
authorbrettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>2010-04-07 16:11:29 +0000
committerbrettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>2010-04-07 16:11:29 +0000
commit68f2c92868ddf477568c1dcbe6c58bc2f3375d33 (patch)
tree8ffa8b835182154aa3793f479d1834064c411ab9 /mod/profile
parent002f788efcd57f43a7347c12273779a163d2920a (diff)
downloadelgg-68f2c92868ddf477568c1dcbe6c58bc2f3375d33.tar.gz
elgg-68f2c92868ddf477568c1dcbe6c58bc2f3375d33.tar.bz2
First go at merging in draggable profile fields.
Added categories to profile plugin. git-svn-id: http://code.elgg.org/elgg/trunk@5652 36083f99-b078-4883-b0ff-0f9b5a30f544
Diffstat (limited to 'mod/profile')
-rw-r--r--mod/profile/actions/deletedefaultprofileitem.php20
-rw-r--r--mod/profile/actions/editdefault.php20
-rw-r--r--mod/profile/actions/editfield.php21
-rw-r--r--mod/profile/actions/reorder.php17
-rw-r--r--mod/profile/actions/resetdefaultprofile.php12
-rw-r--r--mod/profile/defaultprofile.php48
-rw-r--r--mod/profile/graphics/drag_handle.pngbin0 -> 594 bytes
-rw-r--r--mod/profile/languages/en.php14
-rw-r--r--mod/profile/manifest.xml4
-rw-r--r--mod/profile/start.php1
-rw-r--r--mod/profile/vendor/jq.editable.min.js10
-rw-r--r--mod/profile/views/default/profile/editdefaultprofile.php6
-rw-r--r--mod/profile/views/default/profile/editdefaultprofileitems.php68
13 files changed, 191 insertions, 50 deletions
diff --git a/mod/profile/actions/deletedefaultprofileitem.php b/mod/profile/actions/deletedefaultprofileitem.php
index b5b2eba84..7d431020d 100644
--- a/mod/profile/actions/deletedefaultprofileitem.php
+++ b/mod/profile/actions/deletedefaultprofileitem.php
@@ -1,7 +1,7 @@
<?php
/**
* Elgg profile plugin edit default profile action removal
- *
+ *
* @package ElggProfile
* @license http://www.gnu.org/licenses/old-licenses/gpl-2.0.html GNU Public License version 2
* @author Curverider Ltd <info@elgg.com>
@@ -12,11 +12,21 @@
global $CONFIG;
admin_gatekeeper();
-
+
$id = (int)get_input('id');
-
-if ( ($id) && (set_plugin_setting("admin_defined_profile_$id", '', 'profile')) &&
- (set_plugin_setting("admin_defined_profile_type_$id", '', 'profile'))) {
+
+$fieldlist = get_plugin_setting('user_defined_fields', 'profile');
+if (!$fieldlist) {
+ $fieldlist = '';
+}
+
+$fieldlist = str_replace("{$id},", "", $fieldlist);
+$fieldlist = str_replace(",{$id}", "", $fieldlist);
+$fieldlist = str_replace("{$id}", "", $fieldlist);
+
+if (($id) && (set_plugin_setting("admin_defined_profile_$id", '', 'profile')) &&
+ (set_plugin_setting("admin_defined_profile_type_$id", '', 'profile')) &&
+ set_plugin_setting('user_defined_fields',$fieldlist,'profile')) {
system_message(elgg_echo('profile:editdefault:delete:success'));
} else {
register_error(elgg_echo('profile:editdefault:delete:fail'));
diff --git a/mod/profile/actions/editdefault.php b/mod/profile/actions/editdefault.php
index 7f5fe0004..70e3b5cd8 100644
--- a/mod/profile/actions/editdefault.php
+++ b/mod/profile/actions/editdefault.php
@@ -15,15 +15,23 @@ admin_gatekeeper();
$label = sanitise_string(get_input('label'));
$type = sanitise_string(get_input('type'));
+$fieldlist = get_plugin_setting('user_defined_fields', 'profile');
+if (!$fieldlist) {
+ $fieldlist = '';
+}
+
if (($label) && ($type)){
- // find next index for new field
- $n = 0;
- while (get_plugin_setting("admin_defined_profile_$n", 'profile')) {
- $n++;
+ // Assign a random name
+ $n = md5(time().rand(0,9999));
+
+ if (!empty($fieldlist)) {
+ $fieldlist .= ',';
}
+ $fieldlist .= $n;
- if ( (set_plugin_setting("admin_defined_profile_$n", $label, 'profile')) &&
- (set_plugin_setting("admin_defined_profile_type_$n", $type, 'profile'))) {
+ if ((set_plugin_setting("admin_defined_profile_$n", $label, 'profile')) &&
+ (set_plugin_setting("admin_defined_profile_type_$n", $type, 'profile')) &&
+ set_plugin_setting('user_defined_fields',$fieldlist,'profile')) {
system_message(elgg_echo('profile:editdefault:success'));
} else {
register_error(elgg_echo('profile:editdefault:fail'));
diff --git a/mod/profile/actions/editfield.php b/mod/profile/actions/editfield.php
new file mode 100644
index 000000000..c26dfa4d9
--- /dev/null
+++ b/mod/profile/actions/editfield.php
@@ -0,0 +1,21 @@
+<?php
+/**
+ * Elgg profile plugin edit default profile action
+ *
+ * @package ElggProfile
+ * @license http://www.gnu.org/licenses/old-licenses/gpl-2.0.html GNU Public License version 2
+ * @author Curverider Ltd <info@elgg.com>
+ * @copyright Curverider Ltd 2008-2010
+ * @link http://elgg.com/
+ */
+
+admin_gatekeeper();
+
+$field = get_input('field');
+$text = get_input('value');
+
+set_plugin_setting("admin_defined_profile_{$field}",$text,'profile');
+
+echo $text;
+
+exit; \ No newline at end of file
diff --git a/mod/profile/actions/reorder.php b/mod/profile/actions/reorder.php
new file mode 100644
index 000000000..a189b0513
--- /dev/null
+++ b/mod/profile/actions/reorder.php
@@ -0,0 +1,17 @@
+<?php
+/**
+ * Elgg profile plugin reorder fields
+ *
+ * @package ElggProfile
+ * @license http://www.gnu.org/licenses/old-licenses/gpl-2.0.html GNU Public License version 2
+ * @author Curverider Ltd <info@elgg.com>
+ * @copyright Curverider Ltd 2008-2010
+ * @link http://elgg.com/
+ */
+
+admin_gatekeeper();
+$ordering = get_input('fieldorder');
+//if (!empty($ordering))
+$result = set_plugin_setting('user_defined_fields',$ordering,'profile');
+
+exit; \ No newline at end of file
diff --git a/mod/profile/actions/resetdefaultprofile.php b/mod/profile/actions/resetdefaultprofile.php
index a6c90d4b7..4ee87dbf9 100644
--- a/mod/profile/actions/resetdefaultprofile.php
+++ b/mod/profile/actions/resetdefaultprofile.php
@@ -12,12 +12,12 @@
global $CONFIG;
admin_gatekeeper();
-$n = 0;
-while (get_plugin_setting("admin_defined_profile_$n", 'profile')) {
- set_plugin_setting("admin_defined_profile_$n", '', 'profile');
- set_plugin_setting("admin_defined_profile_type_$n", '', 'profile');
-
- $n++;
+if ($fieldlist = get_plugin_setting('user_defined_fields', 'profile')) {
+ $fieldlistarray = explode(',', $fieldlist);
+ foreach($fieldlistarray as $listitem) {
+ set_plugin_setting("admin_defined_profile_{$listitem}", '', 'profile');
+ set_plugin_setting("admin_defined_profile_type_{$listitem}", '', 'profile');
+ }
}
set_plugin_setting('user_defined_fields', FALSE, 'profile');
diff --git a/mod/profile/defaultprofile.php b/mod/profile/defaultprofile.php
index 55638ba02..34e0af2d3 100644
--- a/mod/profile/defaultprofile.php
+++ b/mod/profile/defaultprofile.php
@@ -1,7 +1,7 @@
<?php
/**
* Elgg profile index
- *
+ *
* @package ElggProfile
* @license http://www.gnu.org/licenses/old-licenses/gpl-2.0.html GNU Public License version 2
* @author Curverider Ltd <info@elgg.com>
@@ -19,31 +19,35 @@ $form = elgg_view('profile/editdefaultprofile');
set_context('search');
-
// List form elements
$n = 0;
$loaded_defaults = array();
-while ($translation = get_plugin_setting("admin_defined_profile_$n", 'profile'))
-{
- $type = get_plugin_setting("admin_defined_profile_type_$n", 'profile');
- $listing .= elgg_view("profile/", array('value' => $translation));
-
- $even_odd = ( 'odd' != $even_odd ) ? 'odd' : 'even';
-
- $listing .= "<p class=\"{$even_odd}\"><b>$translation: </b>";
- $listing .= elgg_view("output/{$type}",array('value' => " [$type]"));
- $listing .= "</p>";
-
- $n++;
+$items = array();
+if ($fieldlist = get_plugin_setting('user_defined_fields', 'profile')) {
+ $fieldlistarray = explode(',', $fieldlist);
+ foreach($fieldlistarray as $listitem) {
+ if ($translation = get_plugin_setting("admin_defined_profile_{$listitem}", 'profile')) {
+ $item = new stdClass;
+ $item->translation = $translation;
+ $item->shortname = $listitem;
+ $item->name = "admin_defined_profile_{$listitem}";
+ $item->type = get_plugin_setting("admin_defined_profile_type_{$listitem}", 'profile');
+ $items[] = $item;
+ }
+ }
}
-$listing .= "<div class='default_profile_reset'>" . elgg_view('input/form',
- array(
- 'body' => elgg_view('input/submit', array('value' => elgg_echo('profile:resetdefault'),'class' => 'action_button disabled')),
- 'action' => $CONFIG->wwwroot . 'action/profile/editdefault/reset'
- )
-) . "</div>";
+$listing = elgg_view('profile/editdefaultprofileitems',array('items' => $items, 'fieldlist' => $fieldlist));
+
+$listing .= elgg_view('input/form',
+ array (
+ 'body' => elgg_view('input/submit', array('value' => elgg_echo('profile:resetdefault'))),
+ 'action' => $CONFIG->wwwroot . 'action/profile/editdefault/reset'
+ )
+ );
set_context('admin');
-
-page_draw(elgg_echo('profile:edit:default'),elgg_view_layout("one_column_with_sidebar", $title . $form . $listing)); \ No newline at end of file
+
+$body = elgg_view_layout("one_column_with_sidebar", $title . $form . $listing);
+
+page_draw(elgg_echo('profile:edit:default'), $body); \ No newline at end of file
diff --git a/mod/profile/graphics/drag_handle.png b/mod/profile/graphics/drag_handle.png
new file mode 100644
index 000000000..2e9bc42be
--- /dev/null
+++ b/mod/profile/graphics/drag_handle.png
Binary files differ
diff --git a/mod/profile/languages/en.php b/mod/profile/languages/en.php
index 7430f9596..dedcdcd97 100644
--- a/mod/profile/languages/en.php
+++ b/mod/profile/languages/en.php
@@ -10,7 +10,7 @@ $english = array(
*/
'profile' => "Profile",
- 'profile:edit:default' => 'Replace profile fields',
+ 'profile:edit:default' => 'Profile fields',
'profile:preview' => 'Preview',
/**
@@ -72,12 +72,12 @@ $english = array(
'profile:saved' => "Your profile was successfully saved.",
'profile:icon:uploaded' => "Your profile picture was successfully uploaded.",
-
+
/**
* Profile comment wall
**/
- 'profile:commentwall:add' => "Add to the wall",
- 'profile:commentwall:posted' => "You successfully posted on the comment wall.",
+ 'profile:commentwall:add' => "Add to the wall",
+ 'profile:commentwall:posted' => "You successfully posted on the comment wall.",
'profile:commentwall:deleted' => "You successfully deleted the message.",
'profile:commentwall:blank' => "Sorry; you need to actually put something in the message area before we can save it.",
'profile:commentwall:notfound' => "Sorry; we could not find the specified item.",
@@ -85,15 +85,15 @@ $english = array(
'profile:commentwall:none' => "No comment wall posts found.",
'profile:commentwall:somethingwentwrong' => "Something went wrong when trying to save your message, make sure you actually wrote a message.",
'profile:commentwall:failure' => "An unexpected error occurred when adding your message. Please try again.",
-
+
/**
* Email messages commentwall
*/
-
+
'profile:comment:subject' => 'You have a new message board comment!',
'profile:comment:body' => "You have a new message board comment from %s. It reads:
-
+
%s
diff --git a/mod/profile/manifest.xml b/mod/profile/manifest.xml
index 2f53eae0d..902292379 100644
--- a/mod/profile/manifest.xml
+++ b/mod/profile/manifest.xml
@@ -1,7 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?>
<plugin_manifest>
<field key="author" value="Curverider ltd" />
- <field key="version" value="1.7" />
+ <field key="version" value="1.8" />
+ <field key="category" value="bundled" />
+ <field key="category" value="social" />
<field key="description" value="Elgg profile plugin." />
<field key="website" value="http://www.elgg.org/" />
<field key="copyright" value="(C) Curverider 2008-2010" />
diff --git a/mod/profile/start.php b/mod/profile/start.php
index 13ddf3188..e08243818 100644
--- a/mod/profile/start.php
+++ b/mod/profile/start.php
@@ -295,5 +295,6 @@ register_action("profile/cropicon",false,$CONFIG->pluginspath . "profile/actions
register_action("profile/editdefault",false,$CONFIG->pluginspath . "profile/actions/editdefault.php", true);
register_action("profile/editdefault/delete",false,$CONFIG->pluginspath . "profile/actions/deletedefaultprofileitem.php", true);
register_action("profile/editdefault/reset",false,$CONFIG->pluginspath . "profile/actions/resetdefaultprofile.php", true);
+register_action("profile/editdefault/reorder",false,$CONFIG->pluginspath . "profile/actions/reorder.php", true);
register_action("profile/addcomment",false,$CONFIG->pluginspath . "profile/actions/addcomment.php");
register_action("profile/deletecomment",false,$CONFIG->pluginspath . "profile/actions/deletecomment.php"); \ No newline at end of file
diff --git a/mod/profile/vendor/jq.editable.min.js b/mod/profile/vendor/jq.editable.min.js
new file mode 100644
index 000000000..28bf89d3a
--- /dev/null
+++ b/mod/profile/vendor/jq.editable.min.js
@@ -0,0 +1,10 @@
+/*
+ * Editable 1.3.3
+ *
+ * Copyright (c) 2009 Arash Karimzadeh (arashkarimzadeh.com)
+ * Licensed under the MIT (MIT-LICENSE.txt)
+ * http://www.opensource.org/licenses/mit-license.php
+ *
+ * Date: Mar 02 2009
+ */
+(function($){$.fn.editable=function(options){var defaults={onEdit:null,onSubmit:null,onCancel:null,editClass:null,submit:null,cancel:null,type:"text",submitBy:"blur",editBy:"click",options:null};if(options=="disable"){return this.unbind(this.data("editable.options").editBy,this.data("editable.options").toEditable)}if(options=="enable"){return this.bind(this.data("editable.options").editBy,this.data("editable.options").toEditable)}if(options=="destroy"){return this.unbind(this.data("editable.options").editBy,this.data("editable.options").toEditable).data("editable.previous",null).data("editable.current",null).data("editable.options",null)}var options=$.extend(defaults,options);options.toEditable=function(){$this=$(this);$this.data("editable.current",$this.html());opts=$this.data("editable.options");$.editableFactory[opts.type].toEditable($this.empty(),opts);$this.data("editable.previous",$this.data("editable.current")).children().focus().addClass(opts.editClass);if(opts.submit){$("<button/>").appendTo($this).html(opts.submit).one("mouseup",function(){opts.toNonEditable($(this).parent(),true)})}else{$this.one(opts.submitBy,function(){opts.toNonEditable($(this),true)}).children().one(opts.submitBy,function(){opts.toNonEditable($(this).parent(),true)})}if(opts.cancel){$("<button/>").appendTo($this).html(opts.cancel).one("mouseup",function(){opts.toNonEditable($(this).parent(),false)})}if($.isFunction(opts.onEdit)){opts.onEdit.apply($this,[{current:$this.data("editable.current"),previous:$this.data("editable.previous")}])}};options.toNonEditable=function($this,change){opts=$this.data("editable.options");$this.one(opts.editBy,opts.toEditable).data("editable.current",change?$.editableFactory[opts.type].getValue($this,opts):$this.data("editable.current")).html(opts.type=="password"?"*****":$this.data("editable.current"));var func=null;if($.isFunction(opts.onSubmit)&&change==true){func=opts.onSubmit}else{if($.isFunction(opts.onCancel)&&change==false){func=opts.onCancel}}if(func!=null){func.apply($this,[{current:$this.data("editable.current"),previous:$this.data("editable.previous")}])}};this.data("editable.options",options);return this.one(options.editBy,options.toEditable)};$.editableFactory={text:{toEditable:function($this,options){$("<input/>").appendTo($this).val($this.data("editable.current"))},getValue:function($this,options){return $this.children().val()}},password:{toEditable:function($this,options){$this.data("editable.current",$this.data("editable.password"));$this.data("editable.previous",$this.data("editable.password"));$('<input type="password"/>').appendTo($this).val($this.data("editable.current"))},getValue:function($this,options){$this.data("editable.password",$this.children().val());return $this.children().val()}},textarea:{toEditable:function($this,options){$("<textarea/>").appendTo($this).val($this.data("editable.current"))},getValue:function($this,options){return $this.children().val()}},select:{toEditable:function($this,options){$select=$("<select/>").appendTo($this);$.each(options.options,function(key,value){$("<option/>").appendTo($select).html(value).attr("value",key)});$select.children().each(function(){var opt=$(this);if(opt.text()==$this.data("editable.current")){return opt.attr("selected","selected").text()}})},getValue:function($this,options){var item=null;$("select",$this).children().each(function(){if($(this).attr("selected")){return item=$(this).text()}});return item}}}})(jQuery); \ No newline at end of file
diff --git a/mod/profile/views/default/profile/editdefaultprofile.php b/mod/profile/views/default/profile/editdefaultprofile.php
index 338204d36..ae05e6da1 100644
--- a/mod/profile/views/default/profile/editdefaultprofile.php
+++ b/mod/profile/views/default/profile/editdefaultprofile.php
@@ -20,9 +20,9 @@ $type_control = elgg_view('input/pulldown', array('internalname' => 'type', 'opt
'url' => elgg_echo('url'),
'email' => elgg_echo('email')
)));
-
-$submit_control = elgg_view('input/submit', array('internalname' => elgg_echo('save'), 'value' => elgg_echo('Add')));
-
+
+$submit_control = elgg_view('input/submit', array('internalname' => elgg_echo('add'), 'value' => elgg_echo('add')));
+
$formbody = <<< END
<p>$label_text: $label_control
$type_text: $type_control
diff --git a/mod/profile/views/default/profile/editdefaultprofileitems.php b/mod/profile/views/default/profile/editdefaultprofileitems.php
new file mode 100644
index 000000000..cfd15247a
--- /dev/null
+++ b/mod/profile/views/default/profile/editdefaultprofileitems.php
@@ -0,0 +1,68 @@
+<script language="javascript" type="text/javascript" src="<?php echo $vars['url']?>mod/profile/vendor/jq.editable.min.js"></script>
+<script language="javascript" type="text/javascript">
+var reorderURL = '<?php echo elgg_add_action_tokens_to_url($vars['url'] . 'action/profile/editdefault/reorder', FALSE); ?>';
+function sortCallback(event, ui) {
+ var orderArr = $('#sortableList').sortable('toArray');
+ var orderStr = orderArr.join(',');
+ console.log(orderArr);
+ console.log(orderStr);
+ jQuery.post(reorderURL, {'fieldorder': orderStr});
+}
+
+$(document).ready(function() {
+ $('#sortableList').sortable({
+ items: 'li',
+ handle: '.handle',
+ stop: sortCallback
+ });
+});
+
+</script>
+<script language="javascript" type="text/javascript" src="<?php echo $vars['url']; ?>mod/multiadmin/vendors/js/jquery.jeditable.js" ></script>
+
+<div id="list">
+ <ul id="sortableList">
+<?php
+
+ $save = elgg_echo('save');
+ $cancel = elgg_echo('cancel');
+
+ foreach($vars['items'] as $item) {
+ $url = elgg_add_action_tokens_to_url("{$vars['url']}action/profile/editdefault/editfield");
+ echo <<< END
+
+<script language="javascript" type="text/javascript">
+
+ $(function() {
+ $(".{$item->shortname}_editable").editable("$url", {
+ type : 'text',
+ submitdata: { _method: "post", 'field': '{$item->shortname}' },
+ onblur: 'submit',
+ width:'300px',
+ height:'none',
+ style:'display:inline;',
+ tooltip:'Click to edit label'
+ });
+ });
+
+</script>
+
+END;
+
+ echo elgg_view("profile/", array('value' => $item->translation));
+
+ //$even_odd = ( 'odd' != $even_odd ) ? 'odd' : 'even';
+ $url = elgg_add_action_tokens_to_url("{$vars['url']}action/profile/editdefault/delete?id={$item->shortname}");
+ echo "<li id=\"{$item->shortname}\"><div class=\"delete_note\" style=\"float:right\"><a href=\"$url\">" . elgg_echo('delete') . "</a></div>";
+ echo "<img width='16' height='16' class='handle' alt='move' title='Drag here to reorder this item' src='{$vars['url']}mod/profile/graphics/drag_handle.png'/>";
+ echo "<b class=\"profile_field_editable\"><span class=\"{$item->shortname}_editable\">$item->translation</span></b>: [".elgg_echo($item->type)."]";
+ echo "</li>";
+
+ }
+
+?>
+ </ul>
+</div>
+<div id="tempList"></div>
+
+<input name="sortableListOrder" type="hidden" id="sortableListOrder" value="<?php echo $vars['fieldlist']; ?>" />