Giter Club home page Giter Club logo

tabbie2's People

Contributors

chief-nerd avatar czlee avatar florianprischl avatar frijjoasis avatar jakobreiter avatar philipbelesky avatar rscoates avatar steroy avatar tienne-b avatar wanaryytel avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar

tabbie2's Issues

Prevent teams from issuing feedback for silent rounds

Apologies for the open ended feature request. I also don't have a dev environment working atm where I can replicate things so I'm adding this with 100% certainty that this already isn't the case and I've misunderstood something.

Anyway, from what I could tell from Dutch Worlds it seems like teams can enter feedback on their judges during silent rounds.

Initial migration fails with PostgreSQL

Taking note that this happens when I try to use PostgreSQL (as opposed to MySQL), I presume because PostgreSQL doesn't have the USE syntax. This is not a showstopper, I can use MySQL instead. (I was just curious to see what would happen.)

$ ./yii migrate
Yii Migration Tool (based on Yii v2.0.1-dev)

Total 1 new migration to be applied:
    m141024_133145_init_full_db

Apply the above migration? (yes|no) [no]:yes
*** applying m141024_133145_init_full_db
    > execute SQL: USE tabbie2; ...Exception 'yii\db\Exception' with message 'SQLSTATE[42601]: Syntax error: 7 ERROR:  syntax error at or near "USE"
LINE 1: USE tabbie2;
        ^
The SQL being executed was: USE tabbie2;'

in /home/czlee/git/tabbie2/tabbie2.git/vendor/yiisoft/yii2/db/Schema.php:532

Error Info:
Array
(
    [0] => 42601
    [1] => 7
    [2] => ERROR:  syntax error at or near "USE"
LINE 1: USE tabbie2;
        ^
)

Stack trace:
#0 /home/czlee/git/tabbie2/tabbie2.git/vendor/yiisoft/yii2/db/Command.php(776): yii\db\Schema->convertException(Object(PDOException), 'USE tabbie2;')
#1 /home/czlee/git/tabbie2/tabbie2.git/vendor/yiisoft/yii2/db/Migration.php(160): yii\db\Command->execute()
#2 /home/czlee/git/tabbie2/tabbie2.git/console/migrations/m141024_133145_init_full_db.php(13): yii\db\Migration->execute('USE tabbie2;')
#3 /home/czlee/git/tabbie2/tabbie2.git/vendor/yiisoft/yii2/console/controllers/BaseMigrateController.php(489): m141024_133145_init_full_db->up()
#4 /home/czlee/git/tabbie2/tabbie2.git/vendor/yiisoft/yii2/console/controllers/BaseMigrateController.php(126): yii\console\controllers\BaseMigrateController->migrateUp('m141024_133145_...')
#5 [internal function]: yii\console\controllers\BaseMigrateController->actionUp(0)
#6 /home/czlee/git/tabbie2/tabbie2.git/vendor/yiisoft/yii2/base/InlineAction.php(55): call_user_func_array(Array, Array)
#7 /home/czlee/git/tabbie2/tabbie2.git/vendor/yiisoft/yii2/base/Controller.php(151): yii\base\InlineAction->runWithParams(Array)
#8 /home/czlee/git/tabbie2/tabbie2.git/vendor/yiisoft/yii2/console/Controller.php(91): yii\base\Controller->runAction('', Array)
#9 /home/czlee/git/tabbie2/tabbie2.git/vendor/yiisoft/yii2/base/Module.php(455): yii\console\Controller->runAction('', Array)
#10 /home/czlee/git/tabbie2/tabbie2.git/vendor/yiisoft/yii2/console/Application.php(161): yii\base\Module->runAction('migrate', Array)
#11 /home/czlee/git/tabbie2/tabbie2.git/vendor/yiisoft/yii2/console/Application.php(137): yii\console\Application->runAction('migrate', Array)
#12 /home/czlee/git/tabbie2/tabbie2.git/vendor/yiisoft/yii2/base/Application.php(375): yii\console\Application->handleRequest(Object(yii\console\Request))
#13 /home/czlee/git/tabbie2/tabbie2.git/yii(31): yii\base\Application->run()
#14 {main}

Contents of main-local.php:

<?php

return [
    'components' => [
        'db' => [
            'class' => 'yii\db\Connection',
            'dsn' => 'pgsql:host=localhost;port=5432;dbname=tabbie2',
            'username' => '********',
            'password' => '********',
            'charset' => 'utf8',
        ],
        'mailer' => [
            'class' => 'yii\swiftmailer\Mailer',
            'viewPath' => '@common/mail',
            // send all mails to a file by default. You have to set
            // 'useFileTransport' to false and configure a transport
            // for the mailer to send real emails.
            'useFileTransport' => true,
        ],
    ],
];

Adjudicator import attempts to access ID of non-object after creation failure

This happened:

PHP Notice – yii\base\ErrorException
Trying to get property of non-object
in /var/www/virtual/tabbie/tabbie2/tabbie2.git/frontend/controllers/AdjudicatorController.php at line 362

    if (count($row[1]) == 1) { //NEW
        $userA = User::NewViaImport($row[1][0], $row[2][0], $row[3][0], $societyID, !$model->is_test, $tournament);
        $userAID = $userA->id;           // <------------ crashes at this line ------------
    } else if (count($row[1]) == 2) {
        $userAID = $row[1][1]["id"];
    } else {

The original failure was a user data error—I checked my import file again after the error and there was a trailing comma in the e-mail address of the offending line (which inferred from the $_SESSION variable on the debug page). I notice that User::NewViaImport returns false if there was a failure to create the object. While this occurs as a result of bad input, probably one might like it to fail a bit more gracefully, ideally explaining the original error if possible.

This also happened to me with importing teams (with the same root cause user error) but in that case it just showed a plain-text "internal server error" page without debug information, and continued to import all the other teams (even those that came after the error). In the adjudicators case, because it crashes immediately, all adjudicators from the offending line are not imported.

Messed up directory references

Any new local copy of Tabbie2 (at least on Windows based web servers) will spout garbled messes of directory references where half way through it will switch from forward to backward slashes.

Once init is completed the following folder is created:

(tabbie web install location)/vendor/bower-assets

Renaming that folder to

(tabbie web install location)/vendor/bower

Will resolve this problem.

Maybe the best way to do this would be to append to init.bat:
cd vendor
ren bower-assets bower

403 Errors for Adj Core

Hi,

Have just created a tournament, and am logged in as an Adj Core member. A number of pages within my tournament turn up 403 Forbidden errors, including "Create a Venue", "Import Venue",
"List Results", etc.

Attempting to import data also throws errors. For example, I get the following when I try to import team data:

Exception
Swift_TransportException

Failed to authenticate on SMTP server with username "[email protected]" using 2 possible authenticators
1. in /var/www/virtual/tabbie/tabbie2/tabbie2.git/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Transport/Esmtp/AuthHandler.php at line 181
172173174175176177178179180181182183184185186187188189190            foreach ($this->_getAuthenticatorsForAgent() as $authenticator) {
                if (in_array(strtolower($authenticator->getAuthKeyword()),
                    array_map('strtolower', $this->_esmtpParams))) {
                    ++$count;
                    if ($authenticator->authenticate($agent, $this->_username, $this->_password)) {
                        return;
                    }
                }
            }
            throw new Swift_TransportException(
                'Failed to authenticate on SMTP server with username "'.
                $this->_username.'" using '.$count.' possible authenticators'
                );
        }
    }
 
    /**
     * Not used.
     */
