]> gitweb.fluxo.info Git - lorea/elgg.git/commitdiff
First go at merging in draggable profile fields.
authorbrettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
Wed, 7 Apr 2010 16:11:29 +0000 (16:11 +0000)
committerbrettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
Wed, 7 Apr 2010 16:11:29 +0000 (16:11 +0000)
Added categories to profile plugin.

git-svn-id: http://code.elgg.org/elgg/trunk@5652 36083f99-b078-4883-b0ff-0f9b5a30f544

13 files changed:
mod/profile/actions/deletedefaultprofileitem.php
mod/profile/actions/editdefault.php
mod/profile/actions/editfield.php [new file with mode: 0644]
mod/profile/actions/reorder.php [new file with mode: 0644]
mod/profile/actions/resetdefaultprofile.php
mod/profile/defaultprofile.php
mod/profile/graphics/drag_handle.png [new file with mode: 0644]
mod/profile/languages/en.php
mod/profile/manifest.xml
mod/profile/start.php
mod/profile/vendor/jq.editable.min.js [new file with mode: 0644]
mod/profile/views/default/profile/editdefaultprofile.php
mod/profile/views/default/profile/editdefaultprofileitems.php [new file with mode: 0644]

index b5b2eba84e1e6863cc6392b6dc84f60e3d37e86b..7d431020d224ba3f875f424f1baa0875d0c27af0 100644 (file)
@@ -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>
 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'));
index 7f5fe00049692cac14887d012dfb91303ad8c037..70e3b5cd84a418674d75c7c3ade143fe541c65be 100644 (file)
@@ -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 (file)
index 0000000..c26dfa4
--- /dev/null
@@ -0,0 +1,21 @@
+<?php\r
+/**\r
+ * Elgg profile plugin edit default profile action\r
+ *\r
+ * @package ElggProfile\r
+ * @license http://www.gnu.org/licenses/old-licenses/gpl-2.0.html GNU Public License version 2\r
+ * @author Curverider Ltd <info@elgg.com>\r
+ * @copyright Curverider Ltd 2008-2010\r
+ * @link http://elgg.com/\r
+ */\r
+\r
+admin_gatekeeper();\r
+\r
+$field = get_input('field');\r
+$text = get_input('value');\r
+\r
+set_plugin_setting("admin_defined_profile_{$field}",$text,'profile');\r
+\r
+echo $text;\r
+\r
+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 (file)
index 0000000..a189b05
--- /dev/null
@@ -0,0 +1,17 @@
+<?php\r
+/**\r
+ * Elgg profile plugin reorder fields\r
+ *\r
+ * @package ElggProfile\r
+ * @license http://www.gnu.org/licenses/old-licenses/gpl-2.0.html GNU Public License version 2\r
+ * @author Curverider Ltd <info@elgg.com>\r
+ * @copyright Curverider Ltd 2008-2010\r
+ * @link http://elgg.com/\r
+ */\r
+\r
+admin_gatekeeper();\r
+$ordering = get_input('fieldorder');\r
+//if (!empty($ordering))\r
+$result = set_plugin_setting('user_defined_fields',$ordering,'profile');\r
+\r
+exit;
\ No newline at end of file
index a6c90d4b77c92ba1194d99774c01b56bef24b251..4ee87dbf93129fe5e80d749c21718c1ea9e4ffec 100644 (file)
 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');
