public function autoStatus($clubId)
 {
     $restrictions = [];
     $club = $this->findById($clubId)->contain(['Advisors.Users', 'Members' => function ($q) {
         return $q->matching('Users')->matching('Officers', function ($q) {
             return $q->order(['Officers.status', 'Officers.id'])->where(['Officers.status IN' => ['Active', 'Ineligible'], 'Officers.title' => 'President']);
         });
     }])->first();
     if (in_array($club->status, ['Submitted', 'Not Recognized', 'Archived'])) {
         //No auto-change from these statuses. Admin intervention required
         return false;
     }
     if (!$club->advisor || $club->advisor->status != 'Approved') {
         //No "Approved" advisor
         $restrictions[] = 'No Approved Advisor';
     }
     if (empty($club->members[0]->_matchingData['Officers']) || $club->members[0]->_matchingData['Officers']->status != 'Active') {
         //President is not "Active"
         $restrictions[] = 'No Active President';
     } elseif (empty($club->members[0]->_matchingData['Users']->president_training_expire) || $club->members[0]->_matchingData['Users']->president_training_expire < Time::createFromTime(0, 0, 0)) {
         //President is not currently trained
         $restrictions[] = 'Club President training is not up to date';
     }
     if (empty($restrictions)) {
         $newStatus = 'Recognized';
     } else {
         $newStatus = 'Restricted';
     }
     if ($club->status == $newStatus) {
         return false;
     }
     $club->set('status', $newStatus);
     if (!$this->save($club)) {
         return false;
     }
     if ($newStatus == 'Restricted') {
         $this->notifyOfRestriction($club, $restrictions);
     }
     return $newStatus;
 }