/**
  * Puts a JavaScript Variable used in Kwf_js/Statistics.js
  *
  * @return string
  */
 public function getIncludeCode()
 {
     $value = Kwf_Statistics::getDefaultOptValue($this->getData());
     $optInShowBox = $this->getData()->getBaseProperty('statistics.optInShowBox');
     $html = '';
     if ($value == 'out' || $value == 'in' && $optInShowBox) {
         $components = Kwf_Component_Data_Root::getInstance()->getComponentsByClass('Kwc_Statistics_Opt_Component', array('subroot' => $this->getData()));
         $url = isset($components[0]) ? $components[0]->url : null;
         $html = $this->_getOptBoxInnerHtml($url);
         if (!$html) {
             $exception = new Kwf_Exception('To disable optbox please change config.');
             $exception->logOrThrow();
         }
         $html = '<div class="' . self::getRootElementClass($this) . '"><div class="inner">' . $html . '<div></div>';
         $html = str_replace("'", "\\'", $html);
     }
     $ret = '<script type="text/javascript">';
     //TODO commonjs
     /*
     $ret .= "if (typeof Kwf == 'undefined') Kwf = {};";
     $ret .= "if (typeof Kwf.Statistics == 'undefined') Kwf.Statistics = {};";
     $ret .= "Kwf.Statistics.defaultOptValue = '$value';";
     $ret .= "Kwf.Statistics.optBoxHtml = '$html';";
     */
     $ret .= $this->_getJavascriptIncludeCode();
     $ret .= '</script>';
     return $ret;
 }
 public function parse($html)
 {
     // replace entities
     $html = preg_replace('/&([a-z0-9#]{2,5});/i', '+$1;', $html);
     //before sending to xml parser make sure we have valid xml by tidying it up
     $html = Kwf_Util_Tidy::repairHtml($html);
     $this->_stack = array();
     $this->_ret = '';
     $this->_parser = xml_parser_create();
     xml_set_object($this->_parser, $this);
     xml_set_element_handler($this->_parser, 'startElement', 'endElement');
     xml_set_character_data_handler($this->_parser, 'characterData');
     xml_set_default_handler($this->_parser, 'characterData');
     $result = xml_parse($this->_parser, '<body>' . $html . '</body>', true);
     if (!$result) {
         // wenn man ein nicht geschlossenes <br> rein gibt, schreit er hier,
         // macht aber normal weiter. wenns zu oft vorkommt, evtl. exception
         // entfernen und ignorieren, oder was andres überlegen :-)
         $errorCode = xml_get_error_code($this->_parser);
         $ex = new Kwf_Exception("HtmlExport UrlParser XML Error {$errorCode}: " . xml_error_string($errorCode) . "in line " . xml_get_current_line_number($this->_parser) . " parsed html: " . $html);
         $ex->logOrThrow();
     }
     // re-replace entities
     $this->_ret = preg_replace('/\\+([a-z0-9#]{2,5});/i', '&$1;', $this->_ret);
     return $this->_ret;
 }
 protected function _beforeSave()
 {
     parent::_beforeSave();
     //add_component_id darf leer sein, passiert wenn eine bestellung im backend angelegt wird
     if (!$this->add_component_class) {
         $e = new Kwf_Exception("add_component_class is required");
         $e->logOrThrow();
     }
 }
 public function getChildData($parentData, $select = array())
 {
     if (is_array($select)) {
         $select = new Kwf_Component_Select($select);
     }
     if (!$parentData && !$select->hasPart(Kwf_Component_Select::WHERE_CHILD_OF) && !$select->hasPart(Kwf_Component_Select::WHERE_ID)) {
         $e = new Kwf_Exception("Looking up components generated by List is slow, and must be avoided.");
         $e->logOrThrow();
     }
     return parent::getChildData($parentData, $select);
 }
 public static function getOpt()
 {
     $ret = null;
     if (isset($_COOKIE[self::$_cookieName])) {
         $ret = $_COOKIE[self::$_cookieName];
         if ($ret != self::OPT_IN && $ret != self::OPT_OUT) {
             $exception = new Kwf_Exception('stored Cookie must be ' . self::OPT_IN . ' or ' . self::OPT_OUT);
             $exception->logOrThrow();
         }
     }
     return $ret;
 }
 public static function getUserOptValue()
 {
     if (!isset($_COOKIE[self::$_cookieName])) {
         return null;
     } else {
         $ret = $_COOKIE[self::$_cookieName];
         if ($ret != self::OPT_IN && $ret != self::OPT_OUT) {
             $exception = new Kwf_Exception('stored Cookie must be ' . self::OPT_IN . ' or ' . self::OPT_OUT);
             $exception->logOrThrow();
             return null;
         }
         return $ret;
     }
 }
 public function handle($method = null, $arguments = null, $extraParams = null)
 {
     try {
         if (is_null($method) && isset($_REQUEST['method']) && !is_null($_REQUEST['method'])) {
             $method = $_REQUEST['method'];
         }
         if (is_null($arguments) && isset($_REQUEST['arguments']) && !is_null($_REQUEST['arguments'])) {
             $arguments = unserialize($_REQUEST['arguments']);
         }
         if (is_null($extraParams) && isset($_REQUEST['extraParams']) && !is_null($_REQUEST['extraParams'])) {
             $extraParams = unserialize($_REQUEST['extraParams']);
         }
         if (is_null($arguments)) {
             $arguments = array();
         }
         // throw some exceptions
         if (!$this->_handler) {
             throw new Kwf_Srpc_Exception("A handler has to be set when using 'Kwc_Srpc_Server'");
         }
         if (is_null($method)) {
             throw new Kwf_Srpc_Exception("'method' must be set as first argument, or exists as key in " . '$_REQUEST');
         }
         if (!is_null($method) && !is_string($method)) {
             throw new Kwf_Srpc_Exception("'method' is expected to be a string");
         }
         if (!is_null($arguments) && !is_array($arguments)) {
             throw new Kwf_Srpc_Exception("'arguments' is expected to be an array");
         }
         $handler = $this->getHandler();
         if ($extraParams) {
             $handler->setExtraParams($extraParams);
         }
         $result = call_user_func_array(array($handler, $method), $arguments);
         $result = serialize($result);
         if (strpos($result, 'Kwf_') !== false) {
             $ex = new Kwf_Exception("a class name with 'Kwf_' must not be sent through srpc server");
             $ex->logOrThrow();
         }
     } catch (Exception $e) {
         $result = "An exception has been caught occured in Srpc_Server:\n\n" . "Message: " . $e->getMessage() . "\n" . "File: " . $e->getFile() . ':' . $e->getLine() . "\n" . "Trace: \n---=== Trace start ===---\n" . $e->getTraceAsString() . "\n---=== Trace end ===---\n";
     }
     if (!$this->_returnResponse) {
         echo $result;
         return;
     } else {
         return $result;
     }
 }
 public function jsonErrorAction()
 {
     $errors = $this->getRequest()->getParam('error_handler');
     $exception = $errors->exception;
     if ($exception instanceof Kwf_Exception_Abstract) {
         $this->getResponse()->setRawHeader($exception->getHeader());
     } else {
         $this->getResponse()->setRawHeader('HTTP/1.1 500 Internal Server Error');
     }
     if ($exception instanceof Kwf_Exception_Client) {
         $this->view->error = $exception->getMessage();
     } else {
         if (!$exception instanceof Kwf_Exception_Abstract) {
             $exception = new Kwf_Exception_Other($exception);
         }
         $this->view->error = $exception->getMessage();
         if (!$this->view->error) {
             $this->view->error = 'An error occurred';
         }
         if (Kwf_Exception::isDebug()) {
             $this->view->exception = explode("\n", $exception->getException()->__toString());
         }
     }
     $exception->log();
 }
 public function queryEnd($queryId)
 {
     if ($queryId == $this->_count) {
         if ($this->_lastQuery->hasEnded()) {
             throw new Zend_Db_Profiler_Exception("Query with profiler handle '{$queryId}' has already ended.");
         }
         $this->_lastQuery->end();
         $time = $this->_lastQuery->getElapsedSecs();
         if ($time > $this->_timeout) {
             $e = new Kwf_Exception('Query timed out with ' . $time . 's. \'' . $this->_lastQuery->getQuery() . '\'');
             $e->logOrThrow();
         }
     } else {
         throw new Kwf_Exception('Query not found');
     }
 }
 public function getRowBySiblingRow(Kwf_Model_Row_Interface $siblingRow)
 {
     $data = $siblingRow->{$this->_fieldName};
     if (is_string($data)) {
         if (substr($data, 0, 13) == 'kwfSerialized') {
             //früher wurde es mal so gespeichert
             $data = substr($data, 13);
         }
         if (substr($data, 0, 2) == 'a:') {
             //früher wurde es mal so gespeichert, das 35000 update script sollte es konvertieren
             //erwischt aber manchmal nicht alles
             try {
                 $data = unserialize($data);
             } catch (Exception $e) {
                 $e = new Kwf_Exception($e->getMessage() . " {$data}");
                 $e->logOrThrow();
                 $data = false;
             }
         } else {
             // json_decode gibt auch keinen fehler aus, wenn man ihm einen
             // falschen string (zB serialized) übergibt. bei nicht-json-daten
             // kommt immer null raus. Da bringt das try-catch eher wenig,
             // weil null nunmal keine Exception ist.
             // Lösung: Wir schmeissen die exception händisch im falle von
             // NULL. Eventuelles PROBLEM dabei ist jedoch,
             // wenn man: $data = json_decode(json_encode(NULL))
             // macht, weil dann korrekterweise NULL rauskommen würde.
             // deshalb wird dieser fall separat ohne dem json_decode behandelt
             if ($data == 'null' || $data == '') {
                 $data = null;
             } else {
                 $decodedData = json_decode($data);
                 if (is_null($decodedData)) {
                     // json_encode hat nicht funktioniert, siehe mörder-kommentar paar zeilen vorher
                     $e = new Kwf_Exception("json_decode failed. Input data was: '{$data}'");
                     $e->logOrThrow();
                 }
                 $data = $decodedData;
             }
         }
     }
     if (!$data) {
         $data = $this->getDefault();
     }
     $data = (array) $data;
     return new $this->_rowClass(array('model' => $this, 'siblingRow' => $siblingRow, 'data' => $data));
 }
 public function log()
 {
     if (Kwf_Exception::isDebug()) {
         return false;
     }
     $body = $this->_getLogBody();
     return Kwf_Exception_Logger_Abstract::getInstance()->log($this, 'error', $body);
 }
 public function render($ignoreCli = false)
 {
     if (!Kwf_Registry::get('config')->setupFinished) {
         echo "<h1>" . Kwf_Config::getValue('application.name') . "</h1>\n";
         echo "<a href=\"" . Kwf_Setup::getBaseUrl() . "/kwf/maintenance/setup\">[start setup]</a>\n";
         exit;
     }
     parent::render($ignoreCli);
 }
 public function log()
 {
     if (Kwf_Exception::isDebug()) {
         return false;
     }
     $body = '';
     $body .= $this->_format('REQUEST_URI', isset($_SERVER['REQUEST_URI']) ? $_SERVER['REQUEST_URI'] : '(none)');
     $body .= $this->_format('HTTP_REFERER', isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : '(none)');
     $body .= $this->_format('Time', date('H:i:s'));
     $body .= $this->_format('_GET', print_r($_GET, true));
     $body .= $this->_format('_POST', print_r($_POST, true));
     Kwf_Exception_Logger_Abstract::getInstance()->log($this, 'accessdenied', $body);
 }
 public function log()
 {
     if (Kwf_Exception::isDebug()) {
         return false;
     }
     $requestUri = isset($_SERVER['REQUEST_URI']) ? $_SERVER['REQUEST_URI'] : '(none)';
     $ignore = array('/favicon.ico', '/robots.txt');
     if (in_array($requestUri, $ignore)) {
         return false;
     }
     if (substr($requestUri, 0, 7) == '/files/' || substr($requestUri, 0, 12) == '/monitoring/') {
         //TODO: don't hardcode here
         return false;
     }
     $body = '';
     $body .= $this->_format('REQUEST_URI', isset($_SERVER['REQUEST_URI']) ? $_SERVER['REQUEST_URI'] : '(none)');
     $body .= $this->_format('HTTP_REFERER', isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : '(none)');
     $body .= $this->_format('Time', date('H:i:s'));
     Kwf_Exception_Logger_Abstract::getInstance()->log($this, 'notfound', $body);
 }
 public function __call($method, $args)
 {
     $log = date('Y-m-d H:i:s') . " (start) {$this->_serverUrl} {$method} " . Kwf_Setup::getRequestPath() . "\n";
     file_put_contents('log/srpc-call', $log, FILE_APPEND);
     $start = microtime(true);
     $b = Kwf_Benchmark::start('srpc call', $this->_serverUrl . ' ' . $method);
     $params = array('method' => $method, 'arguments' => array(), 'extraParams' => array());
     if (is_array($args) && count($args)) {
         $params['arguments'] = $args;
     }
     if ($this->_extraParams) {
         $params['extraParams'] = $this->_extraParams;
     }
     $params['arguments'] = serialize($params['arguments']);
     $params['extraParams'] = serialize($params['extraParams']);
     if (strpos($params['arguments'], 'Kwf_') !== false || strpos($params['extraParams'], 'Kwf_') !== false) {
         $ex = new Kwf_Exception("a class name with 'Kwf_' must not be sent through srpc client");
         $ex->logOrThrow();
     }
     $response = $this->_performRequest($params);
     $log = date('Y-m-d H:i:s') . ' ' . round(microtime(true) - $start, 2) . "s {$this->_serverUrl} {$method} " . Kwf_Setup::getRequestPath() . "\n";
     file_put_contents('log/srpc-call', $log, FILE_APPEND);
     if ($b) {
         $b->stop();
     }
     try {
         $result = unserialize($response);
     } catch (Exception $e) {
         throw new Kwf_Exception('Srpc Server Response is not serialized: ' . $response);
     }
     if ($result === false) {
         throw new Kwf_Exception('Srpc Server Response is not serialized: ' . $response);
     }
     // result könnte eine Exception sein, wenn ja wird sie weitergeschmissen
     if ($result instanceof Kwf_Exception_Serializable) {
         throw $result->getException();
     } else {
         if ($result instanceof Exception) {
             throw $result;
         }
     }
     return $result;
 }
 private function _checkSingleComponent($components)
 {
     if (count($components) > 1) {
         $ids = array();
         foreach ($components as $c) {
             $ids[] = $c->componentId;
         }
         $e = new Kwf_Exception('getComponentByXxx must not get more than one component but got these: ' . implode(', ', $ids));
         $e->logOrThrow();
     }
 }
 public function render($ignoreCli = false)
 {
     try {
         $exception = $this->getException();
         $msg = $exception->__toString();
         if ($exception instanceof Zend_Db_Adapter_Exception) {
             try {
                 foreach (Kwf_Registry::get('config')->database as $db) {
                     $msg = str_replace($db->password, 'xxxxxx', $msg);
                 }
             } catch (Exception $e) {
             }
         }
         if (!$ignoreCli && PHP_SAPI == 'cli') {
             $this->log();
             file_put_contents('php://stderr', $msg . "\n");
             exit(1);
         }
         class_exists('Kwf_Trl');
         //eventually trigger autoloader
         $view = Kwf_Debug::getView();
         $view->exception = $msg;
         $view->message = $exception->getMessage();
         $view->requestUri = isset($_SERVER['REQUEST_URI']) ? htmlspecialchars($_SERVER['REQUEST_URI']) : '';
         $view->debug = Kwf_Exception::isDebug() || !Kwf_Registry::get('config')->setupFinished;
         try {
             if (Kwf_Registry::get('userModel') && Kwf_Registry::get('userModel')->getAuthedUserRole() == 'admin') {
                 $view->debug = true;
             }
         } catch (Exception $e) {
         }
         if (Kwf_Component_Data_Root::getComponentClass()) {
             $data = null;
             if (isset($_SERVER['HTTP_HOST'])) {
                 //try to get the page of current domain to get correct language
                 $acceptLanguage = isset($_SERVER['HTTP_ACCEPT_LANGUAGE']) ? $_SERVER['HTTP_ACCEPT_LANGUAGE'] : null;
                 try {
                     $data = Kwf_Component_Data_Root::getInstance()->getPageByUrl('http://' . $_SERVER['HTTP_HOST'] . '/', $acceptLanguage);
                 } catch (Exception $e) {
                 }
             }
             if (!$data) {
                 $data = Kwf_Component_Data_Root::getInstance();
             }
             $view->data = $data;
             //can be used for trl
         } else {
             //no components used, use Kwf_Trl object that also has trl() methods
             //HACK, but will work if only trl is used in template
             $view->data = Kwf_Trl::getInstance();
         }
         $header = $this->getHeader();
         $template = $this->getTemplate();
         $template = strtolower(Zend_Filter::filterStatic($template, 'Word_CamelCaseToDash') . '.tpl');
         $this->log();
         if (!headers_sent()) {
             header($header);
             header('Content-Type: text/html; charset=utf-8');
         }
         echo $view->render($template);
     } catch (Exception $e) {
         echo '<pre>';
         echo $this->getException()->__toString();
         echo "\n\n\nError happened while handling exception:";
         echo $e->__toString();
         echo '</pre>';
     }
 }
