snipt

Ctrl+h for KB shortcuts

PHP

jold2jnew.php

<?
/**
 * @category    jold2jnew
 * @copyright    Copyright (C) 2012 NinjaForge. All rights reserved.
 * @license		GNU GPLv3 <http://www.gnu.org/licenses/gpl.html>
 * @link     	http://ninjaforge.com
 */

/**
 * Jold2Jnew class - It's not big, it's not clever and it sure as hell aint pretty but it kinda works, oh and its also not complete
 *
 * Helps you convert your joomla extension to 2.5, this class expects your extension to be installed in joomla
 *
 * USAGE:
 * $old2new = jold2jnew('com_extensionname');
 * $old2new->giveMe25love();
 *
 */
class jold2jnew 
{
	/**
	 * An array of frontend language strings to write to a new language file
	 *
	 * @var array
	 */
	protected $_language = array();

	/**
	 * the component were converting
	 *
	 * @var string
	 */
	protected $_component;

	/**
	 * the language string is already namespaced
	 *
	 * @var boolean
	 */
	protected $_namespaced;

	/**
	 * it is a nooku based extension
	 *
	 * @var boolean
	 */
	protected $_nooku;

	/**
	 * the directory to save updated files to
	 *
	 * @var string
	 */
	protected $_directory;

	/**
	 * the language string was quoted
	 *
	 * @var boolean
	 */
	protected $_quoted;

	protected $_callback;

	/**
	* Constructor 
	*
	* @param string		$component 		the name of the extension prepended with com_ (com_ninjaboard)
	* @param boolean 	$imNamespaced	the language strings are already namespaced
	* @param boolean 	$imNooku 		this is a nooku based extension
	* @param string		$directory		a relative directory to save the updated files to
	* @return void
	*/
	public function __construct($component = null, $imNamespaced = false, $imNooku = true, $directory = '/jold2jnew/')
	{
		// if no component is set do nothing
		if (!$component || strpos($component, 'com_') === false) 
			throw new Exception('You need to provide a component name prepended with com_');

		if (!JFolder::exists(JPATH_ADMINISTRATOR.'/components/'.$component))
			throw new Exception('The component doesnt appear to exist');

		$this->_namespaced 	= $imNamespaced;
		$this->_nooku		= $imNooku;
		$this->_directory 	= $directory;
		$this->_component   = $component;
	}

	/**
	 * Method for automaticly running everything in here
	 */
	public function giveMe25love()
	{
		$this->quoteLanguage();
		$this->replaceText();
	}

	/**
	 * Method for quoting the language strings
	 */
	public function quoteLanguage()
	{
		$folders = JFolder::folders(JPATH_ROOT.'/language/');
		// run the quoting again the frontend lang files
		$this->_saveQuoted($folders);

		// now the backend
		$folders = JFolder::folders(JPATH_ADMINISTRATOR.'/language/');
		$this->_saveQuoted($folders, true);
	}

	/**
	 * Method for replacing JText & @text (if nooku) with namespaced j2.5 language strings
	 */
	public function replaceText()
	{
		// run the admin files
		$path = '/administrator/components/'.$this->_component.'/';

		$files = JFolder::files(JPATH_ROOT.$path, '.php', true, true);
		$this->_saveReplacedText($files);

		$fpath = '/components/'.$this->_component.'/';
		// replace the frontend stuff
		if (JFolder::exists(JPATH_ROOT.$fpath)) {
			$files = JFolder::files(JPATH_ROOT.$fpath, '.php', true, true);
			$this->_saveReplacedText($files);
		}

		if ($this->_language)
			JFile::write(JPATH_ROOT.$this->_directory.'/en-GB-'.$this->_component.'.ini', implode('', $this->_language));
	}

	/**
 	 * Method for saving the quoted strings
 	 * @param array an array of folders
 	 * @param boolean true if frontend else false
 	 * @todo shouldnt we check for the old comment tag here too....
 	 */
	protected function _saveQuoted($folders, $frontend = true)
	{
		$path = ($frontend) ? '/language/' : '/administrator/language/';
		foreach ($folders as $folder) {
			//get the language file if it exists
			$file = $folder.'.'.$this->_component.'.ini';

			// if the file doesnt exist raise a warning and skip this folder
			if (!JFile::exists(JPATH_ROOT.$path.$folder.'/'.$file)) {
				JError::raiseNotice(0, $file.' does not appear to exists - skipping');
				continue;
			}

			// read the file into an array
			$content = file(JPATH_ROOT.$path.$folder.'/'.$file);

			//loop through our file array
			foreach ($content as $i => $line) {
				// trim seems flaky as hell
				ltrim(trim($line));

				// attempt to split our line
				$matches = preg_split('/[\=]+/', $line);

				// we should have 2 matches SOME STRING, some string
				if (count($matches) != 2) continue;

				// if the second string is only 1 char long, its empty
				if (strlen($matches[1]) == 1) {
					$content[$i] = $matches[0].'=""';
				} else {
					$content[$i] = $matches[0].'="'.trim($matches[1]).'"'."\n";
				}
			}

			//finally save the file in the new file directory flaky triming
			Jfile::write(JPATH_ROOT.$this->_directory.$path.$folder.'/'.$file, implode("",$content));
			$this->_quoted = true;
		}
	}

	/**
	 * Preg callback method
	 */
	protected function _pregCallback($matches)
	{
		if (isset($matches[0])) {
			// strip out the jtext bits
			$original = ($this->_callback == 'jtext') ? str_replace('JText::_(\'', '', $matches[0]) : str_replace('@text(\'', '', $matches[0]) ;

			$original = str_replace('\')', '', $original);
			// rebuild the string
			$new = ltrim(trim(strtoupper($original)));

			// keys have no business having punctuation or other random chars so strip them out (note they can have %)
			$new = str_replace(array('.', '\'','"','!', "?", '\\', "/", '*', '&', '«', '»', '[', ']', ')', '(', ':', ',', '{', '}'), '', $new);
			$new = strip_tags(htmlspecialchars($new));
			// keys have no business having spaces so replace with underscores
			$new = str_replace(' ', '_', trim($new));

			// if the keys are not namespaced then make it so
			if (!$this->_namespaced) $new = strtoupper($this->_component).'_'.$new;

			// generate the language file
			$this->_language[] = $new.'="'.$original.'"'."\n";

			// return the string with the new namespaced uppercase key
			return  ($this->_callback == 'jtext') ? 'JText::_(\''.$new.'\')' : '@text(\''.$new.'\')';

		}
	}

