]> git.mxchange.org Git - quix0rs-gnu-social.git/commitdiff
Extended profile - more work on getting complex fields to save
authorZach Copley <zach@status.net>
Sun, 13 Mar 2011 23:32:13 +0000 (16:32 -0700)
committerZach Copley <zach@status.net>
Sun, 13 Mar 2011 23:32:13 +0000 (16:32 -0700)
plugins/ExtendedProfile/css/profiledetail.css [new file with mode: 0644]
plugins/ExtendedProfile/extendedprofile.php
plugins/ExtendedProfile/extendedprofilewidget.php
plugins/ExtendedProfile/js/profiledetail.js [new file with mode: 0644]
plugins/ExtendedProfile/profiledetail.css [deleted file]
plugins/ExtendedProfile/profiledetailsettingsaction.php

diff --git a/plugins/ExtendedProfile/css/profiledetail.css b/plugins/ExtendedProfile/css/profiledetail.css
new file mode 100644 (file)
index 0000000..836b647
--- /dev/null
@@ -0,0 +1,22 @@
+/* Note the #content is only needed to override weird crap in default styles */
+
+#content table.extended-profile {
+    width: 100%;
+    border-collapse: separate;
+    border-spacing: 8px;
+}
+#content table.extended-profile th {
+    color: #777;
+    background-color: #eee;
+    width: 150px;
+
+    padding-top: 0; /* override bizarre theme defaults */
+
+    text-align: right;
+    padding-right: 8px;
+}
+#content table.extended-profile td {
+    padding: 0; /* override bizarre theme defaults */
+
+    padding-left: 8px;
+}
\ No newline at end of file
index 2a10759d91718880f471c14fb1a0808389da1511..94a5ef482680ddf359000b2d4a0941799c7e0f2d 100644 (file)
@@ -106,6 +106,7 @@ class ExtendedProfile
         if (empty($phones)) {
             $pArrays[] = array(
                 'label' => _m('Phone'),
+                'index' => 0,
                 'type'  => 'phone',
                 'vcard' => 'tel',
                 'multi' => true
@@ -115,7 +116,7 @@ class ExtendedProfile
                 $pa = array(
                     'label' => _m('Phone'),
                     'type'  => 'phone',
-                    'index' => $phones[$i]->value_index,
+                    'index' => intva($phones[$i]->value_index),
                     'rel'   => $phones[$i]->rel,
                     'value' => $phones[$i]->field_value,
                     'vcard' => 'tel'
index d31a34b1e2a41704aa56d68e5155b4050bdcf840..7eb195e369f90cfde2c67e2c4e919e2b8b7445bd 100644 (file)
@@ -184,8 +184,12 @@ class ExtendedProfileWidget extends Form
         $index = $field['index'];
         $id    = "extprofile-$name-$index";
         $rel   = $id . '-rel';
-
-        $this->out->elementStart('div', array('class' => 'phone-edit'));
+        $this->out->elementStart(
+            'div', array(
+                'id' => $id . '-edit',
+                'class' => 'phone-edit'
+            )
+        );
         $this->out->input($id, null, $field['value']);
         $this->out->dropdown(
             $id . '-rel',
@@ -205,10 +209,19 @@ class ExtendedProfileWidget extends Form
             $this->out->element(
                 'a',
                 array(
-                    'name' => $name,
+                    'class' => 'add_row',
                     'href' => 'javascript://'),
                     '+'
                 );
+            $this->out->element(
+                'a',
+                array(
+                    'class' => 'remove_row',
+                    'href' => 'javascript://',
+                    'style' => 'display: none; '
+                    ),
+                    '-'
+                );
         }
         $this->out->elementEnd('div');
     }
diff --git a/plugins/ExtendedProfile/js/profiledetail.js b/plugins/ExtendedProfile/js/profiledetail.js
new file mode 100644 (file)
index 0000000..a021a32
--- /dev/null
@@ -0,0 +1,83 @@
+var removeRow = function() {
+    var cnt = rowCount(this);
+    var table = $(this).closest('table');
+    console.log("row count = " + cnt);
+    if (cnt > 1) {
+        var target = $(this).closest('tr');
+        target.remove();
+        reorder(table);
+    }
+};
+
+var rowCount = function(row) {
+    var top = $(row).closest('table');
+    var trs = $(top).find('tr');
+    return trs.length - 1; // exclude th section header row
+};
+
+var reorder = function(table) {
+    var trs = $(table).find('tr').has('td');
+
+    $(trs).find('a').hide();
+
+    $(trs).each(function(i, tr) {
+        console.log("ROW " + i);
+        $(tr).find('a.remove_row').show();
+        replaceIndex(rowIndex(tr), i);
+    });
+
+    $(trs).last().find('a.add_row').show();
+
+    if (trs.length == 1) {
+        $(trs).find('a.remove_row').hide();
+    }
+
+};
+
+var rowIndex = function(elem) {
+    var idStr = $(elem).find('div').attr('id');
+    var id = idStr.match(/\d+/);
+    console.log("id = " + id);
+};
+
+var replaceIndex = function(elem, oldIndex, newIndex) {
+    $(elem).find('*').each(function() {
+        $.each(this.attributes, function(i, attrib) {
+            var regexp = /extprofile-.*-\d.*/;
+            var value = attrib.value;
+            var match = value.match(regexp);
+            if (match != null) {
+                attrib.value = value.replace("-" + oldIndex, "-" + newIndex);
+                console.log('match: oldIndex = ' + oldIndex + ' newIndex = ' + newIndex + ' name = ' + attrib.name + ' value = ' + attrib.value);
+            }
+        });
+    });
+}
+
+var resetRow = function(elem) {
+    $(elem).find('input').attr('value', '');
+    $(elem).find("select option[value='office']").attr("selected", true);
+}
+
+var addRow = function() {
+    var divId = $(this).closest('div').attr('id');
+    var index = divId.match(/\d+/);
+    console.log("Current row = " + index);
+    var tr = $(this).closest('tr');
+    var newtr = $(tr).clone();
+    var newIndex = parseInt(index) + 1;
+    replaceIndex(newtr, index, newIndex);
+    resetRow(newtr);
+    $(tr).after(newtr);
+    console.log("number of rows: " + rowCount(tr));
+    reorder($(this).closest('table'));
+};
+
+$(document).ready(
+
+function() {
+    $('.add_row').live('click', addRow);
+    $('.remove_row').live('click', removeRow);
+}
+
+);
\ No newline at end of file
diff --git a/plugins/ExtendedProfile/profiledetail.css b/plugins/ExtendedProfile/profiledetail.css
deleted file mode 100644 (file)
index 836b647..0000000
+++ /dev/null
@@ -1,22 +0,0 @@
-/* Note the #content is only needed to override weird crap in default styles */
-
-#content table.extended-profile {
-    width: 100%;
-    border-collapse: separate;
-    border-spacing: 8px;
-}
-#content table.extended-profile th {
-    color: #777;
-    background-color: #eee;
-    width: 150px;
-
-    padding-top: 0; /* override bizarre theme defaults */
-
-    text-align: right;
-    padding-right: 8px;
-}
-#content table.extended-profile td {
-    padding: 0; /* override bizarre theme defaults */
-
-    padding-left: 8px;
-}
\ No newline at end of file
index ec2c4935a27c6d8a38dc0cde50e63379119e1609..ee450118c3d7f6eba3dbfd50181da19b6ed14649 100644 (file)
@@ -43,7 +43,13 @@ class ProfileDetailSettingsAction extends ProfileSettingsAction
 
     function showStylesheets() {
         parent::showStylesheets();
-        $this->cssLink('plugins/ExtendedProfile/profiledetail.css');
+        $this->cssLink('plugins/ExtendedProfile/css/profiledetail.css');
+        return true;
+    }
+
+    function  showScripts() {
+        parent::showScripts();
+        $this->script('plugins/ExtendedProfile/js/profiledetail.js');
         return true;
     }
 
@@ -133,7 +139,7 @@ class ProfileDetailSettingsAction extends ProfileSettingsAction
         $phoneTuples = array();
 
         foreach($phones as $phone) {
-            $firstkey           = array_shift(array_keys($phone));
+            $firstkey           = current(array_keys($phone));
             $index              = substr($firstkey, strrpos($firstkey, '-') + 1);
             list($number, $rel) = array_values($phone);
 
@@ -142,11 +148,9 @@ class ProfileDetailSettingsAction extends ProfileSettingsAction
                 'index' => $index,
                 'rel'   => $rel
             );
-
-            return $phoneTuples;
         }
 
-        return $phones;
+        return $phoneTuples;
     }
 
     function arraySplit($array, $pieces)
@@ -157,7 +161,7 @@ class ProfileDetailSettingsAction extends ProfileSettingsAction
 
         $newCount = ceil(count($array) / $pieces);
         $a = array_slice($array, 0, $newCount);
-        $b = array_split(array_slice($array, $newCount), $pieces - 1);
+        $b = $this->arraySplit(array_slice($array, $newCount), $pieces - 1);
 
         return array_merge(array($a), $b);
     }