]> git.mxchange.org Git - quix0rs-gnu-social.git/blobdiff - plugins/Poll/PollPlugin.php
plugins onAutoload now only overloads if necessary (extlibs etc.)
[quix0rs-gnu-social.git] / plugins / Poll / PollPlugin.php
index ea6ab9ecd99170a13eeee02191748454975162e5..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;
     }
 
@@ -227,12 +199,12 @@ 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);
@@ -258,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));
         }
     }
@@ -267,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();
@@ -290,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();
@@ -416,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));
         }
     }
@@ -444,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');
 
@@ -480,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;
+    }
 }