Ejemplo n.º 1
0
 /**
  * iterates through string to replace every
  * {placeholder} with posted data
  * @param string text to parse
  * @param array data to search for placeholders (default $_REQUEST)
  * @param bool if no data found for the place holder do we keep the {...} string in the message
  * @param bool add slashed to the text?
  * @param object user to use in replaceWithUserData (defaults to logged in user)
  */
 public function parseMessageForPlaceHolder($msg, $searchData = null, $keepPlaceholders = true, $addslashes = false, $theirUser = null)
 {
     $this->_parseAddSlases = $addslashes;
     if ($msg == '' || is_array($msg) || strpos($msg, '{') === false) {
         return $msg;
     }
     $msg = str_replace(array('%7B', '%7D'), array('{', '}'), $msg);
     if (is_object($searchData)) {
         $searchData = JArrayHelper::fromObject($searchData);
     }
     //$post	= JRequest::get('post');
     //$$$ rob changed to allow request variables to be parsed as well. I have a sneaky feeling this
     // was set to post for a good reason, but I can't see why now.
     // $$$ hugh - for reasons I don't understand, merging request just doesn't seem to work
     // in some situations, so I'm adding a replaceRequest call here as a bandaid.
     // @TODO $$$ rob can you remember what those situations where? Because doing this is messing up form plugins (e.g redirect) when they do replace on getEmailData()
     // as having the line below commented in causes the request to be used before searchData.
     // FabrikWorker::replaceRequest($msg);
     $post = JRequest::get('request');
     $this->_searchData = is_null($searchData) ? $post : array_merge($post, $searchData);
     $this->_searchData['JUtility::getToken'] = JUtility::getToken();
     $msg = FabrikWorker::replaceWithUserData($msg);
     if (!is_null($theirUser)) {
         $msg = FabrikWorker::replaceWithUserData($msg, $theirUser, 'your');
     }
     $msg = FabrikWorker::replaceWithGlobals($msg);
     $msg = preg_replace("/{}/", "", $msg);
     /* replace {element name} with form data */
     $msg = preg_replace_callback("/{[^}\\s]+}/i", array($this, 'replaceWithFormData'), $msg);
     if (!$keepPlaceholders) {
         $msg = preg_replace("/{[^}\\s]+}/i", '', $msg);
     }
     return $msg;
 }
Ejemplo n.º 2
0
 /**
  * Iterates through string to replace every
  * {placeholder} with row data
  * (added by hugh, does the same thing as parseMessageForPlaceHolder in parent
  * class, but for rows instead of forms)
  *
  * NOTE - I can't remember why I added this way back when in 2.x, instead of using the helper function,
  * I just know there was a good reason, to do with the helper func making assumptions about something
  * (I think to do with how form data is formatted) which weren't true when rendering list data.  I have
  * a suspicion that in the intervening years, the helper func and the way we format data may now be
  * copacetic, and we could do away with this separation, and just use the normal helper func.  Might be
  * worth testing, as this code looks like it has suffered bitrot, and doesn't do a number of things the main
  * helper func now does.
  *
  * @param   string  $msg         text to parse
  * @param   array   &$row        of row data
  * @param   bool    $addSlashes  add slashes to the replaced data (default = false) set to true in fabrikcalc element
  *
  * @return  string  parsed message
  */
 public function parseMessageForRowHolder($msg, &$row, $addSlashes = false)
 {
     $this->aRow = $row;
     if (!strstr($msg, '{')) {
         return $msg;
     }
     $this->parseAddSlases = $addSlashes;
     $msg = FabrikWorker::replaceWithUserData($msg);
     $msg = FabrikWorker::replaceWithGlobals($msg);
     $msg = preg_replace("/{}/", "", $msg);
     $this->rowIdentifierAdded = false;
     /* replace {element name} with form data */
     /* $$$ hugh - testing changing the regex so we don't blow away PHP structures!  Added the \s so
      * we only match non-space chars in {}'s.  So unless you have some code like "if (blah) {foo;}", PHP
      * block level {}'s should remain unmolested.
      */
     $msg = preg_replace_callback("/{[^}\\s]+}/i", array($this, 'replaceWithRowData'), $msg);
     $lang = $this->lang->getTag();
     $lang = str_replace('-', '_', $lang);
     $msg = str_replace('{lang}', $lang, $msg);
     return $msg;
 }