2. in /var/www/virtual/tabbie/tabbie2/tabbie2.git/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Transport/EsmtpTransport.php at line 334 – Swift_Transport_Esmtp_AuthHandler::afterEhlo(Swift_SmtpTransport)
328329330331332333334335336337338339340            }
        }
 
        $this->_capabilities = $this->_getCapabilities($response);
        $this->_setHandlerParams();
        foreach ($this->_getActiveHandlers() as $handler) {
            $handler->afterEhlo($this);
        }
    }
 
    /** Overridden to add Extension support */
    protected function _doMailFromCommand($address)
    {
3. in /var/www/virtual/tabbie/tabbie2/tabbie2.git/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Transport/AbstractSmtpTransport.php at line 118 – Swift_Transport_EsmtpTransport::_doHeloCommand()
112113114115116117118119120121122123124            try {
                $this->_buffer->initialize($this->_getBufferParams());
            } catch (Swift_TransportException $e) {
                $this->_throwException($e);
            }
            $this->_readGreeting();
            $this->_doHeloCommand();
 
            if ($evt) {
                $this->_eventDispatcher->dispatchEvent($evt, 'transportStarted');
            }
 
            $this->_started = true;
4. in /var/www/virtual/tabbie/tabbie2/tabbie2.git/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mailer.php at line 79 – Swift_Transport_AbstractSmtpTransport::start()
73747576777879808182838485     */
    public function send(Swift_Mime_Message $message, &$failedRecipients = null)
    {
        $failedRecipients = (array) $failedRecipients;
 
        if (!$this->_transport->isStarted()) {
            $this->_transport->start();
        }
 
        $sent = 0;
 
        try {
            $sent = $this->_transport->send($message, $failedRecipients);
5. in /var/www/virtual/tabbie/tabbie2/tabbie2.git/vendor/yiisoft/yii2-swiftmailer/Mailer.php at line 146 – Swift_Mailer::send(Swift_Message)
140141142143144145146147148149150151152        $address = $message->getTo();
        if (is_array($address)) {
            $address = implode(', ', array_keys($address));
        }
        Yii::info('Sending email "' . $message->getSubject() . '" to "' . $address . '"', __METHOD__);
 
        return $this->getSwiftMailer()->send($message->getSwiftMessage()) > 0;
    }
 
    /**
     * Creates Swift mailer instance.
     * @return \Swift_Mailer mailer instance.
     */
6. in /var/www/virtual/tabbie/tabbie2/tabbie2.git/vendor/yiisoft/yii2/mail/BaseMailer.php at line 260 – yii\swiftmailer\Mailer::sendMessage(yii\swiftmailer\Message)
7. in /var/www/virtual/tabbie/tabbie2/tabbie2.git/vendor/yiisoft/yii2/mail/BaseMessage.php at line 48 – yii\mail\BaseMailer::send(yii\swiftmailer\Message)
8. in /var/www/virtual/tabbie/tabbie2/tabbie2.git/common/models/User.php at line 464 – yii\mail\BaseMessage::send()
458459460461462463464465466467468469470            'tournament' => $tournament
        ])->setFrom([\Yii::$app->params['supportEmail'] => \Yii::$app->params["appName"] . ' support'])
            ->setTo([$user->email => $user->name])
            ->setSubject(Yii::t("app", '{tournament_name}: User Account for {user_name}', [
                "tournament_name" => $tournament->name,
                "user_name" => $user->name]))
            ->send();
    }
 
    public static function languageOptions()
    {
        return Yii::$app->params['activeLanguages'];
    }
