diff options
author | brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544> | 2010-04-07 16:11:29 +0000 |
---|---|---|
committer | brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544> | 2010-04-07 16:11:29 +0000 |
commit | 68f2c92868ddf477568c1dcbe6c58bc2f3375d33 (patch) | |
tree | 8ffa8b835182154aa3793f479d1834064c411ab9 /mod/profile | |
parent | 002f788efcd57f43a7347c12273779a163d2920a (diff) | |
download | elgg-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.php | 20 | ||||
-rw-r--r-- | mod/profile/actions/editdefault.php | 20 | ||||
-rw-r--r-- | mod/profile/actions/editfield.php | 21 | ||||
-rw-r--r-- | mod/profile/actions/reorder.php | 17 | ||||
-rw-r--r-- | mod/profile/actions/resetdefaultprofile.php | 12 | ||||
-rw-r--r-- | mod/profile/defaultprofile.php | 48 | ||||
-rw-r--r-- | mod/profile/graphics/drag_handle.png | bin | 0 -> 594 bytes | |||
-rw-r--r-- | mod/profile/languages/en.php | 14 | ||||
-rw-r--r-- | mod/profile/manifest.xml | 4 | ||||
-rw-r--r-- | mod/profile/start.php | 1 | ||||
-rw-r--r-- | mod/profile/vendor/jq.editable.min.js | 10 | ||||
-rw-r--r-- | mod/profile/views/default/profile/editdefaultprofile.php | 6 | ||||
-rw-r--r-- | mod/profile/views/default/profile/editdefaultprofileitems.php | 68 |
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 Binary files differnew file mode 100644 index 000000000..2e9bc42be --- /dev/null +++ b/mod/profile/graphics/drag_handle.png 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']; ?>" />
|