	/**
	 * Method for saving new files with replaced text
	 *
	 * @param array an array of files
	 */
	protected function _saveReplacedText($files)
	{
		// loop through each file in the folder
		foreach ($files as $file) {
	 		// i suck at regex, so there you go.....
	  		$sqpattern = '/(JText)(:)(:)(_)(\\()(\\\'.*?\\\')(\\))/';

			// read the file into an array
			$content = file($file);
			$this->_callback = 'jtext';

			//loop through our file array
			foreach ($content as $i => $line) {
				$content[$i] = preg_replace_callback($sqpattern, array($this, '_pregCallback'), $line);
			}
			//finally save the new file 
			JFile::write(JPATH_ROOT.$this->_directory.str_replace(JPATH_ROOT, '', $file), implode("", $content));

			// if we are nooku run the @text
			if ($this->_nooku) {

				$pattern = '/(@)(text)(\\()(\').*?(\')(\\))/';

				// make sure we run this on the files we have already done jtext with
				// read the file into an array
				$content = file(JPATH_ROOT.$this->_directory.'/'.str_replace(JPATH_ROOT, '', $file));

				$this->_callback = 'nooku';

				//loop through our file array
				foreach ($content as $i => $line) {
					$content[$i] = preg_replace_callback($pattern, array($this, '_pregCallback'), $line);
				}
				//finally save the new file 
				JFile::write(JPATH_ROOT.$this->_directory.str_replace(JPATH_ROOT, '',$file), implode("", $content));
			}
		}
	}
}
https://snipt.net/embed/20beadb70619395272de4da710759c05/
/raw/20beadb70619395272de4da710759c05/
20beadb70619395272de4da710759c05
php
PHP
255
2019-05-25T07:20:14
True
False
False
/api/public/snipt/38752/
jold2jnewphp
<table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><a href="#L-1"> 1</a> <a href="#L-2"> 2</a> <a href="#L-3"> 3</a> <a href="#L-4"> 4</a> <a href="#L-5"> 5</a> <a href="#L-6"> 6</a> <a href="#L-7"> 7</a> <a href="#L-8"> 8</a> <a href="#L-9"> 9</a> <a href="#L-10"> 10</a> <a href="#L-11"> 11</a> <a href="#L-12"> 12</a> <a href="#L-13"> 13</a> <a href="#L-14"> 14</a> <a href="#L-15"> 15</a> <a href="#L-16"> 16</a> <a href="#L-17"> 17</a> <a href="#L-18"> 18</a> <a href="#L-19"> 19</a> <a href="#L-20"> 20</a> <a href="#L-21"> 21</a> <a href="#L-22"> 22</a> <a href="#L-23"> 23</a> <a href="#L-24"> 24</a> <a href="#L-25"> 25</a> <a href="#L-26"> 26</a> <a href="#L-27"> 27</a> <a href="#L-28"> 28</a> <a href="#L-29"> 29</a> <a href="#L-30"> 30</a> <a href="#L-31"> 31</a> <a href="#L-32"> 32</a> <a href="#L-33"> 33</a> <a href="#L-34"> 34</a> <a href="#L-35"> 35</a> <a href="#L-36"> 36</a> <a href="#L-37"> 37</a> <a href="#L-38"> 38</a> <a href="#L-39"> 39</a> <a href="#L-40"> 40</a> <a href="#L-41"> 41</a> <a href="#L-42"> 42</a> <a href="#L-43"> 43</a> <a href="#L-44"> 44</a> <a href="#L-45"> 45</a> <a href="#L-46"> 46</a> <a href="#L-47"> 47</a> <a href="#L-48"> 48</a> <a href="#L-49"> 49</a> <a href="#L-50"> 50</a> <a href="#L-51"> 51</a> <a href="#L-52"> 52</a> <a href="#L-53"> 53</a> <a href="#L-54"> 54</a> <a href="#L-55"> 55</a> <a href="#L-56"> 56</a> <a href="#L-57"> 57</a> <a href="#L-58"> 58</a> <a href="#L-59"> 59</a> <a href="#L-60"> 60</a> <a href="#L-61"> 61</a> <a href="#L-62"> 62</a> <a href="#L-63"> 63</a> <a href="#L-64"> 64</a> <a href="#L-65"> 65</a> <a href="#L-66"> 66</a> <a href="#L-67"> 67</a> <a href="#L-68"> 68</a> <a href="#L-69"> 69</a> <a href="#L-70"> 70</a> <a href="#L-71"> 71</a> <a href="#L-72"> 72</a> <a href="#L-73"> 73</a> <a href="#L-74"> 74</a> <a href="#L-75"> 75</a> <a href="#L-76"> 76</a> <a href="#L-77"> 77</a> <a href="#L-78"> 78</a> <a href="#L-79"> 79</a> <a href="#L-80"> 80</a> <a href="#L-81"> 81</a> <a href="#L-82"> 82</a> <a href="#L-83"> 83</a> <a href="#L-84"> 84</a> <a href="#L-85"> 85</a> <a href="#L-86"> 86</a> <a href="#L-87"> 87</a> <a href="#L-88"> 88</a> <a href="#L-89"> 89</a> <a href="#L-90"> 90</a> <a href="#L-91"> 91</a> <a href="#L-92"> 92</a> <a href="#L-93"> 93</a> <a href="#L-94"> 94</a> <a href="#L-95"> 95</a> <a href="#L-96"> 96</a> <a href="#L-97"> 97</a> <a href="#L-98"> 98</a> <a href="#L-99"> 99</a> <a href="#L-100">100</a> <a href="#L-101">101</a> <a href="#L-102">102</a> <a href="#L-103">103</a> <a href="#L-104">104</a> <a href="#L-105">105</a> <a href="#L-106">106</a> <a href="#L-107">107</a> <a href="#L-108">108</a> <a href="#L-109">109</a> <a href="#L-110">110</a> <a href="#L-111">111</a> <a href="#L-112">112</a> <a href="#L-113">113</a> <a href="#L-114">114</a> <a href="#L-115">115</a> <a href="#L-116">116</a> <a href="#L-117">117</a> <a href="#L-118">118</a> <a href="#L-119">119</a> <a href="#L-120">120</a> <a href="#L-121">121</a> <a href="#L-122">122</a> <a href="#L-123">123</a> <a href="#L-124">124</a> <a href="#L-125">125</a> <a href="#L-126">126</a> <a href="#L-127">127</a> <a href="#L-128">128</a> <a href="#L-129">129</a> <a href="#L-130">130</a> <a href="#L-131">131</a> <a href="#L-132">132</a> <a href="#L-133">133</a> <a href="#L-134">134</a> <a href="#L-135">135</a> <a href="#L-136">136</a> <a href="#L-137">137</a> <a href="#L-138">138</a> <a href="#L-139">139</a> <a href="#L-140">140</a> <a href="#L-141">141</a> <a href="#L-142">142</a> <a href="#L-143">143</a> <a href="#L-144">144</a> <a href="#L-145">145</a> <a href="#L-146">146</a> <a href="#L-147">147</a> <a href="#L-148">148</a> <a href="#L-149">149</a> <a href="#L-150">150</a> <a href="#L-151">151</a> <a href="#L-152">152</a> <a href="#L-153">153</a> <a href="#L-154">154</a> <a href="#L-155">155</a> <a href="#L-156">156</a> <a href="#L-157">157</a> <a href="#L-158">158</a> <a href="#L-159">159</a> <a href="#L-160">160</a> <a href="#L-161">161</a> <a href="#L-162">162</a> <a href="#L-163">163</a> <a href="#L-164">164</a> <a href="#L-165">165</a> <a href="#L-166">166</a> <a href="#L-167">167</a> <a href="#L-168">168</a> <a href="#L-169">169</a> <a href="#L-170">170</a> <a href="#L-171">171</a> <a href="#L-172">172</a> <a href="#L-173">173</a> <a href="#L-174">174</a> <a href="#L-175">175</a> <a href="#L-176">176</a> <a href="#L-177">177</a> <a href="#L-178">178</a> <a href="#L-179">179</a> <a href="#L-180">180</a> <a href="#L-181">181</a> <a href="#L-182">182</a> <a href="#L-183">183</a> <a href="#L-184">184</a> <a href="#L-185">185</a> <a href="#L-186">186</a> <a href="#L-187">187</a> <a href="#L-188">188</a> <a href="#L-189">189</a> <a href="#L-190">190</a> <a href="#L-191">191</a> <a href="#L-192">192</a> <a href="#L-193">193</a> <a href="#L-194">194</a> <a href="#L-195">195</a> <a href="#L-196">196</a> <a href="#L-197">197</a> <a href="#L-198">198</a> <a href="#L-199">199</a> <a href="#L-200">200</a> <a href="#L-201">201</a> <a href="#L-202">202</a> <a href="#L-203">203</a> <a href="#L-204">204</a> <a href="#L-205">205</a> <a href="#L-206">206</a> <a href="#L-207">207</a> <a href="#L-208">208</a> <a href="#L-209">209</a> <a href="#L-210">210</a> <a href="#L-211">211</a> <a href="#L-212">212</a> <a href="#L-213">213</a> <a href="#L-214">214</a> <a href="#L-215">215</a> <a href="#L-216">216</a> <a href="#L-217">217</a> <a href="#L-218">218</a> <a href="#L-219">219</a> <a href="#L-220">220</a> <a href="#L-221">221</a> <a href="#L-222">222</a> <a href="#L-223">223</a> <a href="#L-224">224</a> <a href="#L-225">225</a> <a href="#L-226">226</a> <a href="#L-227">227</a> <a href="#L-228">228</a> <a href="#L-229">229</a> <a href="#L-230">230</a> <a href="#L-231">231</a> <a href="#L-232">232</a> <a href="#L-233">233</a> <a href="#L-234">234</a> <a href="#L-235">235</a> <a href="#L-236">236</a> <a href="#L-237">237</a> <a href="#L-238">238</a> <a href="#L-239">239</a> <a href="#L-240">240</a> <a href="#L-241">241</a> <a href="#L-242">242</a> <a href="#L-243">243</a> <a href="#L-244">244</a> <a href="#L-245">245</a> <a href="#L-246">246</a> <a href="#L-247">247</a> <a href="#L-248">248</a> <a href="#L-249">249</a> <a href="#L-250">250</a> <a href="#L-251">251</a> <a href="#L-252">252</a> <a href="#L-253">253</a> <a href="#L-254">254</a> <a href="#L-255">255</a></pre></div></td><td class="code"><div class="highlight"><pre><span></span><span id="L-1"><a name="L-1"></a><span class="cp">&lt;?</span> </span><span id="L-2"><a name="L-2"></a><span class="sd">/**</span> </span><span id="L-3"><a name="L-3"></a><span class="sd"> * @category jold2jnew</span> </span><span id="L-4"><a name="L-4"></a><span class="sd"> * @copyright Copyright (C) 2012 NinjaForge. All rights reserved.</span> </span><span id="L-5"><a name="L-5"></a><span class="sd"> * @license GNU GPLv3 &lt;http://www.gnu.org/licenses/gpl.html&gt;</span> </span><span id="L-6"><a name="L-6"></a><span class="sd"> * @link http://ninjaforge.com</span> </span><span id="L-7"><a name="L-7"></a><span class="sd"> */</span> </span><span id="L-8"><a name="L-8"></a> </span><span id="L-9"><a name="L-9"></a><span class="sd">/**</span> </span><span id="L-10"><a name="L-10"></a><span class="sd"> * Jold2Jnew class - It&#39;s not big, it&#39;s not clever and it sure as hell aint pretty but it kinda works, oh and its also not complete</span> </span><span id="L-11"><a name="L-11"></a><span class="sd"> *</span> </span><span id="L-12"><a name="L-12"></a><span class="sd"> * Helps you convert your joomla extension to 2.5, this class expects your extension to be installed in joomla</span> </span><span id="L-13"><a name="L-13"></a><span class="sd"> *</span> </span><span id="L-14"><a name="L-14"></a><span class="sd"> * USAGE:</span> </span><span id="L-15"><a name="L-15"></a><span class="sd"> * $old2new = jold2jnew(&#39;com_extensionname&#39;);</span> </span><span id="L-16"><a name="L-16"></a><span class="sd"> * $old2new-&gt;giveMe25love();</span> </span><span id="L-17"><a name="L-17"></a><span class="sd"> *</span> </span><span id="L-18"><a name="L-18"></a><span class="sd"> */</span> </span><span id="L-19"><a name="L-19"></a><span class="k">class</span> <span class="nc">jold2jnew</span> </span><span id="L-20"><a name="L-20"></a><span class="p">{</span> </span><span id="L-21"><a name="L-21"></a> <span class="sd">/**</span> </span><span id="L-22"><a name="L-22"></a><span class="sd"> * An array of frontend language strings to write to a new language file</span> </span><span id="L-23"><a name="L-23"></a><span class="sd"> *</span> </span><span id="L-24"><a name="L-24"></a><span class="sd"> * @var array</span> </span><span id="L-25"><a name="L-25"></a><span class="sd"> */</span> </span><span id="L-26"><a name="L-26"></a> <span class="k">protected</span> <span class="nv">$_language</span> <span class="o">=</span> <span class="k">array</span><span class="p">();</span> </span><span id="L-27"><a name="L-27"></a> </span><span id="L-28"><a name="L-28"></a> <span class="sd">/**</span> </span><span id="L-29"><a name="L-29"></a><span class="sd"> * the component were converting</span> </span><span id="L-30"><a name="L-30"></a><span class="sd"> *</span> </span><span id="L-31"><a name="L-31"></a><span class="sd"> * @var string</span> </span><span id="L-32"><a name="L-32"></a><span class="sd"> */</span> </span><span id="L-33"><a name="L-33"></a> <span class="k">protected</span> <span class="nv">$_component</span><span class="p">;</span> </span><span id="L-34"><a name="L-34"></a> </span><span id="L-35"><a name="L-35"></a> <span class="sd">/**</span> </span><span id="L-36"><a name="L-36"></a><span class="sd"> * the language string is already namespaced</span> </span><span id="L-37"><a name="L-37"></a><span class="sd"> *</span> </span><span id="L-38"><a name="L-38"></a><span class="sd"> * @var boolean</span> </span><span id="L-39"><a name="L-39"></a><span class="sd"> */</span> </span><span id="L-40"><a name="L-40"></a> <span class="k">protected</span> <span class="nv">$_namespaced</span><span class="p">;</span> </span><span id="L-41"><a name="L-41"></a> </span><span id="L-42"><a name="L-42"></a> <span class="sd">/**</span> </span><span id="L-43"><a name="L-43"></a><span class="sd"> * it is a nooku based extension</span> </span><span id="L-44"><a name="L-44"></a><span class="sd"> *</span> </span><span id="L-45"><a name="L-45"></a><span class="sd"> * @var boolean</span> </span><span id="L-46"><a name="L-46"></a><span class="sd"> */</span> </span><span id="L-47"><a name="L-47"></a> <span class="k">protected</span> <span class="nv">$_nooku</span><span class="p">;</span> </span><span id="L-48"><a name="L-48"></a> </span><span id="L-49"><a name="L-49"></a> <span class="sd">/**</span> </span><span id="L-50"><a name="L-50"></a><span class="sd"> * the directory to save updated files to</span> </span><span id="L-51"><a name="L-51"></a><span class="sd"> *</span> </span><span id="L-52"><a name="L-52"></a><span class="sd"> * @var string</span> </span><span id="L-53"><a name="L-53"></a><span class="sd"> */</span> </span><span id="L-54"><a name="L-54"></a> <span class="k">protected</span> <span class="nv">$_directory</span><span class="p">;</span> </span><span id="L-55"><a name="L-55"></a> </span><span id="L-56"><a name="L-56"></a> <span class="sd">/**</span> </span><span id="L-57"><a name="L-57"></a><span class="sd"> * the language string was quoted</span> </span><span id="L-58"><a name="L-58"></a><span class="sd"> *</span> </span><span id="L-59"><a name="L-59"></a><span class="sd"> * @var boolean</span> </span><span id="L-60"><a name="L-60"></a><span class="sd"> */</span> </span><span id="L-61"><a name="L-61"></a> <span class="k">protected</span> <span class="nv">$_quoted</span><span class="p">;</span> </span><span id="L-62"><a name="L-62"></a> </span><span id="L-63"><a name="L-63"></a> <span class="k">protected</span> <span class="nv">$_callback</span><span class="p">;</span> </span><span id="L-64"><a name="L-64"></a> </span><span id="L-65"><a name="L-65"></a> <span class="sd">/**</span> </span><span id="L-66"><a name="L-66"></a><span class="sd"> * Constructor </span> </span><span id="L-67"><a name="L-67"></a><span class="sd"> *</span> </span><span id="L-68"><a name="L-68"></a><span class="sd"> * @param string $component the name of the extension prepended with com_ (com_ninjaboard)</span> </span><span id="L-69"><a name="L-69"></a><span class="sd"> * @param boolean $imNamespaced the language strings are already namespaced</span> </span><span id="L-70"><a name="L-70"></a><span class="sd"> * @param boolean $imNooku this is a nooku based extension</span> </span><span id="L-71"><a name="L-71"></a><span class="sd"> * @param string $directory a relative directory to save the updated files to</span> </span><span id="L-72"><a name="L-72"></a><span class="sd"> * @return void</span> </span><span id="L-73"><a name="L-73"></a><span class="sd"> */</span> </span><span id="L-74"><a name="L-74"></a> <span class="k">public</span> <span class="k">function</span> <span class="nf">__construct</span><span class="p">(</span><span class="nv">$component</span> <span class="o">=</span> <span class="k">null</span><span class="p">,</span> <span class="nv">$imNamespaced</span> <span class="o">=</span> <span class="k">false</span><span class="p">,</span> <span class="nv">$imNooku</span> <span class="o">=</span> <span class="k">true</span><span class="p">,</span> <span class="nv">$directory</span> <span class="o">=</span> <span class="s1">&#39;/jold2jnew/&#39;</span><span class="p">)</span> </span><span id="L-75"><a name="L-75"></a> <span class="p">{</span> </span><span id="L-76"><a name="L-76"></a> <span class="c1">// if no component is set do nothing</span> </span><span id="L-77"><a name="L-77"></a> <span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="nv">$component</span> <span class="o">||</span> <span class="nb">strpos</span><span class="p">(</span><span class="nv">$component</span><span class="p">,</span> <span class="s1">&#39;com_&#39;</span><span class="p">)</span> <span class="o">===</span> <span class="k">false</span><span class="p">)</span> </span><span id="L-78"><a name="L-78"></a> <span class="k">throw</span> <span class="k">new</span> <span class="nx">Exception</span><span class="p">(</span><span class="s1">&#39;You need to provide a component name prepended with com_&#39;</span><span class="p">);</span> </span><span id="L-79"><a name="L-79"></a> </span><span id="L-80"><a name="L-80"></a> <span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="nx">JFolder</span><span class="o">::</span><span class="na">exists</span><span class="p">(</span><span class="nx">JPATH_ADMINISTRATOR</span><span class="o">.</span><span class="s1">&#39;/components/&#39;</span><span class="o">.</span><span class="nv">$component</span><span class="p">))</span> </span><span id="L-81"><a name="L-81"></a> <span class="k">throw</span> <span class="k">new</span> <span class="nx">Exception</span><span class="p">(</span><span class="s1">&#39;The component doesnt appear to exist&#39;</span><span class="p">);</span> </span><span id="L-82"><a name="L-82"></a> </span><span id="L-83"><a name="L-83"></a> <span class="nv">$this</span><span class="o">-&gt;</span><span class="na">_namespaced</span> <span class="o">=</span> <span class="nv">$imNamespaced</span><span class="p">;</span> </span><span id="L-84"><a name="L-84"></a> <span class="nv">$this</span><span class="o">-&gt;</span><span class="na">_nooku</span> <span class="o">=</span> <span class="nv">$imNooku</span><span class="p">;</span> </span><span id="L-85"><a name="L-85"></a> <span class="nv">$this</span><span class="o">-&gt;</span><span class="na">_directory</span> <span class="o">=</span> <span class="nv">$directory</span><span class="p">;</span> </span><span id="L-86"><a name="L-86"></a> <span class="nv">$this</span><span class="o">-&gt;</span><span class="na">_component</span> <span class="o">=</span> <span class="nv">$component</span><span class="p">;</span> </span><span id="L-87"><a name="L-87"></a> <span class="p">}</span> </span><span id="L-88"><a name="L-88"></a> </span><span id="L-89"><a name="L-89"></a> <span class="sd">/**</span> </span><span id="L-90"><a name="L-90"></a><span class="sd"> * Method for automaticly running everything in here</span> </span><span id="L-91"><a name="L-91"></a><span class="sd"> */</span> </span><span id="L-92"><a name="L-92"></a> <span class="k">public</span> <span class="k">function</span> <span class="nf">giveMe25love</span><span class="p">()</span> </span><span id="L-93"><a name="L-93"></a> <span class="p">{</span> </span><span id="L-94"><a name="L-94"></a> <span class="nv">$this</span><span class="o">-&gt;</span><span class="na">quoteLanguage</span><span class="p">();</span> </span><span id="L-95"><a name="L-95"></a> <span class="nv">$this</span><span class="o">-&gt;</span><span class="na">replaceText</span><span class="p">();</span> </span><span id="L-96"><a name="L-96"></a> <span class="p">}</span> </span><span id="L-97"><a name="L-97"></a> </span><span id="L-98"><a name="L-98"></a> <span class="sd">/**</span> </span><span id="L-99"><a name="L-99"></a><span class="sd"> * Method for quoting the language strings</span> </span><span id="L-100"><a name="L-100"></a><span class="sd"> */</span> </span><span id="L-101"><a name="L-101"></a> <span class="k">public</span> <span class="k">function</span> <span class="nf">quoteLanguage</span><span class="p">()</span> </span><span id="L-102"><a name="L-102"></a> <span class="p">{</span> </span><span id="L-103"><a name="L-103"></a> <span class="nv">$folders</span> <span class="o">=</span> <span class="nx">JFolder</span><span class="o">::</span><span class="na">folders</span><span class="p">(</span><span class="nx">JPATH_ROOT</span><span class="o">.</span><span class="s1">&#39;/language/&#39;</span><span class="p">);</span> </span><span id="L-104"><a name="L-104"></a> <span class="c1">// run the quoting again the frontend lang files</span> </span><span id="L-105"><a name="L-105"></a> <span class="nv">$this</span><span class="o">-&gt;</span><span class="na">_saveQuoted</span><span class="p">(</span><span class="nv">$folders</span><span class="p">);</span> </span><span id="L-106"><a name="L-106"></a> </span><span id="L-107"><a name="L-107"></a> <span class="c1">// now the backend</span> </span><span id="L-108"><a name="L-108"></a> <span class="nv">$folders</span> <span class="o">=</span> <span class="nx">JFolder</span><span class="o">::</span><span class="na">folders</span><span class="p">(</span><span class="nx">JPATH_ADMINISTRATOR</span><span class="o">.</span><span class="s1">&#39;/language/&#39;</span><span class="p">);</span> </span><span id="L-109"><a name="L-109"></a> <span class="nv">$this</span><span class="o">-&gt;</span><span class="na">_saveQuoted</span><span class="p">(</span><span class="nv">$folders</span><span class="p">,</span> <span class="k">true</span><span class="p">);</span> </span><span id="L-110"><a name="L-110"></a> <span class="p">}</span> </span><span id="L-111"><a name="L-111"></a> </span><span id="L-112"><a name="L-112"></a> <span class="sd">/**</span> </span><span id="L-113"><a name="L-113"></a><span class="sd"> * Method for replacing JText &amp; @text (if nooku) with namespaced j2.5 language strings</span> </span><span id="L-114"><a name="L-114"></a><span class="sd"> */</span> </span><span id="L-115"><a name="L-115"></a> <span class="k">public</span> <span class="k">function</span> <span class="nf">replaceText</span><span class="p">()</span> </span><span id="L-116"><a name="L-116"></a> <span class="p">{</span> </span><span id="L-117"><a name="L-117"></a> <span class="c1">// run the admin files</span> </span><span id="L-118"><a name="L-118"></a> <span class="nv">$path</span> <span class="o">=</span> <span class="s1">&#39;/administrator/components/&#39;</span><span class="o">.</span><span class="nv">$this</span><span class="o">-&gt;</span><span class="na">_component</span><span class="o">.</span><span class="s1">&#39;/&#39;</span><span class="p">;</span> </span><span id="L-119"><a name="L-119"></a> </span><span id="L-120"><a name="L-120"></a> <span class="nv">$files</span> <span class="o">=</span> <span class="nx">JFolder</span><span class="o">::</span><span class="na">files</span><span class="p">(</span><span class="nx">JPATH_ROOT</span><span class="o">.</span><span class="nv">$path</span><span class="p">,</span> <span class="s1">&#39;.php&#39;</span><span class="p">,</span> <span class="k">true</span><span class="p">,</span> <span class="k">true</span><span class="p">);</span> </span><span id="L-121"><a name="L-121"></a> <span class="nv">$this</span><span class="o">-&gt;</span><span class="na">_saveReplacedText</span><span class="p">(</span><span class="nv">$files</span><span class="p">);</span> </span><span id="L-122"><a name="L-122"></a> </span><span id="L-123"><a name="L-123"></a> <span class="nv">$fpath</span> <span class="o">=</span> <span class="s1">&#39;/components/&#39;</span><span class="o">.</span><span class="nv">$this</span><span class="o">-&gt;</span><span class="na">_component</span><span class="o">.</span><span class="s1">&#39;/&#39;</span><span class="p">;</span> </span><span id="L-124"><a name="L-124"></a> <span class="c1">// replace the frontend stuff</span> </span><span id="L-125"><a name="L-125"></a> <span class="k">if</span> <span class="p">(</span><span class="nx">JFolder</span><span class="o">::</span><span class="na">exists</span><span class="p">(</span><span class="nx">JPATH_ROOT</span><span class="o">.</span><span class="nv">$fpath</span><span class="p">))</span> <span class="p">{</span> </span><span id="L-126"><a name="L-126"></a> <span class="nv">$files</span> <span class="o">=</span> <span class="nx">JFolder</span><span class="o">::</span><span class="na">files</span><span class="p">(</span><span class="nx">JPATH_ROOT</span><span class="o">.</span><span class="nv">$fpath</span><span class="p">,</span> <span class="s1">&#39;.php&#39;</span><span class="p">,</span> <span class="k">true</span><span class="p">,</span> <span class="k">true</span><span class="p">);</span> </span><span id="L-127"><a name="L-127"></a> <span class="nv">$this</span><span class="o">-&gt;</span><span class="na">_saveReplacedText</span><span class="p">(</span><span class="nv">$files</span><span class="p">);</span> </span><span id="L-128"><a name="L-128"></a> <span class="p">}</span> </span><span id="L-129"><a name="L-129"></a> </span><span id="L-130"><a name="L-130"></a> <span class="k">if</span> <span class="p">(</span><span class="nv">$this</span><span class="o">-&gt;</span><span class="na">_language</span><span class="p">)</span> </span><span id="L-131"><a name="L-131"></a> <span class="nx">JFile</span><span class="o">::</span><span class="na">write</span><span class="p">(</span><span class="nx">JPATH_ROOT</span><span class="o">.</span><span class="nv">$this</span><span class="o">-&gt;</span><span class="na">_directory</span><span class="o">.</span><span class="s1">&#39;/en-GB-&#39;</span><span class="o">.</span><span class="nv">$this</span><span class="o">-&gt;</span><span class="na">_component</span><span class="o">.</span><span class="s1">&#39;.ini&#39;</span><span class="p">,</span> <span class="nb">implode</span><span class="p">(</span><span class="s1">&#39;&#39;</span><span class="p">,</span> <span class="nv">$this</span><span class="o">-&gt;</span><span class="na">_language</span><span class="p">));</span> </span><span id="L-132"><a name="L-132"></a> <span class="p">}</span> </span><span id="L-133"><a name="L-133"></a> </span><span id="L-134"><a name="L-134"></a> <span class="sd">/**</span> </span><span id="L-135"><a name="L-135"></a><span class="sd"> * Method for saving the quoted strings</span> </span><span id="L-136"><a name="L-136"></a><span class="sd"> * @param array an array of folders</span> </span><span id="L-137"><a name="L-137"></a><span class="sd"> * @param boolean true if frontend else false</span> </span><span id="L-138"><a name="L-138"></a><span class="sd"> * @todo shouldnt we check for the old comment tag here too....</span> </span><span id="L-139"><a name="L-139"></a><span class="sd"> */</span> </span><span id="L-140"><a name="L-140"></a> <span class="k">protected</span> <span class="k">function</span> <span class="nf">_saveQuoted</span><span class="p">(</span><span class="nv">$folders</span><span class="p">,</span> <span class="nv">$frontend</span> <span class="o">=</span> <span class="k">true</span><span class="p">)</span> </span><span id="L-141"><a name="L-141"></a> <span class="p">{</span> </span><span id="L-142"><a name="L-142"></a> <span class="nv">$path</span> <span class="o">=</span> <span class="p">(</span><span class="nv">$frontend</span><span class="p">)</span> <span class="o">?</span> <span class="s1">&#39;/language/&#39;</span> <span class="o">:</span> <span class="s1">&#39;/administrator/language/&#39;</span><span class="p">;</span> </span><span id="L-143"><a name="L-143"></a> <span class="k">foreach</span> <span class="p">(</span><span class="nv">$folders</span> <span class="k">as</span> <span class="nv">$folder</span><span class="p">)</span> <span class="p">{</span> </span><span id="L-144"><a name="L-144"></a> <span class="c1">//get the language file if it exists</span> </span><span id="L-145"><a name="L-145"></a> <span class="nv">$file</span> <span class="o">=</span> <span class="nv">$folder</span><span class="o">.</span><span class="s1">&#39;.&#39;</span><span class="o">.</span><span class="nv">$this</span><span class="o">-&gt;</span><span class="na">_component</span><span class="o">.</span><span class="s1">&#39;.ini&#39;</span><span class="p">;</span> </span><span id="L-146"><a name="L-146"></a> </span><span id="L-147"><a name="L-147"></a> <span class="c1">// if the file doesnt exist raise a warning and skip this folder</span> </span><span id="L-148"><a name="L-148"></a> <span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="nx">JFile</span><span class="o">::</span><span class="na">exists</span><span class="p">(</span><span class="nx">JPATH_ROOT</span><span class="o">.</span><span class="nv">$path</span><span class="o">.</span><span class="nv">$folder</span><span class="o">.</span><span class="s1">&#39;/&#39;</span><span class="o">.</span><span class="nv">$file</span><span class="p">))</span> <span class="p">{</span> </span><span id="L-149"><a name="L-149"></a> <span class="nx">JError</span><span class="o">::</span><span class="na">raiseNotice</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="nv">$file</span><span class="o">.</span><span class="s1">&#39; does not appear to exists - skipping&#39;</span><span class="p">);</span> </span><span id="L-150"><a name="L-150"></a> <span class="k">continue</span><span class="p">;</span> </span><span id="L-151"><a name="L-151"></a> <span class="p">}</span> </span><span id="L-152"><a name="L-152"></a> </span><span id="L-153"><a name="L-153"></a> <span class="c1">// read the file into an array</span> </span><span id="L-154"><a name="L-154"></a> <span class="nv">$content</span> <span class="o">=</span> <span class="nb">file</span><span class="p">(</span><span class="nx">JPATH_ROOT</span><span class="o">.</span><span class="nv">$path</span><span class="o">.</span><span class="nv">$folder</span><span class="o">.</span><span class="s1">&#39;/&#39;</span><span class="o">.</span><span class="nv">$file</span><span class="p">);</span> </span><span id="L-155"><a name="L-155"></a> </span><span id="L-156"><a name="L-156"></a> <span class="c1">//loop through our file array</span> </span><span id="L-157"><a name="L-157"></a> <span class="k">foreach</span> <span class="p">(</span><span class="nv">$content</span> <span class="k">as</span> <span class="nv">$i</span> <span class="o">=&gt;</span> <span class="nv">$line</span><span class="p">)</span> <span class="p">{</span> </span><span id="L-158"><a name="L-158"></a> <span class="c1">// trim seems flaky as hell</span> </span><span id="L-159"><a name="L-159"></a> <span class="nb">ltrim</span><span class="p">(</span><span class="nb">trim</span><span class="p">(</span><span class="nv">$line</span><span class="p">));</span> </span><span id="L-160"><a name="L-160"></a> </span><span id="L-161"><a name="L-161"></a> <span class="c1">// attempt to split our line</span> </span><span id="L-162"><a name="L-162"></a> <span class="nv">$matches</span> <span class="o">=</span> <span class="nb">preg_split</span><span class="p">(</span><span class="s1">&#39;/[\=]+/&#39;</span><span class="p">,</span> <span class="nv">$line</span><span class="p">);</span> </span><span id="L-163"><a name="L-163"></a> </span><span id="L-164"><a name="L-164"></a> <span class="c1">// we should have 2 matches SOME STRING, some string</span> </span><span id="L-165"><a name="L-165"></a> <span class="k">if</span> <span class="p">(</span><span class="nb">count</span><span class="p">(</span><span class="nv">$matches</span><span class="p">)</span> <span class="o">!=</span> <span class="mi">2</span><span class="p">)</span> <span class="k">continue</span><span class="p">;</span> </span><span id="L-166"><a name="L-166"></a> </span><span id="L-167"><a name="L-167"></a> <span class="c1">// if the second string is only 1 char long, its empty</span> </span><span id="L-168"><a name="L-168"></a> <span class="k">if</span> <span class="p">(</span><span class="nb">strlen</span><span class="p">(</span><span class="nv">$matches</span><span class="p">[</span><span class="mi">1</span><span class="p">])</span> <span class="o">==</span> <span class="mi">1</span><span class="p">)</span> <span class="p">{</span> </span><span id="L-169"><a name="L-169"></a> <span class="nv">$content</span><span class="p">[</span><span class="nv">$i</span><span class="p">]</span> <span class="o">=</span> <span class="nv">$matches</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="s1">&#39;=&quot;&quot;&#39;</span><span class="p">;</span> </span><span id="L-170"><a name="L-170"></a> <span class="p">}</span> <span class="k">else</span> <span class="p">{</span> </span><span id="L-171"><a name="L-171"></a> <span class="nv">$content</span><span class="p">[</span><span class="nv">$i</span><span class="p">]</span> <span class="o">=</span> <span class="nv">$matches</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="s1">&#39;=&quot;&#39;</span><span class="o">.</span><span class="nb">trim</span><span class="p">(</span><span class="nv">$matches</span><span class="p">[</span><span class="mi">1</span><span class="p">])</span><span class="o">.</span><span class="s1">&#39;&quot;&#39;</span><span class="o">.</span><span class="s2">&quot;</span><span class="se">\n</span><span class="s2">&quot;</span><span class="p">;</span> </span><span id="L-172"><a name="L-172"></a> <span class="p">}</span> </span><span id="L-173"><a name="L-173"></a> <span class="p">}</span> </span><span id="L-174"><a name="L-174"></a> </span><span id="L-175"><a name="L-175"></a> <span class="c1">//finally save the file in the new file directory flaky triming</span> </span><span id="L-176"><a name="L-176"></a> <span class="nx">Jfile</span><span class="o">::</span><span class="na">write</span><span class="p">(</span><span class="nx">JPATH_ROOT</span><span class="o">.</span><span class="nv">$this</span><span class="o">-&gt;</span><span class="na">_directory</span><span class="o">.</span><span class="nv">$path</span><span class="o">.</span><span class="nv">$folder</span><span class="o">.</span><span class="s1">&#39;/&#39;</span><span class="o">.</span><span class="nv">$file</span><span class="p">,</span> <span class="nb">implode</span><span class="p">(</span><span class="s2">&quot;&quot;</span><span class="p">,</span><span class="nv">$content</span><span class="p">));</span> </span><span id="L-177"><a name="L-177"></a> <span class="nv">$this</span><span class="o">-&gt;</span><span class="na">_quoted</span> <span class="o">=</span> <span class="k">true</span><span class="p">;</span> </span><span id="L-178"><a name="L-178"></a> <span class="p">}</span> </span><span id="L-179"><a name="L-179"></a> <span class="p">}</span> </span><span id="L-180"><a name="L-180"></a> </span><span id="L-181"><a name="L-181"></a> <span class="sd">/**</span> </span><span id="L-182"><a name="L-182"></a><span class="sd"> * Preg callback method</span> </span><span id="L-183"><a name="L-183"></a><span class="sd"> */</span> </span><span id="L-184"><a name="L-184"></a> <span class="k">protected</span> <span class="k">function</span> <span class="nf">_pregCallback</span><span class="p">(</span><span class="nv">$matches</span><span class="p">)</span> </span><span id="L-185"><a name="L-185"></a> <span class="p">{</span> </span><span id="L-186"><a name="L-186"></a> <span class="k">if</span> <span class="p">(</span><span class="nb">isset</span><span class="p">(</span><span class="nv">$matches</span><span class="p">[</span><span class="mi">0</span><span class="p">]))</span> <span class="p">{</span> </span><span id="L-187"><a name="L-187"></a> <span class="c1">// strip out the jtext bits</span> </span><span id="L-188"><a name="L-188"></a> <span class="nv">$original</span> <span class="o">=</span> <span class="p">(</span><span class="nv">$this</span><span class="o">-&gt;</span><span class="na">_callback</span> <span class="o">==</span> <span class="s1">&#39;jtext&#39;</span><span class="p">)</span> <span class="o">?</span> <span class="nb">str_replace</span><span class="p">(</span><span class="s1">&#39;JText::_(\&#39;&#39;</span><span class="p">,</span> <span class="s1">&#39;&#39;</span><span class="p">,</span> <span class="nv">$matches</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span> <span class="o">:</span> <span class="nb">str_replace</span><span class="p">(</span><span class="s1">&#39;@text(\&#39;&#39;</span><span class="p">,</span> <span class="s1">&#39;&#39;</span><span class="p">,</span> <span class="nv">$matches</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span> <span class="p">;</span> </span><span id="L-189"><a name="L-189"></a> </span><span id="L-190"><a name="L-190"></a> <span class="nv">$original</span> <span class="o">=</span> <span class="nb">str_replace</span><span class="p">(</span><span class="s1">&#39;\&#39;)&#39;</span><span class="p">,</span> <span class="s1">&#39;&#39;</span><span class="p">,</span> <span class="nv">$original</span><span class="p">);</span> </span><span id="L-191"><a name="L-191"></a> <span class="c1">// rebuild the string</span> </span><span id="L-192"><a name="L-192"></a> <span class="nv">$new</span> <span class="o">=</span> <span class="nb">ltrim</span><span class="p">(</span><span class="nb">trim</span><span class="p">(</span><span class="nb">strtoupper</span><span class="p">(</span><span class="nv">$original</span><span class="p">)));</span> </span><span id="L-193"><a name="L-193"></a> </span><span id="L-194"><a name="L-194"></a> <span class="c1">// keys have no business having punctuation or other random chars so strip them out (note they can have %)</span> </span><span id="L-195"><a name="L-195"></a> <span class="nv">$new</span> <span class="o">=</span> <span class="nb">str_replace</span><span class="p">(</span><span class="k">array</span><span class="p">(</span><span class="s1">&#39;.&#39;</span><span class="p">,</span> <span class="s1">&#39;\&#39;&#39;</span><span class="p">,</span><span class="s1">&#39;&quot;&#39;</span><span class="p">,</span><span class="s1">&#39;!&#39;</span><span class="p">,</span> <span class="s2">&quot;?&quot;</span><span class="p">,</span> <span class="s1">&#39;\\&#39;</span><span class="p">,</span> <span class="s2">&quot;/&quot;</span><span class="p">,</span> <span class="s1">&#39;*&#39;</span><span class="p">,</span> <span class="s1">&#39;&amp;&#39;</span><span class="p">,</span> <span class="s1">&#39;«&#39;</span><span class="p">,</span> <span class="s1">&#39;»&#39;</span><span class="p">,</span> <span class="s1">&#39;[&#39;</span><span class="p">,</span> <span class="s1">&#39;]&#39;</span><span class="p">,</span> <span class="s1">&#39;)&#39;</span><span class="p">,</span> <span class="s1">&#39;(&#39;</span><span class="p">,</span> <span class="s1">&#39;:&#39;</span><span class="p">,</span> <span class="s1">&#39;,&#39;</span><span class="p">,</span> <span class="s1">&#39;{&#39;</span><span class="p">,</span> <span class="s1">&#39;}&#39;</span><span class="p">),</span> <span class="s1">&#39;&#39;</span><span class="p">,</span> <span class="nv">$new</span><span class="p">);</span> </span><span id="L-196"><a name="L-196"></a> <span class="nv">$new</span> <span class="o">=</span> <span class="nb">strip_tags</span><span class="p">(</span><span class="nb">htmlspecialchars</span><span class="p">(</span><span class="nv">$new</span><span class="p">));</span> </span><span id="L-197"><a name="L-197"></a> <span class="c1">// keys have no business having spaces so replace with underscores</span> </span><span id="L-198"><a name="L-198"></a> <span class="nv">$new</span> <span class="o">=</span> <span class="nb">str_replace</span><span class="p">(</span><span class="s1">&#39; &#39;</span><span class="p">,</span> <span class="s1">&#39;_&#39;</span><span class="p">,</span> <span class="nb">trim</span><span class="p">(</span><span class="nv">$new</span><span class="p">));</span> </span><span id="L-199"><a name="L-199"></a> </span><span id="L-200"><a name="L-200"></a> <span class="c1">// if the keys are not namespaced then make it so</span> </span><span id="L-201"><a name="L-201"></a> <span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="nv">$this</span><span class="o">-&gt;</span><span class="na">_namespaced</span><span class="p">)</span> <span class="nv">$new</span> <span class="o">=</span> <span class="nb">strtoupper</span><span class="p">(</span><span class="nv">$this</span><span class="o">-&gt;</span><span class="na">_component</span><span class="p">)</span><span class="o">.</span><span class="s1">&#39;_&#39;</span><span class="o">.</span><span class="nv">$new</span><span class="p">;</span> </span><span id="L-202"><a name="L-202"></a> </span><span id="L-203"><a name="L-203"></a> <span class="c1">// generate the language file</span> </span><span id="L-204"><a name="L-204"></a> <span class="nv">$this</span><span class="o">-&gt;</span><span class="na">_language</span><span class="p">[]</span> <span class="o">=</span> <span class="nv">$new</span><span class="o">.</span><span class="s1">&#39;=&quot;&#39;</span><span class="o">.</span><span class="nv">$original</span><span class="o">.</span><span class="s1">&#39;&quot;&#39;</span><span class="o">.</span><span class="s2">&quot;</span><span class="se">\n</span><span class="s2">&quot;</span><span class="p">;</span> </span><span id="L-205"><a name="L-205"></a> </span><span id="L-206"><a name="L-206"></a> <span class="c1">// return the string with the new namespaced uppercase key</span> </span><span id="L-207"><a name="L-207"></a> <span class="k">return</span> <span class="p">(</span><span class="nv">$this</span><span class="o">-&gt;</span><span class="na">_callback</span> <span class="o">==</span> <span class="s1">&#39;jtext&#39;</span><span class="p">)</span> <span class="o">?</span> <span class="s1">&#39;JText::_(\&#39;&#39;</span><span class="o">.</span><span class="nv">$new</span><span class="o">.</span><span class="s1">&#39;\&#39;)&#39;</span> <span class="o">:</span> <span class="s1">&#39;@text(\&#39;&#39;</span><span class="o">.</span><span class="nv">$new</span><span class="o">.</span><span class="s1">&#39;\&#39;)&#39;</span><span class="p">;</span> </span><span id="L-208"><a name="L-208"></a> </span><span id="L-209"><a name="L-209"></a> <span class="p">}</span> </span><span id="L-210"><a name="L-210"></a> <span class="p">}</span> </span><span id="L-211"><a name="L-211"></a> </span><span id="L-212"><a name="L-212"></a> <span class="sd">/**</span> </span><span id="L-213"><a name="L-213"></a><span class="sd"> * Method for saving new files with replaced text</span> </span><span id="L-214"><a name="L-214"></a><span class="sd"> *</span> </span><span id="L-215"><a name="L-215"></a><span class="sd"> * @param array an array of files</span> </span><span id="L-216"><a name="L-216"></a><span class="sd"> */</span> </span><span id="L-217"><a name="L-217"></a> <span class="k">protected</span> <span class="k">function</span> <span class="nf">_saveReplacedText</span><span class="p">(</span><span class="nv">$files</span><span class="p">)</span> </span><span id="L-218"><a name="L-218"></a> <span class="p">{</span> </span><span id="L-219"><a name="L-219"></a> <span class="c1">// loop through each file in the folder</span> </span><span id="L-220"><a name="L-220"></a> <span class="k">foreach</span> <span class="p">(</span><span class="nv">$files</span> <span class="k">as</span> <span class="nv">$file</span><span class="p">)</span> <span class="p">{</span> </span><span id="L-221"><a name="L-221"></a> <span class="c1">// i suck at regex, so there you go.....</span> </span><span id="L-222"><a name="L-222"></a> <span class="nv">$sqpattern</span> <span class="o">=</span> <span class="s1">&#39;/(JText)(:)(:)(_)(\\()(\\\&#39;.*?\\\&#39;)(\\))/&#39;</span><span class="p">;</span> </span><span id="L-223"><a name="L-223"></a> </span><span id="L-224"><a name="L-224"></a> <span class="c1">// read the file into an array</span> </span><span id="L-225"><a name="L-225"></a> <span class="nv">$content</span> <span class="o">=</span> <span class="nb">file</span><span class="p">(</span><span class="nv">$file</span><span class="p">);</span> </span><span id="L-226"><a name="L-226"></a> <span class="nv">$this</span><span class="o">-&gt;</span><span class="na">_callback</span> <span class="o">=</span> <span class="s1">&#39;jtext&#39;</span><span class="p">;</span> </span><span id="L-227"><a name="L-227"></a> </span><span id="L-228"><a name="L-228"></a> <span class="c1">//loop through our file array</span> </span><span id="L-229"><a name="L-229"></a> <span class="k">foreach</span> <span class="p">(</span><span class="nv">$content</span> <span class="k">as</span> <span class="nv">$i</span> <span class="o">=&gt;</span> <span class="nv">$line</span><span class="p">)</span> <span class="p">{</span> </span><span id="L-230"><a name="L-230"></a> <span class="nv">$content</span><span class="p">[</span><span class="nv">$i</span><span class="p">]</span> <span class="o">=</span> <span class="nb">preg_replace_callback</span><span class="p">(</span><span class="nv">$sqpattern</span><span class="p">,</span> <span class="k">array</span><span class="p">(</span><span class="nv">$this</span><span class="p">,</span> <span class="s1">&#39;_pregCallback&#39;</span><span class="p">),</span> <span class="nv">$line</span><span class="p">);</span> </span><span id="L-231"><a name="L-231"></a> <span class="p">}</span> </span><span id="L-232"><a name="L-232"></a> <span class="c1">//finally save the new file </span> </span><span id="L-233"><a name="L-233"></a> <span class="nx">JFile</span><span class="o">::</span><span class="na">write</span><span class="p">(</span><span class="nx">JPATH_ROOT</span><span class="o">.</span><span class="nv">$this</span><span class="o">-&gt;</span><span class="na">_directory</span><span class="o">.</span><span class="nb">str_replace</span><span class="p">(</span><span class="nx">JPATH_ROOT</span><span class="p">,</span> <span class="s1">&#39;&#39;</span><span class="p">,</span> <span class="nv">$file</span><span class="p">),</span> <span class="nb">implode</span><span class="p">(</span><span class="s2">&quot;&quot;</span><span class="p">,</span> <span class="nv">$content</span><span class="p">));</span> </span><span id="L-234"><a name="L-234"></a> </span><span id="L-235"><a name="L-235"></a> <span class="c1">// if we are nooku run the @text</span> </span><span id="L-236"><a name="L-236"></a> <span class="k">if</span> <span class="p">(</span><span class="nv">$this</span><span class="o">-&gt;</span><span class="na">_nooku</span><span class="p">)</span> <span class="p">{</span> </span><span id="L-237"><a name="L-237"></a> </span><span id="L-238"><a name="L-238"></a> <span class="nv">$pattern</span> <span class="o">=</span> <span class="s1">&#39;/(@)(text)(\\()(\&#39;).*?(\&#39;)(\\))/&#39;</span><span class="p">;</span> </span><span id="L-239"><a name="L-239"></a> </span><span id="L-240"><a name="L-240"></a> <span class="c1">// make sure we run this on the files we have already done jtext with</span> </span><span id="L-241"><a name="L-241"></a> <span class="c1">// read the file into an array</span> </span><span id="L-242"><a name="L-242"></a> <span class="nv">$content</span> <span class="o">=</span> <span class="nb">file</span><span class="p">(</span><span class="nx">JPATH_ROOT</span><span class="o">.</span><span class="nv">$this</span><span class="o">-&gt;</span><span class="na">_directory</span><span class="o">.</span><span class="s1">&#39;/&#39;</span><span class="o">.</span><span class="nb">str_replace</span><span class="p">(</span><span class="nx">JPATH_ROOT</span><span class="p">,</span> <span class="s1">&#39;&#39;</span><span class="p">,</span> <span class="nv">$file</span><span class="p">));</span> </span><span id="L-243"><a name="L-243"></a> </span><span id="L-244"><a name="L-244"></a> <span class="nv">$this</span><span class="o">-&gt;</span><span class="na">_callback</span> <span class="o">=</span> <span class="s1">&#39;nooku&#39;</span><span class="p">;</span> </span><span id="L-245"><a name="L-245"></a> </span><span id="L-246"><a name="L-246"></a> <span class="c1">//loop through our file array</span> </span><span id="L-247"><a name="L-247"></a> <span class="k">foreach</span> <span class="p">(</span><span class="nv">$content</span> <span class="k">as</span> <span class="nv">$i</span> <span class="o">=&gt;</span> <span class="nv">$line</span><span class="p">)</span> <span class="p">{</span> </span><span id="L-248"><a name="L-248"></a> <span class="nv">$content</span><span class="p">[</span><span class="nv">$i</span><span class="p">]</span> <span class="o">=</span> <span class="nb">preg_replace_callback</span><span class="p">(</span><span class="nv">$pattern</span><span class="p">,</span> <span class="k">array</span><span class="p">(</span><span class="nv">$this</span><span class="p">,</span> <span class="s1">&#39;_pregCallback&#39;</span><span class="p">),</span> <span class="nv">$line</span><span class="p">);</span> </span><span id="L-249"><a name="L-249"></a> <span class="p">}</span> </span><span id="L-250"><a name="L-250"></a> <span class="c1">//finally save the new file </span> </span><span id="L-251"><a name="L-251"></a> <span class="nx">JFile</span><span class="o">::</span><span class="na">write</span><span class="p">(</span><span class="nx">JPATH_ROOT</span><span class="o">.</span><span class="nv">$this</span><span class="o">-&gt;</span><span class="na">_directory</span><span class="o">.</span><span class="nb">str_replace</span><span class="p">(</span><span class="nx">JPATH_ROOT</span><span class="p">,</span> <span class="s1">&#39;&#39;</span><span class="p">,</span><span class="nv">$file</span><span class="p">),</span> <span class="nb">implode</span><span class="p">(</span><span class="s2">&quot;&quot;</span><span class="p">,</span> <span class="nv">$content</span><span class="p">));</span> </span><span id="L-252"><a name="L-252"></a> <span class="p">}</span> </span><span id="L-253"><a name="L-253"></a> <span class="p">}</span> </span><span id="L-254"><a name="L-254"></a> <span class="p">}</span> </span><span id="L-255"><a name="L-255"></a><span class="p">}</span> </span></pre></div> </td></tr></table>