9. in /var/www/virtual/tabbie/tabbie2/tabbie2.git/common/models/User.php at line 402 – common\models\User::sendNewUserMail(common\models\User, '33112', common\models\Tournament)
396397398399400401402403404405406407408                    Yii::error("Import Errors inSociety: " . print_r($inSociety->getErrors(), true), __METHOD__);
                    Yii::$app->session->addFlash("error", Yii::t("app", "Error saving InSociety Relation for {user_name}", ["user_name" => $userA->username]));
                }
            }
 
            if ($send_mail) {
                self::sendNewUserMail($userA, $password, $tournament);
            }
 
            return $userA;
        } else {
            Yii::error("Import Errors userA: " . print_r($userA->getErrors(), true), __METHOD__);
            Yii::$app->session->addFlash("error", Yii::t("app", "Error Saving User {user_name}", ["user_name" => $userA->name]));
10. in /var/www/virtual/tabbie/tabbie2/tabbie2.git/frontend/controllers/TeamController.php at line 300 – common\models\User::NewViaImport('First', 'Last', '[email protected]', '4030', ...)
294295296297298299300301302303304305306                    }
 
                    //**** User A *****/
                    $userAID = null;
                    if (count($row[2]) == 1) { //NEW
                        if ($row[2][0] != "" && $row[3][0] != "" && $row[4][0] != "") {
                            $userA = User::NewViaImport($row[2][0], $row[3][0], $row[4][0], $societyID, !$model->is_test, $this->_tournament);
                            if ($userA)
                                $userAID = $userA->id;
                            unset($userA); //free memory
                        }
                    } else if (count($row[2]) == 2) {
                        $userAID = $row[2][1]["id"];
11. frontend\controllers\TeamController::actionImport()
12. in /var/www/virtual/tabbie/tabbie2/tabbie2.git/vendor/yiisoft/yii2/base/InlineAction.php at line 55 – call_user_func_array([frontend\controllers\TeamController, 'actionImport'], [])
13. in /var/www/virtual/tabbie/tabbie2/tabbie2.git/vendor/yiisoft/yii2/base/Controller.php at line 154 – yii\base\InlineAction::runWithParams(['tournament_id' => 991])
14. in /var/www/virtual/tabbie/tabbie2/tabbie2.git/vendor/yiisoft/yii2/base/Module.php at line 454 – yii\base\Controller::runAction('import', ['tournament_id' => 991])
15. in /var/www/virtual/tabbie/tabbie2/tabbie2.git/vendor/yiisoft/yii2/web/Application.php at line 84 – yii\base\Module::runAction('team/import', ['tournament_id' => 991])
16. in /var/www/virtual/tabbie/tabbie2/tabbie2.git/vendor/yiisoft/yii2/base/Application.php at line 375 – yii\web\Application::handleRequest(yii\web\Request)
17. in /var/www/virtual/tabbie/tabbie2/tabbie2.git/frontend/web/index.php at line 18 – yii\base\Application::run()
12131415161718 
$config = yii\helpers\ArrayHelper::merge(
    require(__DIR__ . '/../../common/config/main.php'), require(__DIR__ . '/../../common/config/main-local.php'), require(__DIR__ . '/../config/main.php'), require(__DIR__ . '/../config/main-local.php')
);
 
$application = new yii\web\Application($config);
$application->run();
 $_GET = [
    'tournament_id' => 991,
];

$_POST = [
    '_csrf' => 'NGduUUE2V0JbKwQzdW9jd1oXWQcKbDJ7bAMfPRNBZDRxFT8jEGcZEA==',
    'field' => [
        1 => [
            1 => '4030',
        ],
    ],
    'csvFile' => 'a:1:{i:1;a:8:{i:0;a:1:{i:0;s:5:"Team1";}i:1;a:211:{i:0;s:6:"School";i:1;a:2:{s:2:"id";i:14;s:4:"name";s:37:"Raphael Recanati International School";}i:2;a:2:{s:2:"id";i:24;s:4:"name";s:21:"Reali School in Haifa";}i:3;a:2:{s:2:"id";i:201;s:4:"name";s:26:"Copenhagen Business School";}i:4;a:2:{s:2:"id";i:223;s:4:"name";s:33:"Higher School of Economics Moscow";}i:5;a:2:{s:2:"id";i:228;s:4:"name";s:31:"Iustinianus Primus - Law School";}i:6;a:2:{s:2:"id";i:240;s:4:"name";s:48:"London School of Economics and Political Science";}i:7;a:2:{s:2:"id";i:268;s:4:"name";s:53:"Sarajevo School of Science and Technology Debate Club";}i:8;a:2:{s:2:"id";i:269;s:4:"name";s:38:"School of Oriental and African Studies";}i:9;a:2:{s:2:"id";i:277;s:4:"name";s:37:"Stockholm School of Economics in Riga";}i:10;a:2:{s:2:"id";i:328;s:4:"name";s:26:"Warsaw School of Economics";}i:11;a:2:{s:2:"id";i:784;s:4:"name";s:31:"Athens Law School Debating Club";}i:12;a:2:{s:2:"id";i:790;s:4:"name";s:58:"National Law School of India Literary and Debating Society";}i:13;a:2:{s:2:"id";i:840;s:4:"name";s:34:"National High School Debate League";}i:14;a:2:{s:2:"id";i:956;s:4:"name";s:67:"Student Association at Stockholm School of Economics Debate Society";}i:15;a:2:{s:2:"id";i:1233;s:4:"name";s:21:"Kalinga School of Law";}i:16;a:2:{s:2:"id";i:1361;s:4:"name";s:43:"Symbiosis Law School, Pune Debating Society";}i:17;a:2:{s:2:"id";i:1611;s:4:"name";s:24:"The Tiffin Girls\' School";}i:18;a:2:{s:2:"id";i:1670;s:4:"name";s:15:"Anavryta School";}i:19;a:2:{s:2:"id";i:1674;s:4:"name";s:16:"Geitonas Schools";}i:20;a:2:{s:2:"id";i:1676;s:4:"name";s:17:"Kastritsi Schools";}i:21;a:2:{s:2:"id";i:1678;s:4:"name";s:16:"Moraitis Schools";}i:22;a:2:{s:2:"id";i:1816;s:4:"name";s:36:"American Farm School of Thessaloniki";}i:23;a:2:{s:2:"id";i:1829;s:4:"name";s:51:"Business and Information Technology School Iserlohn";}i:24;a:2:{s:2:"id";i:1847;s:4:"name";s:26:"Lahore School of Economics";}i:25;a:2:{s:2:"id";i:1947;s:4:"name";s:27:"White Oaks Secondary School";}i:26;a:2:{s:2:"id";i:1994;s:4:"name";s:45:"The King\'s School Canterbury Debating Society";}i:27;a:2:{s:2:"id";i:1997;s:4:"name";s:14:"Ionios Schools";}i:28;a:2:{s:2:"id";i:2014;s:4:"name";s:32:"Christopher Columbus High School";}i:29;a:2:{s:2:"id";i:2043;s:4:"name";s:22:"London Business School";}i:30;a:2:{s:2:"id";i:2076;s:4:"name";s:37:"Bucharest School of Political Science";}i:31;a:2:{s:2:"id";i:2093;s:4:"name";s:18:"IE Business School";}i:32;a:2:{s:2:"id";i:2100;s:4:"name";s:45:"International Learning School Debating Union ";}i:33;a:2:{s:2:"id";i:2115;s:4:"name";s:20:"The Woodlands School";}i:34;a:2:{s:2:"id";i:2229;s:4:"name";s:23:"St Paul\'s Girls\' School";}i:35;a:2:{s:2:"id";i:2237;s:4:"name";s:34:"International School of Amsterdam ";}i:36;a:2:{s:2:"id";i:2238;s:4:"name";s:33:"International School of Amsterdam";}i:37;a:2:{s:2:"id";i:2249;s:4:"name";s:28:"Arsakeia - Tpsitseia Schools";}i:38;a:2:{s:2:"id";i:2250;s:4:"name";s:31:"Rizareios Parochial High School";}i:39;a:2:{s:2:"id";i:2251;s:4:"name";s:30:"St. Catherine\'s British School";}i:40;a:2:{s:2:"id";i:2253;s:4:"name";s:45:"1st Experimental Junior High School of Athens";}i:41;a:2:{s:2:"id";i:2255;s:4:"name";s:26:"Arsakeia Tositseia Schools";}i:42;a:2:{s:2:"id";i:2319;s:4:"name";s:13:"Cheney School";}i:43;a:2:{s:2:"id";i:2324;s:4:"name";s:18:"Westminster School";}i:44;a:2:{s:2:"id";i:2348;s:4:"name";s:18:"Westminster School";}i:45;a:2:{s:2:"id";i:2457;s:4:"name";s:33:"Burnaby Mountain Secondary School";}i:46;a:2:{s:2:"id";i:2462;s:4:"name";s:38:"Sir Winston Churchill Secondary School";}i:47;a:2:{s:2:"id";i:2463;s:4:"name";s:22:"Combination of schools";}i:48;a:2:{s:2:"id";i:2581;s:4:"name";s:49:"Shamsul Hoque Khan School & College Debating Club";}i:49;a:2:{s:2:"id";i:2665;s:4:"name";s:19:"New Economic School";}i:50;a:2:{s:2:"id";i:2669;s:4:"name";s:55:"University of Toronto Schools Speech and Debate Society";}i:51;a:2:{s:2:"id";i:2751;s:4:"name";s:29:"Stockholm School of Economics";}i:52;a:2:{s:2:"id";i:2794;s:4:"name";s:19:"Mandoulides Schools";}i:53;a:2:{s:2:"id";i:2796;s:4:"name";s:31:"Rizareios Pariochal High School";}i:54;a:2:{s:2:"id";i:2996;s:4:"name";s:17:"Nazarbayev School";}i:55;a:2:{s:2:"id";i:3009;s:4:"name";s:42:"SolBridge International School of Business";}i:56;a:2:{s:2:"id";i:3103;s:4:"name";s:35:"Failed NAPFA (Anglican High School)";}i:57;a:2:{s:2:"id";i:3182;s:4:"name";s:33:"Haberdasher\'s Aske\'s Boys\' School";}i:58;a:2:{s:2:"id";i:3183;s:4:"name";s:20:"Latymer Upper School";}i:59;a:2:{s:2:"id";i:3192;s:4:"name";s:54:"London School of Economics and Political Science (LSE)";}i:60;a:2:{s:2:"id";i:3206;s:4:"name";s:33:"German Swiss International School";}i:61;a:2:{s:2:"id";i:3208;s:4:"name";s:28:"Chinese International School";}i:62;a:2:{s:2:"id";i:3210;s:4:"name";s:23:"Carmel Secondary School";}i:63;a:2:{s:2:"id";i:3211;s:4:"name";s:23:"PLK Choi Kai Yau School";}i:64;a:2:{s:2:"id";i:3212;s:4:"name";s:13:"Island School";}i:65;a:2:{s:2:"id";i:3213;s:4:"name";s:22:"Delia School of Canada";}i:66;a:2:{s:2:"id";i:3214;s:4:"name";s:22:"Diocesan Girls\' School";}i:67;a:2:{s:2:"id";i:3217;s:4:"name";s:19:"South Island School";}i:68;a:2:{s:2:"id";i:3218;s:4:"name";s:16:"Heep Yunn School";}i:69;a:2:{s:2:"id";i:3219;s:4:"name";s:21:"Diocesan Boys\' School";}i:70;a:2:{s:2:"id";i:3220;s:4:"name";s:20:"King George V School";}i:71;a:2:{s:2:"id";i:3225;s:4:"name";s:26:"Marymount Secondary School";}i:72;a:2:{s:2:"id";i:3226;s:4:"name";s:34:"Tuen Mun Catholic Secondary School";}i:73;a:2:{s:2:"id";i:3227;s:4:"name";s:25:"St. Paul\'s Convent School";}i:74;a:2:{s:2:"id";i:3228;s:4:"name";s:33:"St. Joseph\'s Anglo-Chinese School";}i:75;a:2:{s:2:"id";i:3230;s:4:"name";s:18:"West Island School";}i:76;a:2:{s:2:"id";i:3242;s:4:"name";s:18:"Putney High School";}i:77;a:2:{s:2:"id";i:3263;s:4:"name";s:21:"Pate\'s Grammar School";}i:78;a:2:{s:2:"id";i:3264;s:4:"name";s:28:"Ryde School with Upper Chine";}i:79;a:2:{s:2:"id";i:3266;s:4:"name";s:18:"Berkhamsted School";}i:80;a:2:{s:2:"id";i:3268;s:4:"name";s:13:"Reed\'s School";}i:81;a:2:{s:2:"id";i:3279;s:4:"name";s:33:"Xavier\'s School Gifted Youngsters";}i:82;a:2:{s:2:"id";i:3282;s:4:"name";s:42:"Hogwarts School of Witchcraft and Wizardry";}i:83;a:2:{s:2:"id";i:3318;s:4:"name";s:21:"Lahore Grammar School";}i:84;a:2:{s:2:"id";i:3336;s:4:"name";s:45:"Lahore Grammar School Johar Town Senior Girls";}i:85;a:2:{s:2:"id";i:3381;s:4:"name";s:15:"Whitgift School";}i:86;a:2:{s:2:"id";i:3384;s:4:"name";s:13:"Repton School";}i:87;a:2:{s:2:"id";i:3386;s:4:"name";s:38:"Sri KDU International School, Malaysia";}i:88;a:2:{s:2:"id";i:3389;s:4:"name";s:27:"Colonel By Secondary School";}i:89;a:2:{s:2:"id";i:3391;s:4:"name";s:28:"Ateneo De Manila High School";}i:90;a:2:{s:2:"id";i:3393;s:4:"name";s:21:"High School of Dundee";}i:91;a:2:{s:2:"id";i:3403;s:4:"name";s:21:"Kingsbury High School";}i:92;a:2:{s:2:"id";i:3404;s:4:"name";s:21:"Guildford High School";}i:93;a:2:{s:2:"id";i:3405;s:4:"name";s:29:"The King\'s School, Canterbury";}i:94;a:2:{s:2:"id";i:3406;s:4:"name";s:34:"The Grammar School at Leeds (GSAL)";}i:95;a:2:{s:2:"id";i:3407;s:4:"name";s:37:"The Haberdashers\' Aske\'s Boys\' School";}i:96;a:2:{s:2:"id";i:3411;s:4:"name";s:16:"Magdalene School";}i:97;a:2:{s:2:"id";i:3412;s:4:"name";s:21:"Wimbledon High School";}i:98;a:2:{s:2:"id";i:3413;s:4:"name";s:16:"St Paul\'s School";}i:99;a:2:{s:2:"id";i:3426;s:4:"name";s:27:"Antwerpen Management School";}i:100;a:2:{s:2:"id";i:3447;s:4:"name";s:15:"Wilson\'s School";}i:101;a:2:{s:2:"id";i:3448;s:4:"name";s:17:"St. Paul\'s School";}i:102;a:2:{s:2:"id";i:3533;s:4:"name";s:18:"The Latymer School";}i:103;a:2:{s:2:"id";i:3534;s:4:"name";s:21:"Oaks Park High School";}i:104;a:2:{s:2:"id";i:3535;s:4:"name";s:18:"King Alfred School";}i:105;a:2:{s:2:"id";i:3537;s:4:"name";s:17:"Woldingham School";}i:106;a:2:{s:2:"id";i:3538;s:4:"name";s:20:"Islamia Girls School";}i:107;a:2:{s:2:"id";i:3540;s:4:"name";s:15:"ST PAULS SCHOOL";}i:108;a:2:{s:2:"id";i:3541;s:4:"name";s:16:"Winchmore School";}i:109;a:2:{s:2:"id";i:3542;s:4:"name";s:17:"Winchmore Schools";}i:110;a:2:{s:2:"id";i:3543;s:4:"name";s:22:"Francis Holland School";}i:111;a:2:{s:2:"id";i:3546;s:4:"name";s:16:"Sevenoaks School";}i:112;a:2:{s:2:"id";i:3547;s:4:"name";s:23:"King\'s School Cantebury";}i:113;a:2:{s:2:"id";i:3548;s:4:"name";s:30:"North London Collegiate School";}i:114;a:2:{s:2:"id";i:3550;s:4:"name";s:22:"St Paul\'s Girls School";}i:115;a:2:{s:2:"id";i:3559;s:4:"name";s:60:"DCM (Debating Society Munich), Stockholm School of Economics";}i:116;a:2:{s:2:"id";i:3572;s:4:"name";s:47:"Solvay Brussels School - Economics & Management";}i:117;a:2:{s:2:"id";i:3574;s:4:"name";s:64:"Law-business high school Belgrade, Music high school "Stankovic"";}i:118;a:2:{s:2:"id";i:3576;s:4:"name";s:29:"First Belgrade Grammar School";}i:119;a:2:{s:2:"id";i:3588;s:4:"name";s:37:"Law and Business High School Belgrade";}i:120;a:2:{s:2:"id";i:3590;s:4:"name";s:37:"Rephael Recanati International School";}i:121;a:2:{s:2:"id";i:3604;s:4:"name";s:31:"King\'s College School Wimbledon";}i:122;a:2:{s:2:"id";i:3607;s:4:"name";s:35:"St Mary Redcliffe and Temple School";}i:123;a:2:{s:2:"id";i:3608;s:4:"name";s:25:"The Royal Hospital School";}i:124;a:2:{s:2:"id";i:3610;s:4:"name";s:34:"The Bishop\'s Stortford High School";}i:125;a:2:{s:2:"id";i:3613;s:4:"name";s:14:"Norwich School";}i:126;a:2:{s:2:"id";i:3615;s:4:"name";s:37:"Simon Langton Grammar School for Boys";}i:127;a:2:{s:2:"id";i:3616;s:4:"name";s:25:"Mearns Castle High School";}i:128;a:2:{s:2:"id";i:3619;s:4:"name";s:16:"Tonbridge School";}i:129;a:2:{s:2:"id";i:3622;s:4:"name";s:28:"Queens Park Community School";}i:130;a:2:{s:2:"id";i:3625;s:4:"name";s:31:"King Edward VI School (Suffolk)";}i:131;a:2:{s:2:"id";i:3626;s:4:"name";s:26:"Bishop Wordsworth\'s School";}i:132;a:2:{s:2:"id";i:3627;s:4:"name";s:36:"South Wilts Grammar School for Girls";}i:133;a:2:{s:2:"id";i:3628;s:4:"name";s:17:"Shrewsbury school";}i:134;a:2:{s:2:"id";i:3631;s:4:"name";s:16:"Cranbrook School";}i:135;a:2:{s:2:"id";i:3632;s:4:"name";s:29:"The Manchester Grammar School";}i:136;a:2:{s:2:"id";i:3633;s:4:"name";s:15:"Roundhay School";}i:137;a:2:{s:2:"id";i:3635;s:4:"name";s:19:"Robert Clack School";}i:138;a:2:{s:2:"id";i:3636;s:4:"name";s:21:"Sheffield High School";}i:139;a:2:{s:2:"id";i:3637;s:4:"name";s:15:"Chigwell School";}i:140;a:2:{s:2:"id";i:3639;s:4:"name";s:34:"The Grammar School at Leeds (GSLA)";}i:141;a:2:{s:2:"id";i:3640;s:4:"name";s:31:"City of London School for Girls";}i:142;a:2:{s:2:"id";i:3660;s:4:"name";s:19:"Bromley High School";}i:143;a:2:{s:2:"id";i:3665;s:4:"name";s:34:"Collegiate School Debating Society";}i:144;a:2:{s:2:"id";i:3670;s:4:"name";s:24:"Queen Elizabeth\'s School";}i:145;a:2:{s:2:"id";i:3672;s:4:"name";s:15:"Alleyn\'s School";}i:146;a:2:{s:2:"id";i:3673;s:4:"name";s:20:"Coombe Girls\' School";}i:147;a:2:{s:2:"id";i:3674;s:4:"name";s:14:"Ipswich School";}i:148;a:2:{s:2:"id";i:3675;s:4:"name";s:36:"Northumberland Park Community School";}i:149;a:2:{s:2:"id";i:3681;s:4:"name";s:20:"Ibstock Place School";}i:150;a:2:{s:2:"id";i:3682;s:4:"name";s:29:"Cardinal Pole Catholic School";}i:151;a:2:{s:2:"id";i:3686;s:4:"name";s:32:"Wolverhampton Girl\'s High School";}i:152;a:2:{s:2:"id";i:3705;s:4:"name";s:18:"The Gryphon School";}i:153;a:2:{s:2:"id";i:3706;s:4:"name";s:19:"Mary Erskine School";}i:154;a:2:{s:2:"id";i:3707;s:4:"name";s:14:"Loretto School";}i:155;a:2:{s:2:"id";i:3709;s:4:"name";s:22:"George Heriot\'s School";}i:156;a:2:{s:2:"id";i:3710;s:4:"name";s:16:"Uppingham School";}i:157;a:2:{s:2:"id";i:3711;s:4:"name";s:17:"Hill House School";}i:158;a:2:{s:2:"id";i:3712;s:4:"name";s:27:"Newcastle under Lyme School";}i:159;a:2:{s:2:"id";i:3713;s:4:"name";s:23:"Bradford Grammar School";}i:160;a:2:{s:2:"id";i:3714;s:4:"name";s:22:"Craigmount High School";}i:161;a:2:{s:2:"id";i:3715;s:4:"name";s:19:"St Columba\'s School";}i:162;a:2:{s:2:"id";i:3716;s:4:"name";s:27:"Cardinal Heenan High School";}i:163;a:2:{s:2:"id";i:3717;s:4:"name";s:15:"Solihull School";}i:164;a:2:{s:2:"id";i:3718;s:4:"name";s:35:"Bury St Edmunds County Upper School";}i:165;a:2:{s:2:"id";i:3719;s:4:"name";s:31:"Newcastle High School for Girls";}i:166;a:2:{s:2:"id";i:3720;s:4:"name";s:13:"Durham School";}i:167;a:2:{s:2:"id";i:3746;s:4:"name";s:16:"The Perse School";}i:168;a:2:{s:2:"id";i:3862;s:4:"name";s:21:"Melbourne High School";}i:169;a:2:{s:2:"id";i:3863;s:4:"name";s:35:"The MacRobertson Girls\' High School";}i:170;a:2:{s:2:"id";i:3865;s:4:"name";s:21:"St Catherine\'s School";}i:171;a:2:{s:2:"id";i:3875;s:4:"name";s:46:"S Rajaratnam School of International Studies A";}i:172;a:2:{s:2:"id";i:3937;s:4:"name";s:27:"nobel international school ";}i:173;a:2:{s:2:"id";i:3951;s:4:"name";s:48:"Tamil Nadu National Law School , Tiruchirappalli";}i:174;a:2:{s:2:"id";i:3963;s:4:"name";s:17:"York House School";}i:175;a:2:{s:2:"id";i:3982;s:4:"name";s:46:"High School (Queens College Boys\' High School)";}i:176;a:2:{s:2:"id";i:4030;s:4:"name";s:14:"another school";}i:177;a:2:{s:2:"id";i:4075;s:4:"name";s:11:"School 533;";}i:178;a:2:{s:2:"id";i:4077;s:4:"name";s:16:"HSE & School 42;";}i:179;a:2:{s:2:"id";i:4081;s:4:"name";s:10:"School 155";}i:180;a:2:{s:2:"id";i:4082;s:4:"name";s:14:"HSE & School42";}i:181;a:2:{s:2:"id";i:4083;s:4:"name";s:9:"School533";}i:182;a:2:{s:2:"id";i:4087;s:4:"name";s:14:"Colfe\'s School";}i:183;a:2:{s:2:"id";i:4144;s:4:"name";s:52:"English Debate Society of Poi Lam High School (Suwa)";}i:184;a:2:{s:2:"id";i:4154;s:4:"name";s:33:"Penang Chinese Girls High School ";}i:185;a:2:{s:2:"id";i:4160;s:4:"name";s:22:"Mainor Business School";}i:186;a:2:{s:2:"id";i:4200;s:4:"name";s:23:"Magdalen College School";}i:187;a:2:{s:2:"id";i:4202;s:4:"name";s:18:"St Edward\'s School";}i:188;a:2:{s:2:"id";i:4203;s:4:"name";s:17:"Tudor Hall School";}i:189;a:2:{s:2:"id";i:4242;s:4:"name";s:43:"Hong Kong Interschool Debating Organization";}i:190;a:2:{s:2:"id";i:4245;s:4:"name";s:11:"DGS\' School";}i:191;a:2:{s:2:"id";i:4249;s:4:"name";s:44:"Maryknoll Convent School (Secondary Section)";}i:192;a:2:{s:2:"id";i:4254;s:4:"name";s:32:"Po Leung Kuk Choi Kai Yau School";}i:193;a:2:{s:2:"id";i:4257;s:4:"name";s:20:"Diocesan Boys School";}i:194;a:2:{s:2:"id";i:4342;s:4:"name";s:21:"Methodist Boys School";}i:195;a:2:{s:2:"id";i:4360;s:4:"name";s:25:"RRIS international school";}i:196;a:2:{s:2:"id";i:4366;s:4:"name";s:27:"Woodford County High School";}i:197;a:2:{s:2:"id";i:4374;s:4:"name";s:20:"Brescia House School";}i:198;a:2:{s:2:"id";i:4385;s:4:"name";s:22:"Marling Grammar School";}i:199;a:2:{s:2:"id";i:4403;s:4:"name";s:35:"Tallinn Secondary School of Science";}i:200;a:2:{s:2:"id";i:4451;s:4:"name";s:35:"Catholic high school debating unit ";}i:201;a:2:{s:2:"id";i:4452;s:4:"name";s:20:"Catholic high school";}i:202;a:2:{s:2:"id";i:4505;s:4:"name";s:25:"CMR LAW SCHOOL, Bangalore";}i:203;a:2:{s:2:"id";i:4530;s:4:"name";s:36:"Taylors international school puchong";}i:204;a:2:{s:2:"id";i:4531;s:4:"name";s:36:"Taylors international school puchong";}i:205;a:2:{s:2:"id";i:4539;s:4:"name";s:42:"Federal Islamic Secondary School of Kajang";}i:206;a:2:{s:2:"id";i:4556;s:4:"name";s:25:"Asia Pacific Smart School";}i:207;a:2:{s:2:"id";i:4557;s:4:"name";s:19:"Hin Hua High School";}i:208;a:2:{s:2:"id";i:4559;s:4:"name";s:24:"Asi Pacific Smart School";}i:209;a:2:{s:2:"id";i:4572;s:4:"name";s:20:"Science Girls School";}i:210;a:2:{s:2:"id";i:4589;s:4:"name";s:35:"Shun Lee Catholic Secondary School ";}}i:2;a:1:{i:0;s:5:"First";}i:3;a:1:{i:0;s:4:"Last";}i:4;a:1:{i:0;s:12:"[email protected]";}i:5;a:1:{i:0;s:6:"Prenom";}i:6;a:1:{i:0;s:3:"Nom";}i:7;a:1:{i:0;s:12:"[email protected]";}}}',
    'header' => 'a:8:{i:0;s:9:"Team Name";i:1;s:12:"Society Name";i:2;s:11:"A.Givenname";i:3;s:10:"A.Surename";i:4;s:7:"A.Email";i:5;s:11:"B.Givenname";i:6;s:10:"B.Surename";i:7;s:7:"B.Email";}',
    'makeItSo' => 'true',
];

$_COOKIE = [
    '_csrf' => 'ff8da169c534c13012c2ae32f649ef5450c3a26d9e1aa55603aca16b5ccc312aa:2:{i:0;s:5:"_csrf";i:1;s:32:"oLjb4Y45np7VKZe9XdqlRw3vErQrQQNR";}',
    'PHPSESSID' => 'h46he1c9b8loim7p9enda2uo34',
    '_identity' => 'ee1d7e8d8a5141c21642df68cf90007eb5ff5862826603bc44ad096104cbdbb5a:2:{i:0;s:9:"_identity";i:1;s:50:"[14078,"PXjhL7MzQgH_Ww0hwzPNX1QOX2n5GT-f",2592000]";}',
];

$_SESSION = [
    '__flash' => [],
    '__id' => 14078,
];
Yii Framework
2017-10-03, 13:10:40

Apache/2.2.15 (CentOS)
Yii Framework/2.0.8

Thanks in advance for any help, and all the word that's been put into Tabbie2!

Feedback on adjudicator feedback filter bug

On page Feedback->Feedback on Adjudicator, when attempting to filter by target adjudicator, system returns feedback that is for a different adjudicator. In attached example, I attempted to select feedback on Michael Coleman. The bottom item of feedback that begins "Cormac was very inclusive..." is returned, however on inspection of the exported feedback excel sheet, this piece of feedback was given by a wing, Eoghan Finn, on a chair Cormac Henehan. See the bottom line of the attached screenshot.
Potentially relevant info: We had activated and deactivated judges since the feedback was written, we also drew round 4 the night before. Maybe this affected the judge IDs?
feedbackerror1

excelfeedbackerror

Password reset does not work and prints debbug information

Hi!

I tried to request a new password using the form in the web: https://www.tabbie.org/site/request-password-reset

When I introduced my mail and pressed enter, a stack trace was all I got. Tried again 30 minutes later and I got the same. This is the stack trace:

Swift_TransportException
Failed to authenticate on SMTP server with username "[email protected]" using 2 possible authenticators

    1. in /var/www/virtual/tabbie/tabbie2/tabbie2.git/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Transport/Esmtp/AuthHandler.php at line 181
                    foreach ($this->_getAuthenticatorsForAgent() as $authenticator) {
                    if (in_array(strtolower($authenticator->getAuthKeyword()),
                        array_map('strtolower', $this->_esmtpParams))) {
                        ++$count;
                        if ($authenticator->authenticate($agent, $this->_username, $this->_password)) {
                            return;
                        }
                    }
                }
                throw new Swift_TransportException(
                    'Failed to authenticate on SMTP server with username "'.
                    $this->_username.'" using '.$count.' possible authenticators'
                    );
            }
        }
     
        /**
         * Not used.
         */

    2. in /var/www/virtual/tabbie/tabbie2/tabbie2.git/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Transport/EsmtpTransport.php at line 334 – Swift_Transport_Esmtp_AuthHandler::afterEhlo(Swift_SmtpTransport)
  
                }
            }
     
            $this->_capabilities = $this->_getCapabilities($response);
            $this->_setHandlerParams();
            foreach ($this->_getActiveHandlers() as $handler) {
                $handler->afterEhlo($this);
            }
        }
     
        /** Overridden to add Extension support */
        protected function _doMailFromCommand($address)
        {

    3. in /var/www/virtual/tabbie/tabbie2/tabbie2.git/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Transport/AbstractSmtpTransport.php at line 118 – Swift_Transport_EsmtpTransport::_doHeloCommand()
    

                try {
                    $this->_buffer->initialize($this->_getBufferParams());
                } catch (Swift_TransportException $e) {
                    $this->_throwException($e);
                }
                $this->_readGreeting();
                $this->_doHeloCommand();
     
                if ($evt) {
                    $this->_eventDispatcher->dispatchEvent($evt, 'transportStarted');
                }
     
                $this->_started = true;

    4. in /var/www/virtual/tabbie/tabbie2/tabbie2.git/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mailer.php at line 79 – Swift_Transport_AbstractSmtpTransport::start()
    

         */
        public function send(Swift_Mime_Message $message, &$failedRecipients = null)
        {
            $failedRecipients = (array) $failedRecipients;
     
            if (!$this->_transport->isStarted()) {
                $this->_transport->start();
            }
     
            $sent = 0;
     
            try {
                $sent = $this->_transport->send($message, $failedRecipients);

    5. in /var/www/virtual/tabbie/tabbie2/tabbie2.git/vendor/yiisoft/yii2-swiftmailer/Mailer.php at line 146 – Swift_Mailer::send(Swift_Message)
    

            $address = $message->getTo();
            if (is_array($address)) {
                $address = implode(', ', array_keys($address));
            }
            Yii::info('Sending email "' . $message->getSubject() . '" to "' . $address . '"', __METHOD__);
     
            return $this->getSwiftMailer()->send($message->getSwiftMessage()) > 0;
        }
     
        /**
         * Creates Swift mailer instance.
         * @return \Swift_Mailer mailer instance.
         */

    6. in /var/www/virtual/tabbie/tabbie2/tabbie2.git/vendor/yiisoft/yii2/mail/BaseMailer.php at line 260 – yii\swiftmailer\Mailer::sendMessage(yii\swiftmailer\Message)
    7. in /var/www/virtual/tabbie/tabbie2/tabbie2.git/vendor/yiisoft/yii2/mail/BaseMessage.php at line 48 – yii\mail\BaseMailer::send(yii\swiftmailer\Message)
    8. in /var/www/virtual/tabbie/tabbie2/tabbie2.git/frontend/models/PasswordResetRequestForm.php at line 55 – yii\mail\BaseMessage::send()
    

     
                if ($user->save()) {
                    return \Yii::$app->mailer->compose('passwordResetToken', ['user' => $user])
                        ->setFrom([\Yii::$app->params['supportEmail'] => \Yii::$app->params["appName"] . ' robot'])
                        ->setTo($this->email)
                        ->setSubject(Yii::t("app", 'Password reset for {user}', ["user" => $user->getName()]))
                        ->send();
                } else {
                    $this->addError("user", $user->getErrors());
                    Yii::error("Password reset error: " . ObjectError::getMsg($user), __METHOD__);
                }
            } else {
                $this->addError("email", Yii::t("app", "User not found with this Email"));

    9. in /var/www/virtual/tabbie/tabbie2/tabbie2.git/frontend/controllers/SiteController.php at line 217 – frontend\models\PasswordResetRequestForm::sendEmail()
    

            ]);
        }
     
        public function actionRequestPasswordReset() {
            $model = new PasswordResetRequestForm();
            if ($model->load(Yii::$app->request->post()) && $model->validate()) {
                if ($model->sendEmail()) {
                    Yii::$app->getSession()
                        ->setFlash('success', Yii::t("app", 'Check your email for further instructions.'));
     
                    return $this->goHome();
                } else {
                    Yii::$app->getSession()

    10. frontend\controllers\SiteController::actionRequestPasswordReset()
    11. in /var/www/virtual/tabbie/tabbie2/tabbie2.git/vendor/yiisoft/yii2/base/InlineAction.php at line 55 – call_user_func_array([frontend\controllers\SiteController, 'actionRequestPasswordReset'], [])
    12. in /var/www/virtual/tabbie/tabbie2/tabbie2.git/vendor/yiisoft/yii2/base/Controller.php at line 154 – yii\base\InlineAction::runWithParams([])
    13. in /var/www/virtual/tabbie/tabbie2/tabbie2.git/vendor/yiisoft/yii2/base/Module.php at line 454 – yii\base\Controller::runAction('request-password-reset', [])
    14. in /var/www/virtual/tabbie/tabbie2/tabbie2.git/vendor/yiisoft/yii2/web/Application.php at line 84 – yii\base\Module::runAction('site/request-password-reset', [])
    15. in /var/www/virtual/tabbie/tabbie2/tabbie2.git/vendor/yiisoft/yii2/base/Application.php at line 375 – yii\web\Application::handleRequest(yii\web\Request)
    16. in /var/www/virtual/tabbie/tabbie2/tabbie2.git/frontend/web/index.php at line 18 – yii\base\Application::run()
    

     
    $config = yii\helpers\ArrayHelper::merge(
        require(__DIR__ . '/../../common/config/main.php'), require(__DIR__ . '/../../common/config/main-local.php'), require(__DIR__ . '/../config/main.php'), require(__DIR__ . '/../config/main-local.php')
    );
     
    $application = new yii\web\Application($config);
    $application->run();

$_POST = [
    '_csrf' => 'T0UwUlRVUjEdMlchOhsEYyh9UwIjYj1TKhZFOTMhHEIqcHMoGQIIVA==',
    'PasswordResetRequestForm' => [
        'email' => 'pab****************',
    ],
];

$_COOKIE = [
    '_ga' => 'GA1.2.1428842224.1500460876',
    'PHPSESSID' => 'c85jvv2mem3jugu8b61e6e66k1',
    '_csrf' => '4ec6cfccf2e3c64515da09dbe7470c23a808535f6d5bc6a63b29e90399240ac9a:2:{i:0;s:5:"_csrf";i:1;s:32:"RwgsnNVRg8cPw7obeSukgtNse5CzMWZe";}',
    '_gid' => 'GA1.2.940115312.1501535776',
    '_gat' => '1',
];

$_SESSION = [
    '__flash' => [],
];

Yii Framework

2017-07-31, 21:18:34

Apache/2.2.15 (CentOS)

Yii Framework/2.0.8

Switch adjudicators crashes if one adjudicator not in a panel

Error below happens if you try to swap adjudicators where one adjudicator is not currently assigned to a panel. One might expect this to crash (though I was hoping it would swap an inactive adjudicator for an active one), but flagging in case we'd like to make it fail more gracefully.

It currently shows a debug page, here's the offending line:

Trying to get property of non-object

  1. in /var/www/virtual/tabbie/tabbie2/tabbie2.git/frontend/controllers/RoundController.php at line 396
            ])->orderBy(["panel_id" => SORT_DESC])->one();
            $b_in_panel = AdjudicatorInPanel::find()->joinWith("panel")->where([
                "adjudicator_id" => $b->id,
                "panel.used" => 1,
            ])->orderBy(["panel_id" => SORT_DESC])->one();

            $temp = $a_in_panel->panel_id;
            $temp_pos = $a_in_panel->function;
            $a_in_panel->panel_id = $b_in_panel->panel_id;   // <------ CRASHES HERE
            $a_in_panel->function = $b_in_panel->function;
            $b_in_panel->panel_id = $temp;
            $b_in_panel->function = $temp_pos;

            if ($a_in_panel->validate() && $b_in_panel->validate()) {
                if ($a_in_panel->save() && $b_in_panel->save())
                    Yii::$app->session->addFlash("success", Yii::t("app", "Adjudicator {n1} and {n2} switched", [
                        "n1" => $a->getName(),
                        "n2" => $b->getName(),

Typos/language issues

The following is a list of typos visible to the user. The format is: missspelled = corrected [Notes]

Givenname = Given name
Surename = Surname
"Search for a societies" = "Search for a society"

This issue is intended to be kept open whenever I find something new.

'tabbie2.git/vendor/bower-asset' should be named 'tabbie2.git/vendor/bower'

When I make a clean install, I get the directory 'tabbie2.git/vendor/bower-asset'. I assume that this is put there by composer.phar, because it is not part of the repository.

In any case Tabbie only works if I do
cp ./tabbie2.git/vendor/bower-asset tabbie2.git/vendor/bower
This should be fixed to work out of the box.

Error in teams replaced by swing teams

Tabbie doesn't change the name of the team when the team is replaced by a swing team after the round ended.

Example: A team didn't show up to the round and was replaced by a swing and the swing wins the round. But then it doesn't let you specify which swing team was the one that replaced the team. And the orginal team that was replaced is still going to the room with the 3 points even though in the tab they don't have the points.

Import Round not working

Whenever i import a round, the draws arent updated and the adjudicators also disappear from the draws. Even if i export and import the same round

Lock Draws and Protect Publishing and Showing Draw

Tabbie1 used to have a feature that prevented you from making a new draw, Tallinn have asked if this could be re-implemented.

It would also be useful if there could be a confirmation (with a pin?) for publishing the draw and showing the motion.

Add panellists to the Round Info page

Apologies for the open ended feature request. I also don't have a dev environment working atm where I can replicate things so I'm adding this with 100% certainty that this already isn't the case and I've misunderstood something.

Anyway, the round information page is super useful for identifying your room and teams, however (from what I can tell) it does not list your panellists. At the point adjudicators often rely on this page (if they cannot easily view the main draw) not knowing who your panel is can be an issue in terms of knowing when to start a debate and identifying which panellists are trainees etc.

Add some data checking UI/UX features to the results entry page

Apologies for the open ended feature request. I also don't have a dev environment working atm where I can replicate things so I'm adding this with 100% certainty that this already isn't the case and I've misunderstood something.

From having a number of iterations on Tabbycat’s eballot page we’ve tried to identify a number of UX/UI features that can help aid in minimising human error during the ballot entry process, particularly on mobile devices. Again I can’t bring up the exact tabbie interface right now so I’m going by memory on what are some options for improvement:

  • Display running totals of both team scores and team margins either on the confirmation page and/or on the initial entry page. This provides another piece of data that can be cross checked against the paper ballots to identify errors (by the adj doing the entry).
  • Display running rankings of the teams, ideally color coded, on either the confirmation page and/or the initial entry page. Ideally there would be a 2x2 'matrix’ style layout of the rankings here so that it can be easily compared to the ballot’s layout (which is also presented in the standard 2x2 matrix)
  • Optimise the mobile layout’s spacing and sizing so that layout is more compact (easier to see/compare scores across teams) and key information (names, scores) are more prominent.

I could potentially look at some of these in a PR, but it’s not likely that would happen anytime soon. The javascript needed to add these though is quite simple and probably easily added to the existing form. If helpful I can point to some analogous functions used in the tabbycat ballot page. It could also be worth pursuing an shared library or plugin for ballot entry as there are not too many differences between 2 and 4 team formats.

Moving Adjudicator (Chair) results in deadlock

Sometimes when moving a chair the db doesn't get updated properly and there is no chair set for a panel, which breaks the system.

Idea:
Check on every move, for the 2 panels (old and new)
If something like that is discovered -> set the highest ranked adj as chair

SWING TEAMS

I cannot edit "Swing teams" it doesn't let me check the option or change the team.

Teams page gives HTTP status code 403

On this page, which is accessible via my account:
image

The highlighted link goes to http://www.tabbie.org/Yale-IV-2015/team/, which on my account gives a 403.

For the Yale IV, my account is a participant (adjudicator) account, i.e. no tab director or adj core access.

I'm not sure whether the highlighted breadcrumb link should be removed or whether the access to this page should be permitted, but I presume one of the two should happen 😃

Chair not found - healing strategy

Round/view breaks if a debate without chair exists.
Make Debate::getChair() return the highest strength adjudicator in the panel and mark him chair if no chair is found.

Basic schema lacks tournament.tabAlgorithmClass

Migration works fine but trying to create a new tournament from the UI yields

Unknown Property – yii\base\UnknownPropertyException

Getting unknown property: common\models\Tournament::tabAlgorithmClass

Currently BasicStructure.sql says

CREATE TABLE IF NOT EXISTS `tournament` (
  `id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
  `url_slug` VARCHAR(100) NOT NULL,
  `convenor_user_id` INT(11) UNSIGNED NOT NULL,
  `tabmaster_user_id` INT(11) UNSIGNED NOT NULL,
  `name` VARCHAR(100) NOT NULL,
  `start_date` DATETIME NOT NULL,
  `end_date` DATETIME NOT NULL,
  `logo` VARCHAR(255) NULL,
  `time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`),
  INDEX `fk_tournament_user1_idx` (`convenor_user_id` ASC),
  INDEX `fk_tournament_user2_idx` (`tabmaster_user_id` ASC),
  UNIQUE INDEX `slug_UNIQUE` (`url_slug` ASC),
  CONSTRAINT `fk_tournament_user1`
    FOREIGN KEY (`convenor_user_id`)
    REFERENCES `tabbie`.`user` (`id`)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION,
  CONSTRAINT `fk_tournament_user2`
    FOREIGN KEY (`tabmaster_user_id`)
    REFERENCES `tabbie`.`user` (`id`)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION)
ENGINE = InnoDB;

I'd add it to the schema but I don't know what type it's supposed to be =)

Ballot input color schema

Show different color for ballots inputted by chair or by runner

Status:
White: open / running round
Yellow: Should be entered now (time based) 15 + 8*7 + 15
Red: Over time / problem
Yellow-Green: success by runner
Dark-Green: success by chair

Floating judge box

Tabbie1 had an 'unassigned judge' area. Tallinn would like this to come back. I'll see how feasible this is.

Switch adjudicators sometimes fails

On this (published) round: https://www.tabbie.org/imaginary-pineapple-lumps-invitational-/round/733

Switching adjudicators in general fails on the first attempt, and succeeds on the second attempt with the same pair to switch. Sometimes succeeds on first attempt or still fails on second attempt. I don't have any leads on a diagnosis.

If you can't reproduce the issue at all, let me know, this might not (yet) be a reliable enough bug report to action.

(That tournament is just a test tournament with a more creative name, so feel free to play around with it however you like.)

Delete a round

There should be the possibility to delete a round. eg something went wrong or so

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.