/**
  * Returns the active instance
  *
  * @return AdminToolsFunctionExecution
  */
 public static function getInstance()
 {
     if (!self::$instance instanceof self) {
         self::$instance = new self();
     }
     return self::$instance;
 }
 /**
  * @see Form::save()
  */
 public function save()
 {
     parent::save();
     $executor = AdminToolsFunctionExecution::getInstance();
     $executor->setValues($this->values);
     $saveOptions = $this->getSaveOptions();
     $inserts = '';
     foreach ($saveOptions as $option) {
         if (!empty($inserts)) {
             $inserts .= ',';
         }
         $inserts .= "(" . $option['optionID'] . ", '" . escapeString($option['optionValue']) . "')";
     }
     if (!empty($inserts)) {
         $sql = "INSERT INTO\twcf" . WCF_N . "_admin_tools_option\n\t\t\t\t\t\t(optionID, optionValue)\n\t\t\t\tVALUES \t\t" . $inserts . "\n\t\t\t\tON DUPLICATE KEY UPDATE optionValue = VALUES(optionValue)";
         WCF::getDB()->sendQuery($sql);
         WCF::getCache()->clear(WCF_DIR . 'cache/', 'cache.admin_tools-option*');
     }
     if ($this->functionID) {
         $executor->callFunction($this->functionID);
         foreach ($this->options as $superCategory) {
             foreach ($superCategory['categories'] as $functionCategory) {
                 if ($functionCategory['functionID'] == $this->functionID) {
                     $this->activeTabMenuItem = $superCategory['categoryName'];
                     $this->activeSubTabMenuItem = $this->activeTabMenuItem . '-' . $functionCategory['categoryName'];
                 }
             }
         }
         $returnMessages = WCF::getSession()->getVar('functionReturnMessage');
         if (isset($returnMessages[$this->functionID])) {
             $functionMessage = $returnMessages[$this->functionID];
             unset($returnMessages[$this->functionID]);
             WCF::getSession()->register('functionReturnMessage', $returnMessages);
             WCF::getTPL()->assign($functionMessage);
         } else {
             WCF::getTPL()->assign(array('success' => true));
         }
     } else {
         WCF::getTPL()->assign(array('success' => true));
     }
 }