index 55638ba0294152cd4ce0abb1dbc65010c4732d6e..34e0af2d32b73d398c992e8e7fd707dd693a00a2 100644 (file)
@@ -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 (file)
index 0000000..2e9bc42
Binary files /dev/null and b/mod/profile/graphics/drag_handle.png differ
index 7430f95960e848a4a07e39ac92570d58c95ecc57..dedcdcd9733cf189ecbd8d0790c93eb3d53ddaeb 100644 (file)
@@ -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
 
 
index 2f53eae0d497d79ef935b451cd08c20b147ea9d7..902292379716f992211e988ccbb7564aa5dd8316 100644 (file)
@@ -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" />
index 13ddf3188be5702ab3549b8f8c3030da3637d430..e08243818a3412b25e0fed701fca8dd12671eed8 100644 (file)
@@ -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 (file)
index 0000000..28bf89d
--- /dev/null
@@ -0,0 +1,10 @@
+/*\r
+ * Editable 1.3.3\r
+ *\r
+ * Copyright (c) 2009 Arash Karimzadeh (arashkarimzadeh.com)\r
+ * Licensed under the MIT (MIT-LICENSE.txt)\r
+ * http://www.opensource.org/licenses/mit-license.php\r
+ *\r
+ * Date: Mar 02 2009\r
+ */\r
+(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
index 338204d36f17abfedfa15598d130e9cd0dd9fbcd..ae05e6da1e894c7bec8ac9d82e3e5763f0ccde00 100644 (file)
@@ -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 (file)
index 0000000..cfd1524
--- /dev/null
@@ -0,0 +1,68 @@
+<script language="javascript" type="text/javascript" src="<?php echo $vars['url']?>mod/profile/vendor/jq.editable.min.js"></script>\r
+<script language="javascript" type="text/javascript">\r
+var reorderURL = '<?php echo elgg_add_action_tokens_to_url($vars['url'] . 'action/profile/editdefault/reorder', FALSE); ?>';\r
+function sortCallback(event, ui) {\r
+       var orderArr = $('#sortableList').sortable('toArray');\r
+       var orderStr = orderArr.join(',');\r
+       console.log(orderArr);\r
+       console.log(orderStr);\r
+       jQuery.post(reorderURL, {'fieldorder': orderStr});\r
+}\r
+\r
+$(document).ready(function() {\r
+       $('#sortableList').sortable({\r
+               items: 'li',\r
+               handle: '.handle',\r
+               stop: sortCallback\r
+       });\r
+});\r
+\r
+</script>\r
+<script language="javascript" type="text/javascript" src="<?php echo $vars['url']; ?>mod/multiadmin/vendors/js/jquery.jeditable.js" ></script>\r
+\r
+<div id="list">\r
+       <ul id="sortableList">\r
+<?php\r
+\r
+       $save = elgg_echo('save');\r
+       $cancel = elgg_echo('cancel');\r
+\r
+       foreach($vars['items'] as $item) {\r
+               $url = elgg_add_action_tokens_to_url("{$vars['url']}action/profile/editdefault/editfield");\r
+               echo <<< END\r
+\r
+<script language="javascript" type="text/javascript">\r
+\r
+       $(function() {\r
+               $(".{$item->shortname}_editable").editable("$url", {\r
+                       type   : 'text',\r
+                       submitdata: { _method: "post", 'field': '{$item->shortname}' },\r
+                       onblur: 'submit',\r
+                       width:'300px',\r
+                       height:'none',\r
+                       style:'display:inline;',\r
+                       tooltip:'Click to edit label'\r
+               });\r
+       });\r
+\r
+</script>\r
+\r
+END;\r
+\r
+               echo elgg_view("profile/", array('value' => $item->translation));\r
+\r
+               //$even_odd = ( 'odd' != $even_odd ) ? 'odd' : 'even';\r
+               $url = elgg_add_action_tokens_to_url("{$vars['url']}action/profile/editdefault/delete?id={$item->shortname}");\r
+               echo "<li id=\"{$item->shortname}\"><div class=\"delete_note\" style=\"float:right\"><a href=\"$url\">" . elgg_echo('delete') . "</a></div>";\r
+               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'/>";\r
+               echo "<b class=\"profile_field_editable\"><span class=\"{$item->shortname}_editable\">$item->translation</span></b>:  [".elgg_echo($item->type)."]";\r
+               echo "</li>";\r
+\r
+       }\r
+\r
+?>\r
+       </ul>\r
+</div>\r
+<div id="tempList"></div>\r
+\r
+<input name="sortableListOrder" type="hidden" id="sortableListOrder" value="<?php echo $vars['fieldlist']; ?>" />\r