Exemple #18
0
 private function _getBufferLogFileName()
 {
     if (!isset($this->_bufferLogFileName)) {
         if (Kwf_Config::getValue('debug.dbBuffer')) {
             foreach (glob('cache/model/db-buffer-*') as $i) {
                 $time = (int) substr($i, 15);
                 if (time() - $time > 15) {
                     $bufferSize = file_get_contents($i);
                     $e = new Kwf_Exception("Not written import buffer with size '{$bufferSize}' found (age: " . (time() - $time) . "): '{$i}'");
                     $e->logOrThrow();
                 }
             }
             $this->_bufferLogFileName = 'cache/model/db-buffer-' . time() . '-' . uniqid();
         } else {
             $this->_bufferLogFileName = false;
         }
     }
     return $this->_bufferLogFileName;
 }
 private function _parse($html)
 {
     $html = preg_replace('/&([a-z0-9#]{2,5});/i', '+$1;', $html);
     $html = str_replace('\\n', ' ', $html);
     $this->_parser = xml_parser_create();
     xml_set_object($this->_parser, $this);
     xml_set_element_handler($this->_parser, '_startElement', '_endElement');
     xml_set_character_data_handler($this->_parser, '_characterData');
     xml_set_default_handler($this->_parser, '_characterData');
     $html = preg_replace('#<kwc(.*?)>#', '{kwc$1}', $html);
     $this->_ret = '';
     $result = xml_parse($this->_parser, "<BODY>" . $html . "</BODY>", true);
     if (!$result) {
         // wenn man ein nicht geschlossenes <br> rein gibt, schreit er hier,
         // macht aber normal weiter. wenns zu oft vorkommt, evtl. exception
         // entfernen und ignorieren, oder was andres überlegen :-)
         $errorCode = xml_get_error_code($this->_parser);
         $ex = new Kwf_Exception("Mail HtmlParser XML Error {$errorCode}: " . xml_error_string($errorCode));
         $ex->logOrThrow();
     }
     //replace spaces in links (otherwise there would be a linebreak inside the link after wordwrap)
     $this->_ret = preg_replace_callback('/{kwc[^}]+}/', create_function('$data', 'return str_replace(" ", "*kwfSpace*", $data[0]);'), $this->_ret);
     //make a linebreak after 72 chars
     $this->_ret = wordwrap($this->_ret, 75, "\n", false);
     //reconstruct spaces inside links
     $this->_ret = preg_replace_callback('/{kwc[^}]+}/', create_function('$data', 'return str_replace("*kwfSpace*", " ", $data[0]);'), $this->_ret);
     $this->_ret = preg_replace('#{kwc(.*?)}#', '<kwc$1>', $this->_ret);
     return $this->_ret;
 }
 public function __construct($message = 'This functionality is not yet implemented')
 {
     parent::__construct($message);
 }
 public function getTemplateVars()
 {
     $ex = new Kwf_Exception(get_class($this) . ' must only be used as a page type.');
     $ex->logOrThrow();
     return parent::getTemplateVars();
 }
 public function startAction()
 {
     $this->_helper->viewRenderer->setNoRender(true);
     $model = Kwf_Model_Abstract::getInstance('Kwc_Newsletter_Model');
     $procs = array();
     while (true) {
         $select = $model->select()->where(new Kwf_Model_Select_Expr_Or(array(new Kwf_Model_Select_Expr_Equal('status', 'start'), new Kwf_Model_Select_Expr_And(array(new Kwf_Model_Select_Expr_Equal('status', 'startLater'), new Kwf_Model_Select_Expr_LowerEqual('start_date', new Kwf_DateTime(time())))), new Kwf_Model_Select_Expr_Equal('status', 'sending'))));
         $rows = $model->getRows($select);
         $activeCountRows = count($rows);
         foreach ($rows as $newsletterRow) {
             if ($newsletterRow->status != 'sending') {
                 $newsletterRow->resume_date = date('Y-m-d H:i:s');
                 $newsletterRow->status = 'sending';
                 $newsletterRow->save();
             }
             if (!isset($procs[$newsletterRow->id])) {
                 $procs[$newsletterRow->id] = array();
             }
             //remove stopped processes (might stop because of memory limit or simply crash for some reason)
             foreach ($procs[$newsletterRow->id] as $k => $p) {
                 if (!$p->isRunning()) {
                     if ($this->_getParam('debug')) {
                         echo "process " . $p->getPid() . " stopped...\n";
                     }
                     unset($procs[$newsletterRow->id][$k]);
                 }
             }
             $s = new Kwf_Model_Select();
             $s->whereEquals('newsletter_id', $newsletterRow->id);
             $s->whereNull('send_process_pid');
             if (!$newsletterRow->getModel()->getDependentModel('Queue')->countRows($s)) {
                 $newsletterRow->status = 'finished';
                 $newsletterRow->save();
                 if ($this->_getParam('debug')) {
                     echo "Newsletter finished.\n";
                 }
                 //give send processes time to finish
                 sleep(5);
                 //delete "hanging" queue entries
                 $s = new Kwf_Model_Select();
                 $s->whereEquals('newsletter_id', $newsletterRow->id);
                 foreach ($newsletterRow->getModel()->getDependentModel('Queue')->getRows($s) as $queueRow) {
                     $newsletterRow->getModel()->getDependentModel('QueueLog')->createRow(array('newsletter_id' => $queueRow->newsletter_id, 'recipient_model' => $queueRow->recipient_model, 'recipient_id' => $queueRow->recipient_id, 'status' => 'failed', 'send_date' => date('Y-m-d H:i:s')))->save();
                     $msg = "Newsletter finished but queue entry with pid {$queueRow->send_process_pid} still exists: {$queueRow->recipient_id} {$queueRow->searchtext}";
                     $e = new Kwf_Exception($msg);
                     $e->logOrThrow();
                     echo $msg . "\n";
                     $queueRow->delete();
                 }
                 continue;
             }
             if ($this->_getParam('debug')) {
                 echo count($procs[$newsletterRow->id]) . " running processes\n";
             }
             $numOfProcesses = 1;
             if ($newsletterRow->mails_per_minute == 'unlimited') {
                 $numOfProcesses = $this->_getParam('maxProcesses');
                 if (!$numOfProcesses) {
                     $numOfProcesses = 3;
                 }
             }
             while (count($procs[$newsletterRow->id]) < $numOfProcesses) {
                 $cmd = "php bootstrap.php newsletter send --newsletterId={$newsletterRow->id}";
                 if ($this->_getParam('debug')) {
                     $cmd .= " --debug";
                 }
                 if ($this->_getParam('benchmark')) {
                     $cmd .= " --benchmark";
                 }
                 if ($this->_getParam('verbose')) {
                     $cmd .= " --verbose";
                 }
                 $descriptorspec = array(1 => STDOUT, 2 => STDERR);
                 $p = new Kwf_Util_Proc($cmd, $descriptorspec);
                 $procs[$newsletterRow->id][] = $p;
                 if ($this->_getParam('debug')) {
                     echo "\n*** started new process with PID " . $p->getPid() . "\n";
                     echo $cmd . "\n";
                 }
                 sleep(3);
                 //don't start all processes at the same time
             }
             if ($this->_getParam('debug')) {
                 echo "Newletter {$newsletterRow->id}: currently sending with " . round($newsletterRow->getCurrentSpeed()) . " mails/min\n";
             }
         }
         Kwf_Model_Abstract::clearAllRows();
         if ($this->_getParam('debug')) {
             echo "sleep 10 secs.\n";
         }
         sleep(10);
     }
 }
 public static function process($logModel = 'Kwf_Util_Wirecard_LogModel', $secret = null)
 {
     Zend_Registry::get('config')->debug->error->log = true;
     //log immer aktivieren, da dieser request von wirecard gemacht wird
     ignore_user_abort(true);
     if (!$secret) {
         $secret = Kwf_Registry::get('config')->wirecard->secret;
     }
     $paymentState = isset($_POST["paymentState"]) ? $_POST["paymentState"] : "";
     if (strcmp($paymentState, "CANCEL") == 0) {
         /// the transaction was cancelled.
         $message = "Transaktion wurde abgebrochen.";
     } else {
         if (strcmp($paymentState, "FAILURE") == 0) {
             // there was something wrong with the initiation or an fatal error during the transaction processing occured
             $message = $_POST["message"];
             $e = new Kwf_Exception('Wirecard Transaction Failed: ' . $message);
             $e->log();
             $message = "Fehler bei der Initiierung: " . $message;
         } else {
             if (strcmp($paymentState, "SUCCESS") == 0) {
                 $responseFingerprintOrder = $_POST["responseFingerprintOrder"];
                 $responseFingerprint = $_POST["responseFingerprint"];
                 $str4responseFingerprint = "";
                 $mandatoryFingerPrintFields = 0;
                 $secretUsed = 0;
                 $order = explode(",", $responseFingerprintOrder);
                 for ($i = 0; $i < count($order); $i++) {
                     $key = $order[$i];
                     // check if there are enough fields in den responsefingerprint
                     if (strcmp($key, "paymentState") == 0 && strlen($_POST[$order[$i]]) > 0) {
                         $mandatoryFingerPrintFields++;
                     }
                     if (strcmp($key, "orderNumber") == 0 && strlen($_POST[$order[$i]]) > 0) {
                         $mandatoryFingerPrintFields++;
                     }
                     if (strcmp($key, "paymentType") == 0 && strlen($_POST[$order[$i]]) > 0) {
                         $mandatoryFingerPrintFields++;
                     }
                     if (strcmp($key, "secret") == 0) {
                         $str4responseFingerprint .= $secret;
                         $secretUsed = 1;
                     } else {
                         $str4responseFingerprint .= $_POST[$order[$i]];
                     }
                 }
                 // recalc the fingerprint
                 $responseFingerprintCalc = md5($str4responseFingerprint);
                 if (strcmp($responseFingerprintCalc, $responseFingerprint) == 0 && $mandatoryFingerPrintFields == 3 && $secretUsed == 1) {
                     // everything is ok. store the successfull payment somewhere
                     // please store at least the paymentType and the orderNumber additional to the orderinformation,
                     // otherwise you will never find the transaction again.
                     $m = Kwf_Model_Abstract::getInstance($logModel);
                     $row = $m->createRow();
                     foreach ($order as $i) {
                         if ($i != 'secret') {
                             $row->{$i} = $_POST[$i];
                         }
                     }
                     $row->custom = $_POST['custom'];
                     $row->save();
                     // e.g.  something like
                     // checkBasketIntegrety($amount, $currency, $basketId);
                     // storeAndCloseBasket($paymentType, $orderNumber, $basketId);
                     $message = "Vielen Dank für Ihre Bestellung.";
                 } else {
                     // there is something strange. maybe an unauthorized call of this page or a wrong secret
                     $e = new Kwf_Exception('Wirecard Transaction Failed: Can\'t verify');
                     $e->log();
                 }
             } else {
                 // unauthorized call of this page
                 $e = new Kwf_Exception('Wirecard Transaction Failed: Invalid Payment Status: ' . $paymentState);
                 $e->log();
             }
         }
     }
     echo 'Pfeift';
     exit;
 }
 public static function generateCode()
 {
     $preloadIncludePaths = array();
     $namespaces = (require VENDOR_PATH . '/composer/autoload_namespaces.php');
     $ret = array();
     foreach ($namespaces as $ns => $dirs) {
         $preloadIncludePaths = array_merge($preloadIncludePaths, $dirs);
     }
     $ret = "<?php\n";
     $ret .= "\$cwd = getcwd();\n";
     $preloadClasses = array('Kwf_Benchmark', 'Kwf_Loader', 'Kwf_Debug');
     $ret .= "if (!class_exists('Kwf_Loader', false)) {\n";
     $ret .= self::_generatePreloadClassesCode($preloadClasses, $preloadIncludePaths);
     $ret .= "}\n";
     $ret .= "Kwf_Benchmark::\$startTime = microtime(true);\n";
     $ret .= "\n";
     //override the default cache (/tmp) dir used by Zend_Cache_Backend to have the cache per web
     $ret .= "\$_SERVER['TMP'] = 'cache/zend';\n";
     //only replace configured value to avoid spoofing
     //required eg. behind load balancers
     if (Kwf_Config::getValueArray('server.replaceVars.remoteAddr')) {
         $a = Kwf_Config::getValueArray('server.replaceVars.remoteAddr');
         if (substr($a['if'], -2) == '.*') {
             $comparison = "substr(\$_SERVER['REMOTE_ADDR'], 0, " . (strlen($a['if']) - 1) . ") == '" . substr($a['if'], 0, -1) . "'";
         } else {
             $comparison = "\$_SERVER['REMOTE_ADDR'] == '{$a['if']}'";
         }
         $ret .= "\nif (isset(\$_SERVER['REMOTE_ADDR']) && {$comparison} && isset(\$_SERVER['{$a['replace']}'])) {\n";
         $ret .= "    \$_SERVER['REMOTE_ADDR'] = \$_SERVER['{$a['replace']}'];\n";
         if (isset($a['removeTrailing'])) {
             $ret .= "    if (substr(\$_SERVER['REMOTE_ADDR'], -" . strlen($a['removeTrailing']) . ") == '" . $a['removeTrailing'] . "') {\n";
             $ret .= "        \$_SERVER['REMOTE_ADDR'] = substr(\$_SERVER['REMOTE_ADDR'], 0, -" . strlen($a['removeTrailing']) . ");\n";
             $ret .= "    }\n";
         }
         if (isset($a['removePattern'])) {
             $ret .= "    \$_SERVER['REMOTE_ADDR'] = preg_replace('/" . $a['removePattern'] . "/', '', \$_SERVER['REMOTE_ADDR']);\n";
         }
         $ret .= "}\n";
     }
     //try different values, if one spoofs this this is no security issue
     $ret .= "if (isset(\$_SERVER['HTTP_SSL_SESSION_ID'])) \$_SERVER['HTTPS'] = 'on';\n";
     $ret .= "if (isset(\$_SERVER['HTTP_SESSION_ID_TAG'])) \$_SERVER['HTTPS'] = 'on';\n";
     $ret .= "if (isset(\$_SERVER['HTTP_X_FORWARDED_PROTO']) && \$_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https') {\n";
     $ret .= "    \$_SERVER['HTTPS'] = 'on';\n";
     $ret .= "}\n";
     if (VENDOR_PATH == '../vendor') {
         $kwfPath = '..';
     } else {
         $kwfPath = VENDOR_PATH . '/koala-framework/koala-framework';
     }
     $ret .= "if (!defined('KWF_PATH')) define('KWF_PATH', '{$kwfPath}');\n";
     $ret .= "if (!defined('VENDOR_PATH')) define('VENDOR_PATH', 'vendor');\n";
     $ip = array();
     foreach (include VENDOR_PATH . '/composer/include_paths.php' as $p) {
         if (VENDOR_PATH == '../vendor') {
             $cwd = getcwd();
             $cwd = substr($cwd, 0, strrpos($cwd, '/'));
             self::_verifyPathInParentPath($p, $cwd);
             $p = '../' . substr($p, strlen($cwd) + 1);
         } else {
             self::_verifyPathInParentPath($p, getcwd());
             $p = substr($p, strlen(getcwd()) + 1);
         }
         $ip[] = "'.\$cwd.'/" . $p;
     }
     $ip[] = '.';
     foreach (Kwf_Config::getValueArray('includepath') as $t => $p) {
         if ($p) {
             $ip[] = $p;
         }
     }
     $ip = array_unique($ip);
     $ret .= "Kwf_Loader::setIncludePath('" . implode(PATH_SEPARATOR, $ip) . "');\n";
     $ret .= "\n";
     $ret .= "\n";
     if (Kwf_Exception::isDebug()) {
         $ret .= "error_reporting(E_ALL | E_STRICT | E_DEPRECATED);\n";
         $ret .= "set_error_handler(array('Kwf_Debug', 'handleError'), E_ALL | E_STRICT | E_DEPRECATED);\n";
     } else {
         $ret .= "error_reporting(E_ALL & ~E_STRICT);\n";
         $ret .= "set_error_handler(array('Kwf_Debug', 'handleError'), E_ALL & ~E_STRICT);\n";
     }
     $ret .= "set_exception_handler(array('Kwf_Debug', 'handleException'));\n";
     $ret .= "\n";
     $ret .= "\$requestUri = isset(\$_SERVER['REQUEST_URI']) ? \$_SERVER['REQUEST_URI'] : null;\n";
     if (Kwf_Setup::getBaseUrl()) {
         $ret .= "if (\$requestUri !== null) {\n";
         $ret .= "    if (substr(\$requestUri, 0, " . strlen(Kwf_Setup::getBaseUrl()) . ") != '" . Kwf_Setup::getBaseUrl() . "') {\n";
         $ret .= "        echo 'Invalid baseUrl, expected \\'" . Kwf_Setup::getBaseUrl() . "\\'';\n";
         $ret .= "        exit;\n";
         $ret .= "    }\n";
         $ret .= "    \$requestUri = substr(\$requestUri, " . strlen(Kwf_Setup::getBaseUrl()) . ");\n";
         $ret .= "}\n";
     }
     $ret .= "\n";
     if (Kwf_Config::getValue('debug.benchmark') || Kwf_Config::getValue('debug.benchmarklog')) {
         //vor registerAutoload aufrufen damit wir dort benchmarken können
         $ret .= "Kwf_Benchmark::enable();\n";
     } else {
         $ret .= "if (isset(\$_REQUEST['KWF_BENCHMARK'])) {\n";
         foreach (Kwf_Config::getValueArray('debug.benchmarkActivatorIp') as $activatorIp) {
             $ret .= "    if (\$_SERVER['REMOTE_ADDR'] == '{$activatorIp}') Kwf_Benchmark::enable();\n";
         }
         $ret .= "}\n";
     }
     $ret .= "Kwf_Loader::registerAutoload();\n";
     $ret .= "\n";
     $configSection = call_user_func(array(Kwf_Setup::$configClass, 'getDefaultConfigSection'));
     $ret .= "Kwf_Setup::\$configSection = '" . $configSection . "';\n";
     $ret .= "//here to be as fast as possible (and have no session)\n";
     $ret .= "if (\$requestUri == '/kwf/json-progress-status'\n";
     $ret .= ") {\n";
     $ret .= "    Kwf_Util_ProgressBar_DispatchStatus::dispatch();\n";
     $ret .= "}\n";
     $ret .= "\n";
     $ret .= "//here to have less dependencies\n";
     $ret .= "if (\$requestUri == '/kwf/check-config'\n";
     $ret .= ") {\n";
     $ret .= "    Kwf_Util_Check_Config::dispatch();\n";
     $ret .= "}\n";
     $ret .= "if (PHP_SAPI == 'cli' && isset(\$_SERVER['argv'][1]) && \$_SERVER['argv'][1] == 'check-config') {\n";
     $ret .= "    Kwf_Util_Check_Config::dispatch();\n";
     $ret .= "}\n";
     $ret .= "\$ml = ini_get('memory_limit');\n";
     $ret .= "if (strtoupper(substr(\$ml, -1)) == 'M') {\n";
     $ret .= "    if ((int)substr(\$ml, 0, -1) < 128) {\n";
     $ret .= "        ini_set('memory_limit', '128M');\n";
     $ret .= "    }\n";
     $ret .= "}\n";
     if (Kwf_Config::getValue('debug.error.log')) {
         $ret .= "ini_set('display_errors', false);\n";
     }
     if (function_exists('mb_internal_encoding')) {
         $ret .= "mb_internal_encoding('UTF-8');\n";
     }
     $ret .= "ini_set('default_charset', 'UTF-8');\n";
     $ret .= "umask(000); //nicht 002 weil wwwrun und kwcms in unterschiedlichen gruppen\n";
     //this is *NOT* recommended but still works somehow
     $ret .= "if (get_magic_quotes_gpc()) Kwf_Util_UndoMagicQuotes::undoMagicQuotes();\n";
     if (Kwf_Config::getValue('debug.firephp') || Kwf_Config::getValue('debug.querylog')) {
         $ret .= "if (PHP_SAPI != 'cli') {\n";
         if (Kwf_Config::getValue('debug.firephp')) {
             $ret .= "    require_once '" . Kwf_Config::getValue('externLibraryPath.firephp') . "/FirePHPCore/FirePHP.class.php';\n";
             $ret .= "    FirePHP::init();\n";
             $ret .= "    ob_start();\n";
         }
         $ret .= "}\n";
     }
     $ret .= "register_shutdown_function(array('Kwf_Setup', 'shutDown'));\n";
     $ret .= "if (!class_exists('Kwf_Config', false)) {\n";
     $preloadClasses = array('Kwf_Config', 'Kwf_Cache_Simple', 'Kwf_Cache_SimpleStatic');
     $ret .= self::_generatePreloadClassesCode($preloadClasses, $preloadIncludePaths);
     $ret .= "    if (substr(\$requestUri, 0, 8) != '/assets/') {\n";
     $preloadClasses = array();
     $preloadClasses[] = 'Zend_Registry';
     $preloadClasses[] = 'Kwf_Registry';
     $preloadClasses[] = 'Kwf_Trl';
     $preloadClasses[] = 'Kwf_Util_SessionHandler';
     $preloadClasses[] = 'Zend_Session';
     $preloadClasses[] = 'Kwf_Benchmark_Counter';
     $preloadClasses[] = 'Kwf_Benchmark_Counter_Apc';
     if (Kwf_Component_Data_Root::getComponentClass()) {
         //only load component related classes if it is a component web
         $preloadClasses[] = 'Kwf_Component_Data';
         $preloadClasses[] = 'Kwf_Component_Data_Root';
         $preloadClasses[] = 'Kwf_Component_Settings';
         $preloadClasses[] = 'Kwf_Component_Renderer_Abstract';
         $preloadClasses[] = 'Kwf_Component_Renderer';
         $preloadClasses[] = 'Kwf_Component_Cache';
         $preloadClasses[] = 'Kwf_Component_Cache_Mysql';
         $preloadClasses[] = 'Kwf_Component_Cache_Memory';
         $preloadClasses[] = 'Kwf_Component_Abstract_ContentSender_Abstract';
         $preloadClasses[] = 'Kwf_Component_Abstract_ContentSender_Default';
     }
     $ret .= self::_generatePreloadClassesCode($preloadClasses, $preloadIncludePaths);
     $ret .= "    } else {\n";
     $preloadClasses = array();
     $preloadClasses[] = 'Kwf_Assets_Loader';
     $preloadClasses[] = 'Kwf_Media_Output';
     $ret .= self::_generatePreloadClassesCode($preloadClasses, $preloadIncludePaths);
     $ret .= "    }\n";
     $ret .= "}\n";
     Kwf_Cache_Simple::$backend = null;
     //unset to re-calculate
     $ret .= "Kwf_Cache_Simple::\$backend = '" . Kwf_Cache_Simple::getBackend() . "';\n";
     $cacheUniquePrefix = Kwf_Config::getValue('cachePrefix');
     //can be '' when only a single web runs in memcache instance
     if ($cacheUniquePrefix === null) {
         $cacheUniquePrefix = getcwd() . '-' . Kwf_Setup::getConfigSection() . '-';
     }
     $ret .= "Kwf_Cache_Simple::\$uniquePrefix = '" . $cacheUniquePrefix . "';\n";
     if (Kwf_Config::getValue('cacheSimpleNamespace')) {
         $ret .= "Kwf_Cache_Simple::\$namespace = '" . Kwf_Config::getValue('cacheSimpleNamespace') . "';\n";
     }
     unset($cacheUniquePrefix);
     if (Kwf_Config::getValue('server.memcache.host')) {
         $host = Kwf_Config::getValue('server.memcache.host');
         $ret .= "Kwf_Cache_Simple::\$memcacheHost = '" . $host . "';\n";
         $ret .= "Kwf_Cache_Simple::\$memcachePort = '" . Kwf_Config::getValue('server.memcache.port') . "';\n";
     }
     if (Kwf_Config::getValue('server.redis.host')) {
         $host = Kwf_Config::getValue('server.redis.host');
         $ret .= "Kwf_Cache_Simple::\$redisHost = '" . $host . "';\n";
         $ret .= "Kwf_Cache_Simple::\$redisPort = '" . Kwf_Config::getValue('server.redis.port') . "';\n";
     }
     $ret .= "if (substr(\$requestUri, 0, 8) == '/assets/') {\n";
     $ret .= "    \$url = \$requestUri;\n";
     $ret .= "    if (strpos(\$url, '?') !== false) {\n";
     $ret .= "        \$url = substr(\$url, 0, strpos(\$url, '?'));\n";
     $ret .= "    }\n";
     $dispatcherClass = Kwf_Config::getValue('assets.dispatcherClass');
     if (!$dispatcherClass) {
         $dispatcherClass = 'Kwf_Assets_Dispatcher';
     }
     $ret .= "    \$dispatcher = new " . $dispatcherClass . "();\n";
     $ret .= "    \$dispatcher->dispatch(\$url);\n";
     $ret .= "    Kwf_Assets_Loader::load(\$url);\n";
     $ret .= "}\n";
     if (Kwf_Config::getValue('debug.benchmarkCounter')) {
         //vor registerAutoload aufrufen damit wir dort benchmarken können
         $ret .= "Kwf_Benchmark::enableLog();\n";
     }
     $ret .= "Zend_Registry::setClassName('Kwf_Registry');\n";
     $ret .= "\$host = isset(\$_SERVER['HTTP_HOST']) ? \$_SERVER['HTTP_HOST'] : null;\n";
     $ret .= "session_name('SESSION_" . Kwf_Config::getValue('application.id') . "');\n";
     //up here to have less dependencies or broken redirect
     $ret .= "\n";
     $ret .= "if (substr(\$requestUri, 0, 14) == '/kwf/util/apc/'\n";
     $ret .= ") {\n";
     $ret .= "    Kwf_Util_Apc::dispatchUtils();\n";
     $ret .= "}\n";
     $ret .= "\n";
     $ret .= "if (\$requestUri == '/kwf/check') {\n";
     $ret .= "    Kwf_Util_Check::dispatch();\n";
     $ret .= "}\n";
     $ret .= "\n";
     $ret .= "session_set_cookie_params(\n";
     $ret .= " 0,";
     //lifetime
     $ret .= " '" . Kwf_Setup::getBaseUrl() . "/',";
     //path
     $ret .= " null,";
     //domain
     $ret .= " isset(\$_SERVER['HTTPS']),";
     //secure
     $ret .= " true";
     //httponly
     $ret .= ");\n";
     $ret .= "\n";
     //store session data in memcache if avaliable
     if (Kwf_Config::getValue('server.redis.host')) {
         $ret .= "\nif (PHP_SAPI != 'cli') {\n";
         $ret .= "    ini_set('session.save_handler', 'redis');\n";
         $ret .= "    ini_set('session.save_path', 'tcp://" . Kwf_Config::getValue('server.redis.host') . ":" . Kwf_Config::getValue('server.redis.port') . "?prefix=" . substr(md5(Kwf_Cache_Simple::getUniquePrefix()), 0, 10) . "');\n";
         $ret .= "}\n";
     } else {
         if (Kwf_Config::getValue('server.memcache.host') && Kwf_Setup::hasDb()) {
             $ret .= "\nif (PHP_SAPI != 'cli') Kwf_Util_SessionHandler::init();\n";
         }
     }
     $ret .= "\n\$preLogin = false;\n";
     // Falls redirectToDomain eingeschalten ist, umleiten
     if (Kwf_Config::getValue('server.redirectToDomain')) {
         $ret .= "if (\$host && substr(\$requestUri, 0, 8) != '/assets/') {\n";
         $ret .= "    \$redirect = false;\n";
         if ($domains = Kwf_Config::getValueArray('kwc.domains')) {
             $ret .= "    \$domainMatches = false;\n";
             foreach ($domains as $domain) {
                 $ret .= "    if ('{$domain['domain']}' == \$host) \$domainMatches = true;\n";
                 if (isset($domain['preliminaryDomain'])) {
                     $ret .= "    if ('{$domain['preliminaryDomain']}' == \$host) {\n";
                     $ret .= "        \$domainMatches = true;\n";
                     if (isset($domain['preliminaryDomainPreLogin'])) {
                         //preliminaryDomainPreLogin set for this domain
                         if ($domain['preliminaryDomainPreLogin']) {
                             $ret .= "        \$preLogin = true;\n";
                         }
                     } else {
                         if (Kwf_Config::getValue('server.preliminaryDomainPreLogin')) {
                             //as default use global
                             $ret .= "        \$preLogin = true;\n";
                         }
                     }
                     $ret .= "    }\n";
                 }
             }
             $ret .= "    if (!\$domainMatches) {\n";
             foreach ($domains as $domain) {
                 if (isset($domain['pattern'])) {
                     $ret .= "\n";
                     $ret .= "        //pattern\n";
                     $ret .= "        if (!\$domainMatches && preg_match('/{$domain['pattern']}/', \$host)) {\n";
                     $ret .= "            \$domainMatches = true;\n";
                     if (isset($domain['noRedirectPattern'])) {
                         $ret .= "\n";
                         $ret .= "            //noRedirectPattern\n";
                         $ret .= "            if (!preg_match('/{$domain['noRedirectPattern']}/', \$host)) {\n";
                         $ret .= "                \$redirect = '{$domain['domain']}';\n";
                         $ret .= "            }\n";
                     } else {
                         $ret .= "            \$redirect = '{$domain['domain']}';\n";
                     }
                     $ret .= "        }\n";
                 }
             }
             $ret .= "    }\n";
             $ret .= "    if (!\$domainMatches) {\n";
             $ret .= "        \$redirect = '" . Kwf_Config::getValue('server.domain') . "';\n";
             $ret .= "    }\n";
         } else {
             if (Kwf_Config::getValue('server.domain')) {
                 $ret .= "    if (\$host == '" . Kwf_Config::getValue('server.domain') . "') {\n";
                 $ret .= "        //noop\n";
                 if (Kwf_Config::getValue('server.preliminaryDomain')) {
                     $ret .= "    } else if (\$host == '" . Kwf_Config::getValue('server.preliminaryDomain') . "') {\n";
                     if (Kwf_Config::getValue('server.preliminaryDomainPreLogin')) {
                         $ret .= "        \$preLogin = true;\n";
                     }
                 }
                 $ret .= "    } else {\n";
                 if (Kwf_Config::getValue('server.noRedirectPattern')) {
                     $ret .= "        if (!preg_match('/" . Kwf_Config::getValue('server.noRedirectPattern') . "/', \$host)) {\n";
                     $ret .= "            \$redirect = '" . Kwf_Config::getValue('server.domain') . "';\n";
                     $ret .= "        }\n";
                 } else {
                     $ret .= "        \$redirect = '" . Kwf_Config::getValue('server.domain') . "';\n";
                 }
                 $ret .= "    }\n";
             }
         }
         $ret .= "    if (\$redirect) {\n";
         $ret .= "        \$target = Kwf_Model_Abstract::getInstance('Kwf_Util_Model_Redirects')\n";
         $ret .= "            ->findRedirectUrl('domainPath', \$host.\$_SERVER['REQUEST_URI']);\n";
         $ret .= "        if (!\$target) {\n";
         $ret .= "            \$target = Kwf_Model_Abstract::getInstance('Kwf_Util_Model_Redirects')\n";
         $ret .= "                ->findRedirectUrl('domain', \$host);\n";
         $ret .= "        }\n";
         $ret .= "        if (\$target) {\n";
         $ret .= "            header('Location: '.\$target, true, 301);\n";
         $ret .= "        } else {\n";
         $ret .= "            //redirect to main domain (server.domain)\n";
         $ret .= "            header('Location: http://'.\$redirect.\$_SERVER['REQUEST_URI'], true, 301);\n";
         $ret .= "        }\n";
         $ret .= "        exit;\n";
         $ret .= "    }\n";
         $ret .= "}\n";
     }
     if (Kwf_Config::getValue('server.https') !== 'unknown') {
         $redirectHttpsCode = "    if (\$_SERVER['REQUEST_METHOD'] != 'GET') {\n";
         $redirectHttpsCode .= "        header('HTTP/1.1 400 Bad Request');\n";
         $redirectHttpsCode .= "        echo 'Invalid protocol, https required';\n";
         $redirectHttpsCode .= "        exit;\n";
         $redirectHttpsCode .= "    }\n";
         $redirectHttpsCode .= "    \$redirect = 'https://'.\$_SERVER['HTTP_HOST'].\$_SERVER['REQUEST_URI'];\n";
         $redirectHttpsCode .= "    header('Location: '.\$redirect, true, 301);\n";
         $redirectHttpsCode .= "    Kwf_Benchmark::shutDown();\n";
         $redirectHttpsCode .= "    exit;\n";
         $redirectHttpCode = str_replace('https', 'http', $redirectHttpsCode);
         $ret .= "if (PHP_SAPI != 'cli' && isset(\$_SERVER['HTTP_HOST']) && substr(\$requestUri, 0, 7) != '/media/') {\n";
         if (!Kwf_Config::getValue('server.https')) {
             $ret .= "if (isset(\$_SERVER['HTTPS'])) {\n";
             $ret .= "    {$redirectHttpCode}";
             $ret .= "}\n";
         } else {
             if ($domains = Kwf_Config::getValueArray('server.httpsDomains')) {
                 $ret .= "\$domains = array(";
                 foreach ($domains as $d) {
                     if (substr($d, 0, 2) != '*.') {
                         $ret .= "'" . $d . "'=>true, ";
                     }
                 }
                 $ret .= ");\n";
                 $ret .= "\$supportsHttps = isset(\$domains[\$_SERVER['HTTP_HOST']]);\n";
                 foreach ($domains as $d) {
                     if (substr($d, 0, 2) == '*.') {
                         $ret .= "    if (!\$supportsHttps && '" . substr($d, 1) . "' == substr(\$_SERVER['HTTP_HOST'], strpos(\$_SERVER['HTTP_HOST'], '.'))) {\n";
                         $ret .= "        \$supportsHttps = true;\n";
                         $ret .= "    }\n";
                     }
                 }
                 $ret .= "if (\$supportsHttps != isset(\$_SERVER['HTTPS'])) {\n";
                 $ret .= "    if (\$supportsHttps) {\n";
                 $ret .= "        {$redirectHttpsCode}";
                 $ret .= "    } else {\n";
                 $ret .= "        {$redirectHttpCode}";
                 $ret .= "    }\n";
                 $ret .= "}\n";
             } else {
                 $ret .= "if (!isset(\$_SERVER['HTTPS'])) {\n";
                 $ret .= "{$redirectHttpsCode}";
                 $ret .= "}\n";
             }
         }
         $ret .= "}\n";
     }
     if (Kwf_Config::getValue('preLogin')) {
         $ret .= "if (PHP_SAPI != 'cli' && Kwf_Setup::getRequestPath()!==false) {\n";
         $ret .= "    \$preLogin = true;\n";
         $ret .= "}\n";
     }
     $ret .= "if (\$preLogin) {\n";
     $ret .= "    \$ignore = false;\n";
     foreach (Kwf_Config::getValueArray('preLoginIgnore') as $i) {
         $ret .= "    if (substr(\$_SERVER['REDIRECT_URL'], 0, " . strlen($i) . ") == '{$i}') \$ignore = true;\n";
     }
     foreach (Kwf_Config::getValueArray('preLoginIgnoreIp') as $i) {
         if (substr($i, -1) == '*') {
             $i = substr($i, 0, -1);
             $ret .= "    if (substr(\$_SERVER['REMOTE_ADDR'], 0, " . strlen($i) . ") == '{$i}') \$ignore = true;\n";
         } else {
             if (substr($i, 0, 1) == '*') {
                 $i = substr($i, 1);
                 $ret .= "    if (substr(\$_SERVER['REMOTE_ADDR'], -" . strlen($i) . ") == '{$i}') \$ignore = true;\n";
             } else {
                 $ret .= "    if (\$_SERVER['REMOTE_ADDR'] == '{$i}') \$ignore = true;\n";
             }
         }
     }
     $ret .= "    if (!\$ignore) {\n";
     $ret .= "        Kwf_Setup::checkPreLogin('" . Kwf_Config::getValue('preLoginUser') . "', '" . Kwf_Config::getValue('preLoginPassword') . "');\n";
     $ret .= "    }\n";
     $ret .= "}\n";
     if ($parameters = Kwf_Config::getValueArray('parameterToCookie')) {
         foreach ($parameters as $parameter) {
             $ret .= "if (isset(\$_GET['" . $parameter . "'])) setcookie('" . $parameter . "', \$_GET['" . $parameter . "'], 0, '/');\n";
         }
     }
     if ($tl = Kwf_Config::getValue('debug.timeLimit')) {
         $ret .= "set_time_limit({$tl});\n";
     }
     $ret .= "if (isset(\$_GET['kwcPreview'])) {\n";
     $ret .= "    \$role = Kwf_Registry::get('userModel')->getAuthedUserRole();\n";
     $ret .= "    if (!Kwf_Registry::get('acl')->isAllowed(\$role, 'kwf_component_preview', 'view')) {\n";
     $ret .= "        header('Location: /admin/component/preview/redirect/?url='.urlencode(\$_SERVER['REQUEST_URI']));\n";
     $ret .= "        exit;\n";
     $ret .= "    }\n";
     $ret .= "    Kwf_Component_Data_Root::setShowInvisible(true);\n";
     $ret .= "}\n";
     return $ret;
 }
 public function getItemIds($count = null, $offset = null)
 {
     $select = $this->_getSelect();
     if (!$select) {
         return array();
     }
     if ($count) {
         if ($select->hasPart(Kwf_Model_Select::LIMIT_COUNT)) {
             $ex = new Kwf_Exception("Can't use getItemIds with limit in select when \$count paramter is given. You probably should disable paging for {$this->getData()->componentClass}.");
             $ex->logOrThrow();
         }
         $select->limit($count, $offset);
     }
     $itemDirectory = $this->getData()->parent->getComponent()->getItemDirectory();
     if (is_string($itemDirectory)) {
         $c = Kwc_Abstract::getComponentClassByParentClass($itemDirectory);
         $generator = Kwf_Component_Generator_Abstract::getInstance($c, 'detail');
         $items = $generator->getChildIds(null, $select);
     } else {
         $items = $itemDirectory->getChildIds($select);
     }
     return $items;
 }
 /**
  * Returns variables that can be used in Component.tpl
  * @param e.g. for accessing recipient in Mail_Renderer
  * @return array
  */
 public function getTemplateVars(Kwf_Component_Renderer_Abstract $renderer)
 {
     $ret = array();
     $ret['placeholder'] = $this->_getPlaceholder();
     $ret['rootElementClass'] = self::getRootElementClass($this);
     $ret['bemClass'] = $this->_getBemClass('');
     $ret['data'] = $this->getData();
     $ret['row'] = $this->_getRow();
     $supportedContexts = Kwf_Component_Layout_Abstract::getInstance($this->getData()->componentClass)->getSupportedContexts();
     if ($supportedContexts) {
         $contexts = Kwf_Component_Layout_Abstract::getInstance($this->getData()->componentClass)->getContexts($this->getData());
         if (is_null($contexts)) {
             $e = new Kwf_Exception("Didn't get layout contexts for " . $this->getData()->componentId);
             $e->logOrThrow();
         }
         foreach ($contexts as $ctx) {
             if (!in_array($ctx, $supportedContexts)) {
                 $e = new Kwf_Exception("Master Layout Context " . json_encode($ctx) . " is not supported by " . $this->getData()->componentClass . " for '" . $this->getData()->componentId . "'");
                 $e->logOrThrow();
             }
         }
     }
     return $ret;
 }
 public function render($ignoreCli = false)
 {
     parent::render($ignoreCli);
 }
 public static function executeJobs($jobFrequency, $debug)
 {
     foreach (self::getAllMaintenanceJobs() as $job) {
         if ($job->getFrequency() == $jobFrequency) {
             if ($debug) {
                 echo "executing " . get_class($job) . "\n";
             }
             $maxTime = $job->getMaxTime();
             $t = microtime(true);
             if ($jobFrequency == Kwf_Util_Maintenance_Job_Abstract::FREQUENCY_DAILY || $jobFrequency == Kwf_Util_Maintenance_Job_Abstract::FREQUENCY_HOURLY) {
                 $cmd = "php bootstrap.php maintenance-jobs run-job --job=" . escapeshellarg(get_class($job));
                 if ($debug) {
                     $cmd .= " --debug";
                 }
                 $descriptorspec = array();
                 $pipes = array();
                 $process = proc_open($cmd, $descriptorspec, $pipes);
                 if (!is_resource($process)) {
                     $e = new Kwf_Exception("Couldn't start maintenance job " . get_class($job));
                     $e->logOrThrow();
                     continue;
                 }
                 $retVar = null;
                 while (true) {
                     $status = proc_get_status($process);
                     if (!$status['running']) {
                         $retVar = $status['exitcode'];
                         break;
                     }
                     if (microtime(true) - $t > $maxTime * 2) {
                         //when jobs runs maxTime twice kill it
                         file_put_contents('php://stderr', "\nWARNING: Killing maintenance-jobs process (running > maxTime*2)...\n");
                         proc_terminate($process);
                         break;
                     }
                     sleep(1);
                 }
                 proc_close($process);
                 if ($retVar) {
                     $e = new Kwf_Exception("Maintenance job " . get_class($job) . " failed with exit code {$retVar}");
                     $e->logOrThrow();
                 }
             } else {
                 try {
                     $job->execute($debug);
                 } catch (Exception $e) {
                     file_put_contents('php://stderr', $e->toString() . "\n");
                     if (!$e instanceof Kwf_Exception_Abstract) {
                         $e = new Kwf_Exception_Other($e);
                     }
                     $e->logOrThrow();
                 }
             }
             $t = microtime(true) - $t;
             if ($debug) {
                 echo "executed " . get_class($job) . " in " . round($t, 3) . "s\n";
             }
             if ($t > $maxTime) {
                 $msg = "Maintenance job " . get_class($job) . " took " . round($t, 3) . "s to execute which is above the limit of {$maxTime}.";
                 file_put_contents('php://stderr', $msg . "\n");
                 $e = new Kwf_Exception($msg);
                 $e->logOrThrow();
             }
             if ($debug) {
                 echo "\n";
             }
         }
     }
 }
 public function __construct($message = "Conflict")
 {
     parent::__construct($message, 409);
 }
 protected function _renderJson($exception, $msg)
 {
     $data = array('error' => array('code' => $exception->code, 'errorId' => $exception->getLogId(), 'message' => 'An Error occured. Please try again later'));
     if (Kwf_Exception::isDebug()) {
         $data = array('error' => array('code' => $exception->code, 'errorId' => $exception->getLogId(), 'message' => $exception->message, 'exception' => array(array('message' => $exception->message, 'class' => get_class($exception), 'trace' => $exception->getTrace()))));
     }
     return json_encode($data);
 }