]> git.mxchange.org Git - quix0rs-gnu-social.git/blobdiff - plugins/Poll/PollPlugin.php
Stylesheet event now removed of StatusNet-remnants
[quix0rs-gnu-social.git] / plugins / Poll / PollPlugin.php
index 78357457a67284dd19c5156b6c08bc8133e7c619..a6292032c51b7cdc41205ff31bec7cd7c10d1bae 100644 (file)
@@ -64,6 +64,7 @@ class PollPlugin extends MicroAppPlugin
         $schema = Schema::get();
         $schema->ensureTable('poll', Poll::schemaDef());
         $schema->ensureTable('poll_response', Poll_response::schemaDef());
+        $schema->ensureTable('user_poll_prefs', User_poll_prefs::schemaDef());
         return true;
     }
 
@@ -80,38 +81,6 @@ class PollPlugin extends MicroAppPlugin
         return true;
     }
 
-    /**
-     * Load related modules when needed
-     *
-     * @param string $cls Name of the class to be loaded
-     *
-     * @return boolean hook value; true means continue processing, false means stop.
-     */
-    function onAutoload($cls)
-    {
-        $dir = dirname(__FILE__);
-
-        switch ($cls)
-        {
-        case 'ShowpollAction':
-        case 'NewpollAction':
-        case 'RespondpollAction':
-            include_once $dir . '/' . strtolower(mb_substr($cls, 0, -6)) . '.php';
-            return false;
-        case 'Poll':
-        case 'Poll_response':
-            include_once $dir.'/'.$cls.'.php';
-            return false;
-        case 'NewPollForm':
-        case 'PollResponseForm':
-        case 'PollResultForm':
-            include_once $dir.'/'.strtolower($cls).'.php';
-            return false;
-        default:
-            return true;
-        }
-    }
-
     /**
      * Map URLs to actions
      *
@@ -136,6 +105,9 @@ class PollPlugin extends MicroAppPlugin
                     array('action' => 'respondpoll'),
                     array('id' => '[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}'));
 
+        $m->connect('settings/poll',
+                    array('action' => 'pollsettings'));
+
         return true;
     }
 
@@ -203,26 +175,22 @@ class PollPlugin extends MicroAppPlugin
             $pollElements = $activity->entry->getElementsByTagNameNS(self::POLL_OBJECT, 'poll');
             $responseElements = $activity->entry->getElementsByTagNameNS(self::POLL_OBJECT, 'response');
             if ($pollElements->length) {
-                $data = $pollElements->item(0);
-                $question = $data->getAttribute('question');
+                $question = '';
                 $opts = array();
-                foreach ($data->attributes as $node) {
-                    $name = $node->nodeName;
-                    if (substr($name, 0, 6) == 'option') {
-                        $n = intval(substr($name, 6));
-                        if ($n > 0) {
-                            $opts[$n - 1] = $node->nodeValue;
-                        }
-                    }
+
+                $data = $pollElements->item(0);
+                foreach ($data->getElementsByTagNameNS(self::POLL_OBJECT, 'question') as $node) {
+                    $question = $node->textContent;
+                }
+                foreach ($data->getElementsByTagNameNS(self::POLL_OBJECT, 'option') as $node) {
+                    $opts[] = $node->textContent;
                 }
-                common_log(LOG_DEBUG, "YYY question: $question");
-                common_log(LOG_DEBUG, "YYY opts: " . var_export($opts, true));
                 try {
                     $notice = Poll::saveNew($profile, $question, $opts, $options);
-                    common_log(LOG_DEBUG, "YYY ok: " . $notice->id);
+                    common_log(LOG_DEBUG, "Saved Poll from ActivityStream data ok: notice id " . $notice->id);
                     return $notice;
                 } catch (Exception $e) {
-                    common_log(LOG_DEBUG, "YYY fail: " . $e->getMessage());
+                    common_log(LOG_DEBUG, "Poll save from ActivityStream data failed: " . $e->getMessage());
                 }
             } else if ($responseElements->length) {
                 $data = $responseElements->item(0);
@@ -231,19 +199,19 @@ class PollPlugin extends MicroAppPlugin
 
                 if (!$pollUri) {
                     // TRANS: Exception thrown trying to respond to a poll without a poll reference.
-                    throw new Exception(_m('Invalid poll response: no poll reference.'));
+                    throw new Exception(_m('Invalid poll response: No poll reference.'));
                 }
-                $poll = Poll::staticGet('uri', $pollUri);
+                $poll = Poll::getKV('uri', $pollUri);
                 if (!$poll) {
                     // TRANS: Exception thrown trying to respond to a non-existing poll.
-                    throw new Exception(_m('Invalid poll response: poll is unknown.'));
+                    throw new Exception(_m('Invalid poll response: Poll is unknown.'));
                 }
                 try {
                     $notice = Poll_response::saveNew($profile, $poll, $selection, $options);
-                    common_log(LOG_DEBUG, "YYY response ok: " . $notice->id);
+                    common_log(LOG_DEBUG, "Saved Poll_response ok, notice id: " . $notice->id);
                     return $notice;
                 } catch (Exception $e) {
-                    common_log(LOG_DEBUG, "YYY response fail: " . $e->getMessage());
+                    common_log(LOG_DEBUG, "Poll response  save fail: " . $e->getMessage());
                 }
             } else {
                 common_log(LOG_DEBUG, "YYY no poll data");
@@ -262,7 +230,7 @@ class PollPlugin extends MicroAppPlugin
             return $this->activityObjectFromNoticePollResponse($notice);
         default:
             // TRANS: Exception thrown when performing an unexpected action on a poll.
-            // TRANS: %s is the unpexpected object type.
+            // TRANS: %s is the unexpected object type.
             throw new Exception(sprintf(_m('Unexpected type for poll plugin: %s.'), $notice->object_type));
         }
     }
@@ -271,7 +239,7 @@ class PollPlugin extends MicroAppPlugin
     {
         $object = new ActivityObject();
         $object->id      = $notice->uri;
-        $object->type    = self::POLL_OBJECT;
+        $object->type    = self::POLL_RESPONSE_OBJECT;
         $object->title   = $notice->content;
         $object->summary = $notice->content;
         $object->link    = $notice->bestUrl();
@@ -294,7 +262,7 @@ class PollPlugin extends MicroAppPlugin
     {
         $object = new ActivityObject();
         $object->id      = $notice->uri;
-        $object->type    = self::POLL_RESPONSE_OBJECT;
+        $object->type    = self::POLL_OBJECT;
         $object->title   = $notice->content;
         $object->summary = $notice->content;
         $object->link    = $notice->bestUrl();
@@ -420,7 +388,7 @@ class PollPlugin extends MicroAppPlugin
             return $this->showNoticePollResponse($notice, $out);
         default:
             // TRANS: Exception thrown when performing an unexpected action on a poll.
-            // TRANS: %s is the unpexpected object type.
+            // TRANS: %s is the unexpected object type.
             throw new Exception(sprintf(_m('Unexpected type for poll plugin: %s.'), $notice->object_type));
         }
     }
@@ -448,7 +416,8 @@ class PollPlugin extends MicroAppPlugin
                 $form->show();
             }
         } else {
-            $out->text(_('Poll data is missing'));
+            // TRANS: Error text displayed if no poll data could be found.
+            $out->text(_m('Poll data is missing'));
         }
         $out->elementEnd('div');
 
@@ -484,4 +453,53 @@ class PollPlugin extends MicroAppPlugin
         // TRANS: Application title.
         return _m('APPTITLE','Poll');
     }
+
+    function onStartAddNoticeReply($nli, $parent, $child)
+    {
+        // Filter out any poll responses
+        if ($parent->object_type == self::POLL_OBJECT &&
+            $child->object_type == self::POLL_RESPONSE_OBJECT) {
+            return false;
+        }
+        return true;
+    }
+
+    // Hide poll responses for @chuck
+
+    function onEndNoticeWhoGets($notice, &$ni) {
+        if ($notice->object_type == self::POLL_RESPONSE_OBJECT) {
+            foreach ($ni as $id => $source) {
+                $user = User::getKV('id', $id);
+                if (!empty($user)) {
+                    $pollPrefs = User_poll_prefs::getKV('user_id', $user->id);
+                    if (!empty($pollPrefs) && ($pollPrefs->hide_responses)) {
+                        unset($ni[$id]);
+                    }
+                }
+            }
+        }
+        return true;
+    }
+
+    /**
+     * Menu item for personal subscriptions/groups area
+     *
+     * @param Action $action action being executed
+     *
+     * @return boolean hook return
+     */
+
+    function onEndAccountSettingsNav($action)
+    {
+        $action_name = $action->trimmed('action');
+
+        $action->menuItem(common_local_url('pollsettings'),
+                          // TRANS: Poll plugin menu item on user settings page.
+                          _m('MENU', 'Polls'),
+                          // TRANS: Poll plugin tooltip for user settings menu item.
+                          _m('Configure poll behavior'),
+                          $action_name === 'pollsettings');
+
+        return true;
+    }
 }