<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>nova blog</title>
	<atom:link href="http://blog.tlsys.hu/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.tlsys.hu</link>
	<description></description>
	<lastBuildDate>Mon, 17 Oct 2011 19:44:41 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>jQuery UI datepicker használata egy hét kijelölésére</title>
		<link>http://blog.tlsys.hu/jquery-ui-datepicker-hasznalata-egy-het-kijelolesere/</link>
		<comments>http://blog.tlsys.hu/jquery-ui-datepicker-hasznalata-egy-het-kijelolesere/#comments</comments>
		<pubDate>Tue, 23 Aug 2011 18:22:48 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Nincs kategorizálva]]></category>

		<guid isPermaLink="false">http://blog.tlsys.hu/?p=560</guid>
		<description><![CDATA[A jQuery UI egy nagyon hasznos kis eszköz, de a megfelelő ismeretek birtokában a címben található feladat megoldása sem tűnne triviálisnak. A datepicker eseményei eléggé hiányosak. Van mindenféle before esemény, de nincs after. Nincs semmilyen eseményünk azután hogy a naptár kiírásra kerül. Így például a naptár táblázatának egy sorát nem tudjuk ellátni utólag semmilyen külön [...]]]></description>
			<content:encoded><![CDATA[<p>A jQuery UI egy nagyon hasznos kis eszköz, de a megfelelő ismeretek birtokában a címben található feladat megoldása sem tűnne triviálisnak. A datepicker eseményei eléggé hiányosak. Van mindenféle before esemény, de nincs after. Nincs semmilyen eseményünk azután hogy a naptár kiírásra kerül. Így például a naptár táblázatának egy sorát nem tudjuk ellátni utólag semmilyen külön css osztállyal. Nos, ha a teljes sort nem is, de a sor elemeit (td) már képesek vagyunk szerkeszteni a &#8220;beforeShowDay&#8221; eseménnyel.<br />
<span id="more-560"></span><br />
A &#8220;beforeShowDay&#8221; minden egyes nap megjelenítése esetén meghívásra kerül. Paraméterben megkapjuk az aktuális nap dátumát és vissza kell adnunk egy tömböt. A tömb első eleme egy boolean változó, ez határozza meg, hogy az aktuális nap kiválasztható-e. A mi esetünkben ez mindig &#8220;1&#8243;, hiszen nem akarjuk megakadályozni a kiválasztást. A tömb második eleme már érdekesebb, adhatunk egy egyedi classt az elemnek. Ezt fel tudjuk használni arra, hogy megkülönböztessük a kiválasztott napokat. Még létezik egy harmadik paraméter, ami a link title-je lenne, de erre sem lesz most szükségünk.</p>
<p>Először is szükségünk lesz az alap keretrendszerre</p>
<pre class="brush: xml; title: ; notranslate">
&lt;script type=&quot;text/javascript&quot; src=&quot;https://ajax.googleapis.com/ajax/libs/jquery/1.6.2/jquery.min.js&quot;&gt;&lt;/script&gt;
&lt;script type=&quot;text/javascript&quot; src=&quot;https://ajax.googleapis.com/ajax/libs/jqueryui/1.8.15/jquery-ui.min.js&quot;&gt;&lt;/script&gt;
&lt;link rel=&quot;stylesheet&quot; type=&quot;text/css&quot; href=&quot;http://jquery-ui.googlecode.com/svn/tags/1.8.15/themes/base/jquery-ui.css&quot;&gt;
</pre>
<p>És egy külön css osztályra</p>
<pre class="brush: css; title: ; notranslate">
&lt;style&gt;
	.has_event a{
		color:#bb0000 !important;
		font-weight:bold !important;
		background:#cccccc !important;
	}
&lt;/style&gt;
</pre>
<p>Először is jöjjön a HTML. Lesz egy doboz, amiben a naptárunk egy inline elem lesz.</p>
<pre class="brush: xml; title: ; notranslate">
  &lt;div id=&quot;date&quot;&gt;&lt;/div&gt;
  &lt;input id=&quot;targetStart&quot; type=&quot;text&quot;/&gt;
  &lt;input id=&quot;targetEnd&quot; type=&quot;text&quot;/&gt;
</pre>
<p>A gyári datepickert is jelenítsük meg (inline)</p>
<pre class="brush: jscript; title: ; notranslate">
$(function() {
	$(&quot;#date&quot;).datepicker({
			showWeek: true,
			numberOfMonths: 3,
			firstDay: 1,
	})
});
</pre>
<p>És hát íme a beforeshow esemény. Előtte néhány dátumkezelő függvény elkészítésre is szükség volt.<br />
A végén még beállítunk egy alapértelmezett értéket.</p>
<pre class="brush: jscript; title: ; notranslate">
Date.prototype.getWeek = function() {
	var onejan = new Date(this.getFullYear(),0,1);
	return Math.ceil((((this - onejan) / 86400000) + onejan.getDay())/7);
}
Date.prototype.getWeekMonday = function() {
	var res = new Date();
	(this.getDay() == 0) ? res.setTime(this.getTime() - (6 * 86400000)) : res.setTime(this.getTime() + 86400000 - (this.getDay() * 86400000));
	return res;
}
$(function() {
  $( &quot;#date&quot; ).datepicker(&quot;option&quot;, &quot;beforeShowDay&quot;, function(date) {
     var selectedWeek = $(&quot;#date&quot;).datepicker(&quot;getDate&quot;).getWeek();
     var thisWeek = date.getWeek();
     if (selectedWeek == thisWeek)
    {
       jQuery('#targetStart').val($.datepicker.formatDate('yy-mm-dd', date.getWeekMonday()))
       jQuery('#targetEnd').val($.datepicker.formatDate('yy-mm-dd', date))
       return [1,'has_event'];
    }
    return [1]
  })
  $(&quot;#date&quot;).datepicker(&quot;setDate&quot;, new Date(2011,7,23) );
});
</pre>
<p><a href="http://blog.tlsys.hu/wp-content/uploads/2011/08/index.html">Itt</a> tekinthető meg a mű</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.tlsys.hu/jquery-ui-datepicker-hasznalata-egy-het-kijelolesere/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Több 1000 tetszőleges rekord felvitele MySQL adatbázisba</title>
		<link>http://blog.tlsys.hu/tobb-100-vagy-1000-tetszoleges-rekord-felvitele-mysql-adatbazisba/</link>
		<comments>http://blog.tlsys.hu/tobb-100-vagy-1000-tetszoleges-rekord-felvitele-mysql-adatbazisba/#comments</comments>
		<pubDate>Sat, 23 Jul 2011 18:15:45 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[sql]]></category>

		<guid isPermaLink="false">http://blog.tlsys.hu/?p=539</guid>
		<description><![CDATA[Esetleg szükségünk lehet arra, hogy egy táblát feltöltsünk tetszőleges teszt adatokkal&#8230;.

Íme egy példa erre:

CREATE TABLE `tabla` (
  `id` int(10) unsigned NOT NULL auto_increment,
  `name` varchar(255) NOT NULL,
  PRIMARY KEY  (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=12 DEFAULT CHARSET=utf8;
truncate table tabla;
CREATE PROCEDURE dorepeat(p1 INT)
BEGIN
SET @x = 0;
	REPEAT
       SET @x = [...]]]></description>
			<content:encoded><![CDATA[<p>Esetleg szükségünk lehet arra, hogy egy táblát feltöltsünk tetszőleges teszt adatokkal&#8230;.</p>
<p><span id="more-539"></span></p>
<p>Íme egy példa erre:</p>
<pre class="brush: sql; title: ; notranslate">
CREATE TABLE `tabla` (
  `id` int(10) unsigned NOT NULL auto_increment,
  `name` varchar(255) NOT NULL,
  PRIMARY KEY  (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=12 DEFAULT CHARSET=utf8;
truncate table tabla;
CREATE PROCEDURE dorepeat(p1 INT)
BEGIN
SET @x = 0;
	REPEAT
       SET @x = @x + 1;
       INSERT INTO TABLA VALUES(NULL, concat('valami', @x));
    UNTIL @x &gt; p1
    END REPEAT;
END;
CALL dorepeat(1000); -- itt növelhető az mennyiség
commit work;
DROP PROCEDURE dorepeat;
</pre>
]]></content:encoded>
			<wfw:commentRss>http://blog.tlsys.hu/tobb-100-vagy-1000-tetszoleges-rekord-felvitele-mysql-adatbazisba/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Symfony IV. rész &#8211; egy form embedder plugin</title>
		<link>http://blog.tlsys.hu/symfony_form_embedder_plugin/</link>
		<comments>http://blog.tlsys.hu/symfony_form_embedder_plugin/#comments</comments>
		<pubDate>Sun, 20 Feb 2011 08:43:41 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Symfony]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://blog.tlsys.hu/?p=483</guid>
		<description><![CDATA[Ebben a bejegyzésemben az előző bejegyzésemben bemutatott form beágyazási technika alapján készített plugint tenném közzé.

A plugin célja, hogy egyszerűsítsen a symfony beágyazási technikáján. Az egyszerűsítés viszont nem minden esetben jobb. Tehát ott érdemes használni, ahol nem visszük túlzásba a beágyazást.   Ha túlságosan egyedi formára kívánjuk hozni, akkor előfordulhat hogy rengeteg módosítás helyett, célszerűbb [...]]]></description>
			<content:encoded><![CDATA[<p>Ebben a bejegyzésemben az <a href="symfony_embedded_form/">előző bejegyzésemben</a> bemutatott form beágyazási technika alapján készített plugint tenném közzé.<br />
<span id="more-483"></span><br />
A plugin célja, hogy egyszerűsítsen a symfony beágyazási technikáján. Az egyszerűsítés viszont nem minden esetben jobb. Tehát ott érdemes használni, ahol nem visszük túlzásba a beágyazást. <img src='http://blog.tlsys.hu/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' />  Ha túlságosan egyedi formára kívánjuk hozni, akkor előfordulhat hogy rengeteg módosítás helyett, célszerűbb teljesen tiszta lapról indulni. Akkor pedig az előző bejegyzésem nagyobb segítség, mint ez a plugin.<br />
<strong>A plugin használatának nagyon fontos feltétele, hogy a kapcsolt táblák 1:N kapcsolatban legyenek az adatbázis szerint is. Tehát a beágyazandó táblában legyen meg az idegen kulcs!</strong></p>
<p>Hozzávalók:<br />
<a href="http://blog.tlsys.hu/wp-content/uploads/2011/02/tlsysEmbedderHelperPlugin.tar.gz">A plugin itt található</a><br />
<a href="http://www.symfony-project.org/plugins/sfJqueryReloadedPlugin">sfJqueryReloadedPlugin</a><br />
<a href="http://book.cakephp.org/hu/view/3/A-Kézikönyv#!/hu/view/640/Set">CakePHP set osztálya</a>, <a href="http://blog.tlsys.hu/wp-content/uploads/2011/02/set.zip">a symfonysított verziót ide tettem fel</a>.</p>
<p>A plugin telepítése:</p>
<ol>
<li>
Miután létrehoztuk a projektünket, a plugin könyvtárba csomagoljuk ki plugint
</li>
<li>
Engedélyezzük a az apps/config/settings.yml fájlban:</p>
<pre class="brush: php; title: ; notranslate">
all:
  enabled_modules:        [default, tlsysEmbedderHelper, stb]
</pre>
<p>Erre azért van szükség, mert az ajaxos hívást kiszolgáló action a pluginba került. Így azt sem kell állandóan újra és újra megírni.
</li>
<li>
A lib/form/BaseFormPropel.class.php származtatása a pluginnban talalhato tlsysEmbedderFormból </p>
<pre class="brush: php; title: ; notranslate">
abstract class BaseFormPropel extends tlsysEmbedderForm
</pre>
</li>
<li>
A szükséges formokkban értéket kell adni a $tlsysEmbeddedForms protected változónak. Egy példa az előző bejegyzésemben található OsztalyFormra.</p>
<pre class="brush: php; title: ; notranslate">
class OsztalyForm extends BaseOsztalyForm
{
  # meg kell adni a beágyazni szándékozott osztály nevét, egyes és többesszámban
  # a többesszám az, ahogy a propel hivatkozik rá
  protected $tlsysEmbeddedForms = array(array('singular'=&gt;'Tanulo', 'plural'=&gt;'Tanulos'));
  public function configure()
  {
  }
}
</pre>
</li>
</ol>
<p>Ezzel a 4 lépéssel ugyanazt értük el, mint az előző bejegyzésemben található litániával.</p>
<p><a href="http://blog.tlsys.hu/wp-content/uploads/2011/02/sandbox-tlsysEmbedderHelperPlugin.tar.gz">A bemutató alkalmazás innen tölthető le</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.tlsys.hu/symfony_form_embedder_plugin/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Symfony III. rész – beágyazott form</title>
		<link>http://blog.tlsys.hu/symfony_embedded_form/</link>
		<comments>http://blog.tlsys.hu/symfony_embedded_form/#comments</comments>
		<pubDate>Mon, 14 Feb 2011 18:52:25 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Symfony]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://blog.tlsys.hu/?p=461</guid>
		<description><![CDATA[A symfony beágyazott (embedded) form megoldásáról szóló kis szösszenet kerül ide.
A segítségével két, master-detail kapcsolatban álló tábla egyidejű módosítását lehet megvalósítani.

Itt is az első leírásban létrehozott sandbox projektünket fogjuk átszerkeszteni.
Tehát állítsuk be a config könyvtárban lévő adatbázisokhoz tartozó fájlokat (propel.ini és databases.yml) az előzőleg létrehozott sandbox adatbázisra. Majd szerkesszük meg a config/schema.yml fájlt:

propel:
  _attributes:
 [...]]]></description>
			<content:encoded><![CDATA[<p>A symfony beágyazott (embedded) form megoldásáról szóló kis szösszenet kerül ide.<br />
A segítségével két, master-detail kapcsolatban álló tábla egyidejű módosítását lehet megvalósítani.<br />
<span id="more-461"></span></p>
<p>Itt is az <a href="http://blog.tlsys.hu/symfony-propel-ubuntu-telepit/">első leírásban</a> létrehozott sandbox projektünket fogjuk átszerkeszteni.</p>
<p>Tehát állítsuk be a config könyvtárban lévő adatbázisokhoz tartozó fájlokat (propel.ini és databases.yml) az előzőleg létrehozott sandbox adatbázisra. Majd szerkesszük meg a config/schema.yml fájlt:</p>
<pre class="brush: sql; title: ; notranslate">
propel:
  _attributes:
    package: lib.model
    defaultIdMethod: native
  osztaly:
    _attributes: { phpName: Osztaly }
    id: { phpName: Id, type: INTEGER, size: '11', primaryKey: true, autoIncrement: true, required: true }
    kod: { phpName: Kod, type: CHAR, size: '1', required: true }
    evfolyam: { phpName: Evfolyam, type: INTEGER, size: '11', required: true }
  tanulo:
    _attributes: { phpName: Tanulo }
    id: { phpName: Id, type: INTEGER, size: '11', primaryKey: true, autoIncrement: true, required: true }
    name: { phpName: Name, type: VARCHAR, size: '255', required: true }
    szuletes: { phpName: Szuletes, type: DATE, required: true }
    osztaly_id: { phpName: OsztalyId, type: INTEGER, size: '11', required: false, foreignTable: osztaly, foreignReference: id, onDelete: CASCADE, onUpdate: CASCADE }
    _indexes: { category_id: [osztaly_id] }
</pre>
<p>Majd futtassuk le az alábbi parancsokat is:</p>
<pre class="brush: bash; title: ; notranslate">
# hozzuk létre a formokat, filtereket, modeleket, és a táblákat is generáljuk le
# a kérdésre, miszerint kívánjuk-e hogy felülírja az adatbázisunkat válaszoljunk igennel (Y)
./symfony propel:build-all
# és a két táblánkhoz tartozó admin felületet készítsük el:
./symfony propel:generate-admin frontend osztaly
./symfony propel:generate-admin frontend tanulo
</pre>
<p>Szükségünk lesz egy pluginra, a <a href="http://www.symfony-project.org/plugins/sfJqueryReloadedPlugin">sfJqueryReloadedPlugin</a>ra. A telepítése nem túl bonyolult. Ha az összes plugint engedélyeztük (a config/ProjectConfiguration.class.php fájlban), akkor elég bemásolni a plugin könyvtárba. Mivel a letöltött tömörített fájlban mindenféle kódszámot ír a könyvtárnév végére, így a könnyebb elérhetőség miatt használjuk inkább a sfJqueryReloadedPlugin könyvtárnevet.</p>
<p>A lib/model/Osztaly.php fájlt pedig egészítsük ki az alábbi metódussal</p>
<pre class="brush: php; title: ; notranslate">
public function __toString()
{
  return $this-&gt;evfolyam.'/'.$this-&gt;kod;
}
</pre>
<p>Az apps/frontend/config/routing.yml fájlt is módosítsuk, hogy az osztályok listája jelenjen meg alapértelmezetten.</p>
<pre class="brush: php; title: ; notranslate">
homepage:
  url:   /
  param: { module: osztaly, action: index }
</pre>
<p>Ezzel az alap projektünk elkészült. Lehet listázni, új osztályt felvinni és módosítani. Azonban az osztályhoz még nem tudunk tanulót rögzíteni. Ehhez módosítsuk a lib/form/OsztalyForm.class.php fájlt.<br />
Ez egy hosszabb lélegzetvétel lesz, mert nem aprózom el <img src='http://blog.tlsys.hu/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<pre class="brush: php; title: ; notranslate">
class OsztalyForm extends BaseOsztalyForm
{
   /**
   * a form konfiguralasa
   * hozzaadjuk a tanulokat a formhoz
   * hozzadjuk a hozzaadas gombot (Uj) letrehozo widgetet is.
   */
   public function configure()
  {
    parent::setup();
    $context = sfContext::getInstance();
    $this-&gt;loadHelpers($context);

    $tanulok = $this-&gt;getObject()-&gt;getTanulos();

    //Egy ures formba eltaroljuk az embeddelt TanuloFormokat
    $this-&gt;embedForm('tanulos', new sfForm());
    $count = 0;
    foreach ($tanulok as $tanulo) {
      $this-&gt;addTanulo($count, $tanulo);
      $count ++;
    }

    // a hozzaadas gomb mint egy uj mezo kerul a formunkba
    $this-&gt;widgetSchema['addEmbedform'] = new embedderFormWidget(array(
        'url'=&gt;url_for('osztaly/getEmbedForm'),
        'html_element' =&gt; &quot;.sf_admin_form_field_tanulos table:first&quot;,
        ));
    $this-&gt;widgetSchema-&gt;setLabel('addEmbedform', false);
  }

  /**
   * kulonbozo helperek betoltese
   * Url helper az ajax hivashoz hasznalando helyes url megadasahoz
   * jQueryReloadedPlugin jQuery helpere
   * es a jQuery UI plugin javascript betoltese
   *
   * @param sfContext $context
   */
  public function loadHelpers($context)
  {
    $context-&gt;getConfiguration()-&gt;loadHelpers(array('jQuery','Tag','Url'));
    $context-&gt;getResponse()-&gt;addStyleSheet(sfConfig::get('sf_jquery_web_dir', '/sfJqueryReloadedPlugin') . &quot;/css/ui-lightness/jquery-ui-1.8.2.custom.css&quot;);
    jq_add_plugins_by_name(array('ui'));
  }

  /**
   * A torles link a Tanulo mellett
   *
   * @param string $index
   * @return string
   */
  public function getEmbedFormLabel($index)
  {
    return jq_link_to_function(
      '&lt;span class=&quot;ui-icon ui-icon-trash&quot;&gt;&lt;/span&gt;',
      &quot;jQuery(this).parents('tr:first').remove(); jQuery('#osztaly_tanulos_&quot;.$index.&quot;_id').remove();&quot;,
      array('confirm' =&gt; 'Sure???'));
  }

  /**
   * A Tanulo hozzaadasa az Osztalyhoz
   *
   * Erre akkor is szuksegunk lesz, amikor egy uj tanulot veszunk fel
   *
   * @param string $num
   * @param Tanulo $tanulo
   */
  public function addTanulo($num, $tanulo = null)
  {
    if (!$tanulo)
    {
      $tanulo = new Tanulo();
    }
    $tanulo-&gt;setOsztaly($this-&gt;getObject());
    $form = new TanuloForm($tanulo);
    $form-&gt;getWidgetSchema()-&gt;offsetUnset('osztaly_id');
    $this-&gt;embeddedForms['tanulos']-&gt;embedForm($num, $form);

    // torles link
    $label = $this-&gt;getEmbedFormLabel($num);
    $this-&gt;embeddedForms['tanulos']-&gt;widgetSchema-&gt;setLabel($num,$label);

    $this-&gt;embedForm('tanulos', $this-&gt;embeddedForms['tanulos']);
  }

  /**
   *
   * Ha rogziteskor uj tanulot vettunk fel, akkor adjuk hozza az osztalyhoz
   * Ha pedig toroltunk akkor tavolitsuk el a formbol
   */
  public function bind(array $taintedValues = null, array $taintedFiles = null)
  {
    if (isset($taintedValues['tanulos']))
    {
      foreach($taintedValues['tanulos'] as $key =&gt; $tanulo)
      {
        if (!isset($this['tanulos'][$key]))
        {
          $this-&gt;addTanulo($key);
        }
      }
    }

    foreach ($this-&gt;embeddedForms['tanulos'] as $key=&gt;$form)
    {
      if (!isset($taintedValues['tanulos'][$key]) &amp;&amp; $key&lt;&gt;'_csrf_token')
      {
        $this-&gt;getWidgetSchema()-&gt;offsetGet('tanulos')-&gt;offsetUnset($key);
        $this-&gt;getValidatorSchema()-&gt;offsetGet('tanulos')-&gt;offsetUnset($key);
        unset(
          $taintedValues['tanulos'][$key],
          $taintedFiles['tanulos'][$key]);
      }
    }

    parent::bind($taintedValues, $taintedFiles);
  }

  /**
   * Tanulonak beallitjuk az osztalyat
   *
   * Amikor egy uj osztallyal egyutt viszunk fel egy tanulot, akkor
   * meg kell adnunk a tanulonak is, hogy melyik osztalyba tartozik.
   * Raadasul eltavolitottuk a tanulo from osztaly_id mezojet, így minden
   * egyeb esetben is szukseg van erre.
   *
   */
  public function saveEmbeddedForms($con = null, $forms = null)
  {
    $oszaly = $this-&gt;getObject();
    if ($forms)
    {
      foreach ($forms as $form)
      {
        if ($form instanceof sfFormObject)
        {
          $form-&gt;getObject()-&gt;setOsztaly($oszaly);
        }
      }
    }   

    return parent::saveEmbeddedForms($con, $forms);
  }

  /**
   * Ezt az osztalyfuggvenyt bovitjuk. A kikeressuk a postolt adatokbol a  tanulok
   * azonositojat (id). Amelyik tanulo azonositoja nincs benne a kapott eredmenyben,
   * toroljuk az osztalybol.
   */
  public function updateObjectEmbeddedForms ($values, $forms = null)
  {
    // $values['tanulos'][][id] elemeket, ahol id&gt;0
    $ids = set::extract('/tanulos[id&gt;0]/id', $values);
    if (!$forms)
    {
      $c = new Criteria();
      $c-&gt;add(TanuloPeer::OSZTALY_ID, $this-&gt;getObject()-&gt;getId());
      $c-&gt;add(TanuloPeer::ID, $ids, Criteria::NOT_IN);
      TanuloPeer::doDelete($c);
    }
    return parent::updateObjectEmbeddedForms ($values, $forms);
  }
}
</pre>
<p>Három dolgot használtunk fel a formban, amit még el kell készítenünk. </p>
<p>Egy widget, ami létrehozza a tanuló hozzáadása linket. Ezt embedderFormWidget néven neveztem el és a lib/widget mappába tegyük. Ez a mappa még nem létezik, létre kell hozni. Ebbe hozuk létre a embedderFormWidget.class.php fájlt:</p>
<pre class="brush: php; title: ; notranslate">
&lt;?php
/**
 * @author     nova
 * @version    1.0.0
 */
class embedderFormWidget extends sfWidgetForm
{
  /**
   * Configures the current widget.
   *
   * Available options:
   *
   * @param string html_element - az elem, amihez hozzafuzunk
   * @param string url - az ajay keres url-je
   *
   * @see sfWidgetForm
   */
  protected function configure($options = array(), $attributes = array())
  {
    $this-&gt;addOption('html_element');
    $this-&gt;addOption('url');
    parent::configure($options, $attributes);
  }

  /**
   * @param  string $name        The element name
   * @param  string $value       The date displayed in this widget
   * @param  array  $attributes  An array of HTML attributes to be merged with the default HTML attributes
   * @param  array  $errors      An array of errors for the field
   *
   * @return string An HTML tag string
   *
   * @see sfWidgetForm
   */
  public function render($name, $value = null, $attributes = array(), $errors = array())
  {
    $attributes = $this-&gt;getAttributes();
    $html =jq_link_to_function(
        '&lt;span class=&quot;ui-icon ui-icon-circle-plus fright&quot;&gt;&lt;/span&gt;&lt;span class=&quot;fright&quot;&gt;Új&lt;/span&gt;',
        &quot;jQuery.get('&quot;.$this-&gt;getOption('url').&quot;',function(data){
            jQuery('&quot;.$this-&gt;getOption('html_element').&quot;').append(data);
        });&quot;,
        $attributes);
    return $html;
  }
}
</pre>
<p>Aztán gondoskodnuk kell az ajax hívás válaszáról a szerver oldalon. Módosítsuk az apps/fronntedn/modules/osztaly/actions/actions.class.php fájlt az alábbi metódussal:</p>
<pre class="brush: php; title: ; notranslate">
  /**
   * Visszaad egy új sort (widgetet) a tanulo formhoz
   *
   * @param sfWebRequest $request
   */
  public function executeGetEmbedForm(sfWebRequest $request)
  {
    $form = $this-&gt;configuration-&gt;getForm();
    $num = 'tmp_'.time();
    $form-&gt;addTanulo($num);

    return $this-&gt;renderText($form-&gt;getWidget('tanulos')-&gt;getWidget($num)-&gt;render($num));
  }
</pre>
<p>Ezen kívül még felhasználtam egy konkurens MVC rendszerben található igencsak hasznos osztályt, a<br />
<a href="http://book.cakephp.org/hu/view/3/A-Kézikönyv#!/hu/view/640/Set">CakePHP set osztályát</a><br />
Ezt persze módosítanom kellett, hogy szeresse a Symfony is. <a href="http://blog.tlsys.hu/wp-content/uploads/2011/02/set.zip">Ide tettem fel</a>.</p>
<p>Letölthetővé tettem a teljes projektet is, <a href="http://blog.tlsys.hu/wp-content/uploads/2011/02/sandbox.tar.gz">innen</a>.</p>
<p>Sajnos annyi energiám nem volt hogy lépésről lépésre építsem fel a projektet, remélem így is hasznosnak találja, aki elolvassa. Nekem meg jó jegyzet <img src='http://blog.tlsys.hu/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://blog.tlsys.hu/symfony_embedded_form/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Linux konzol</title>
		<link>http://blog.tlsys.hu/linux-konzol/</link>
		<comments>http://blog.tlsys.hu/linux-konzol/#comments</comments>
		<pubDate>Thu, 10 Jun 2010 11:55:09 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Nincs kategorizálva]]></category>

		<guid isPermaLink="false">http://blog.tlsys.hu/?p=393</guid>
		<description><![CDATA[Néhány fontos dolog, amit a Linux konzolról tudni érdemes. 
quake szerű konzol:
sudo apt-get install yakuake
Konzol inditásakor lefutó fájl:
.profile
Az ablak kezelőből indított konzol indulásakor lefutó fájl:
.bashrc
Például az előzöekbe felvihetünk aliasokat
alias ssh-1='ssh felhasznalo@domain'
alias ssh-2='ssh -p 2222 felhasznalo@domain'
alias mount-1='sshfs felhasznalo@domain:/home/felhasznalo/directory/ /home/felhasznalo/directory'

sshfs:
www.wynia.org/wordpress/2007/02/sshfs-on-windows-via-samba-shares-on-ubuntu-vmware/
sshfs &#8211; távoli fájlrendszer felcsatolása biztonságos módon
Sajnos a linkek néha eltűnnek, így inkább leírom ide a főbb lépéseket:
A [...]]]></description>
			<content:encoded><![CDATA[<p>Néhány fontos dolog, amit a Linux konzolról tudni érdemes. <span id="more-393"></span></p>
<p>quake szerű konzol:<br />
<code>sudo apt-get install yakuake</code></p>
<p>Konzol inditásakor lefutó fájl:<br />
<code>.profile</code></p>
<p>Az ablak kezelőből indított konzol indulásakor lefutó fájl:<br />
<code>.bashrc</code></p>
<p>Például az előzöekbe felvihetünk aliasokat<br />
<code>alias ssh-1='ssh felhasznalo@domain'<br />
alias ssh-2='ssh -p 2222 felhasznalo@domain'<br />
alias mount-1='sshfs felhasznalo@domain:/home/felhasznalo/directory/ /home/felhasznalo/directory'<br />
</code><br />
sshfs:<a href="http://www.wynia.org/wordpress/2007/02/sshfs-on-windows-via-samba-shares-on-ubuntu-vmware/"><br />
www.wynia.org/wordpress/2007/02/sshfs-on-windows-via-samba-shares-on-ubuntu-vmware/</a><br />
<a href="http://linuxbox.hu/sshfs">sshfs &#8211; távoli fájlrendszer felcsatolása biztonságos módon</a><br />
Sajnos a linkek néha eltűnnek, így inkább leírom ide a főbb lépéseket:<br />
A már ismert fuse kernel modullal fel tudunk csatolni távoli fájlrendszereket az sshd démont használva sshfs segítségével.<br />
1. Pl. debian rendszeren a szoftver telepítése:<br />
<code>apt-get install sshfs</code><br />
2. Majd ellenőrizzük be van-e töltve a fuse kernel modul:<br />
<code>modprobe fuse # ez nálam már nem ment <img src='http://blog.tlsys.hu/wp-includes/images/smilies/icon_sad.gif' alt=':-(' class='wp-smiley' /> </code><br />
3. Adjuk be felhasználónk a fuse csoportba:<br />
<code>usermod -G fuse felhasznalo # addgroup felhasznalo fuse</code><br />
4. Majd neki is eshetünk használni a dolgot:<br />
<code>mkdir ~/remote_folder</code><br />
<code>sshfs felhasznalo@remote_server:/tmp ~/remote_folder</code><br />
5. Dolgunk végeztével így csatolhatjuk le:<br />
<code>fusermount -u ~/remote_folder</code><br />
6. /etc/fstabbal meg is könnyíthetjük ezt a procedurát.<br />
<code>sshfs#user1@remote_server:/tmp /home/user1/remote_folder/ fuse defaults,auto 0 0</code></p>
<p>ssh tunel<br />
Egy távoli szerverről (tavoliszerver.hu) elérhető másik szerver (tavoliszerverrollathatoszerver.hu) egy portját (8080) a mi gépünk egyik portjára (9999)irányíthatjuk <img src='http://blog.tlsys.hu/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /><br />
<code>ssh root@tavoliszerver.hu -p 2222 -L 9999:tavoliszerverrollathatoszerver.hu:8080</code></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.tlsys.hu/linux-konzol/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Symfony II. rész – admin generator</title>
		<link>http://blog.tlsys.hu/symfony-2-admin-generator/</link>
		<comments>http://blog.tlsys.hu/symfony-2-admin-generator/#comments</comments>
		<pubDate>Sat, 05 Jun 2010 21:08:11 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Symfony]]></category>

		<guid isPermaLink="false">http://blog.tlsys.hu/?p=351</guid>
		<description><![CDATA[Tovább mennék az első rész folyamányaként. Admin generátorról lesz itt is szó, néhány általános probléma megoldását tenném közzé:

a listában szereplő mezők változtatása
kapcsolt táblák szerinti rendezés


Eljött az idő hogy egy pici, de konkrét adatbázist kreáljunk.
Futtasuk le akár a már telepített phpmyadminban

CREATE DATABASE sandbox;
USE sandbox;
CREATE TABLE `categories` (
  `id` int(11) NOT NULL auto_increment,
  `name` varchar(255) [...]]]></description>
			<content:encoded><![CDATA[<p>Tovább mennék az <a href="http://blog.tlsys.hu/symfony-propel-ubuntu-telepit/">első rész</a> folyamányaként. Admin generátorról lesz itt is szó, néhány általános probléma megoldását tenném közzé:</p>
<ul>
<li>a listában szereplő mezők változtatása</li>
<li>kapcsolt táblák szerinti rendezés</li>
</ul>
<p><span id="more-351"></span><br />
Eljött az idő hogy egy pici, de konkrét adatbázist kreáljunk.<br />
Futtasuk le akár a már telepített phpmyadminban</p>
<pre class="brush: sql; title: ; notranslate">
CREATE DATABASE sandbox;
USE sandbox;
CREATE TABLE `categories` (
  `id` int(11) NOT NULL auto_increment,
  `name` varchar(255) default NULL,
  PRIMARY KEY  (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
CREATE TABLE `products` (
  `id` int(11) NOT NULL auto_increment,
  `name` varchar(255) NOT NULL,
  `price` float(9,3) default '0.000',
  `category_id` int(11) default NULL,
  PRIMARY KEY  (`id`),
  KEY `category_id` (`category_id`),
  CONSTRAINT `products_fk` FOREIGN KEY (`category_id`) REFERENCES `categories` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
</pre>
<p>Az első leírásban létrehozott sandbox projectünket fogjuk átszerkeszteni.<br />
Tehát állítsuk be a config könyvtárban lévő adatbázisokhoz tartozó fájlokat (propel.ini és databases.yml) az előbb létrehozott sandbox adatbázisra.<br />
Majd futtassuk le az alábbi parancsokat is:</p>
<pre class="brush: bash; title: ; notranslate">
# generáljuk le a schema.yml fájlt
./symfony propel:build-schema
#hozzuk létre a formokat, filtereket, modeleket, -C direktiva kihagyja az sql-t (classes only)
./symfony propel:build-all -C
# és a két táblánkhoz tartozó admin felületet készítsük el:
./symfony propel:generate-admin --module=CategoriesAdmin frontend categories
# az apps/frontend/modules/CategoriesAdmin modulunkat
# és a route (apps/frontend/config/routing.yml) szabályt is létre fogja hozni
./symfony propel:generate-admin --module=ProductsAdmin frontend products
</pre>
<p>Máris érdemes létrehozni a PROJECT_DIR/apps/frontend/templates/layout.php fájlban a 2 menüpontunkat. Közvetlenül a body nyitótagja után tegyük be az alábbi sorokat.</p>
<pre class="brush: xml; title: ; notranslate">
&lt;ul id=&quot;menu&quot;&gt;
  &lt;li&gt;&lt;a href=&quot;&lt;?php echo url_for('@categories')?&gt;&quot;&gt;&lt;/a&gt;Kategóriák&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;&lt;?php echo url_for('@products')?&gt;&quot;&gt;Termékek&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</pre>
<p>A http://mydomain/sandbox/frontend_dev.php/CategoriesAdmin érjük el az alkalmazásunkat. Most próbáljuk meg feltölteni adatokkal. Először vigyünk fel kategóriákat. Majd próbáljunk meg, felvinni termékeket is. Elvileg el kell akadnunk amiatt, hogy a categories modelunknek még nincs __toString() metódusa. Ez egy PHP metódus, ami egy objektum kiíratására szolgál. Jelen esetünkben, mi, a name mezővel jelenítenénk meg a tábla egyes rekordjait. Így hát hozzuk létre ezt a metódust a PROJECT_DIR/lib/model/categories.php fájlban.</p>
<pre class="brush: php; title: ; notranslate">
class Categories extends BaseCategories {
  public function __toString()
  {
    return $this-&gt;getName();
  }
} // Categories
</pre>
<p>Ezután már sikeresen megjeleníthetjük a listát, és rögzíthetünk új rekordokat. De mint láthatjuk a termékek listában nem a kategóriák neve, hanem annak azonosítója (id) szerepel, ráadásul a felhasználóknak a termékek id-ja is megjelent. Sajnos a generátorunk nem tökéletes, így a létrehozott fájlokat jó pár helyen módosítanunk kell.<br />
Elsőként magát a PROJECT_DIR/apps/frontend/modules/ProductsAdmin/config/generator.yml fájlt módosítjuk. Figyelve a .yml fájlokra jellemző szabályokra (legfőképp, hogy behúzás nem tabulátor, hanem 2 üres hely) a listát tartalmazó sort egészítsük ki:</p>
<pre class="brush: plain; title: ; notranslate">
list:
  display: [categories, name, price ] # felsoroljuk a megjelenített mezőket, kapcsolt tábla esetén a classt
  peer_method: doSelectJoinAll # modelpeer osztályunk metódusa
</pre>
<p>Másodikként tekintsük meg a létrehozott PROJECT_DIR/apps/frontend/modules/ProductsAdmin/actions/action.class.php fájlt. Mint láthatjuk a ProductsAdminActions osztályunk az autoProductsAdminActions osztályból származik. Ez pedig a cache könyvtárban keresendő, a  PROJECT_DIR/cache/frontend/dev/modules/ProductsAdmin/actions/action.class.php fájlban. Ennek az osztálynak kell 2 függvényét felül definiálnuk:</p>
<pre class="brush: php; title: ; notranslate">
class ProductsAdminActions extends autoProductsAdminActions
{
  protected function addSortCriteria($criteria)
  {
    if (array(null, null) == ($sort = $this-&gt;getSort()))
    {
      return;
    }

    if ($sort[0] == 'categories.name')
    {
      $column = CategoriesPeer::NAME;
    }
    else
    {
      $column = ProductsPeer::translateFieldName($sort[0], BasePeer::TYPE_FIELDNAME, BasePeer::TYPE_COLNAME);
    }

    if ('asc' == $sort[1])
    {
      $criteria-&gt;addAscendingOrderByColumn($column);
    }
    else
    {
      $criteria-&gt;addDescendingOrderByColumn($column);
    }
  }

  protected function isValidSortColumn($column)
  {
    if (in_array($column, array('categories.name')))
    {
      return true;
    }
    else
    {
      return parent::isValidSortColumn($column)
    }
  }
}
</pre>
<p>Majd hozzuk létre a PROJECT_DIR/apps/frontend/modules/ProductsAdmin/_list_th_tabular.php fájlt. Ezt is a cacheből másoltam ki és módosítottam.</p>
<pre class="brush: php; title: ; notranslate">
&lt;?php slot('sf_admin.current_header') ?&gt;
&lt;th class=&quot;sf_admin_text sf_admin_list_th_categories&quot;&gt;
  &lt;?php if ('categories.name' == $sort[0]): ?&gt;
    &lt;?php echo link_to(__('Categories', array(), 'messages'), '@products', array('query_string' =&gt; 'sort=categories.name&amp;sort_type='.($sort[1] == 'asc' ? 'desc' : 'asc'))) ?&gt;
    &lt;?php echo image_tag(sfConfig::get('sf_admin_module_web_dir').'/images/'.$sort[1].'.png', array('alt' =&gt; __($sort[1], array(), 'sf_admin'), 'title' =&gt; __($sort[1], array(), 'sf_admin'))) ?&gt;
  &lt;?php else: ?&gt;
    &lt;?php echo link_to(__('Categories', array(), 'messages'), '@products', array('query_string' =&gt; 'sort=categories.name&amp;sort_type=asc')) ?&gt;
  &lt;?php endif; ?&gt;
&lt;/th&gt;
&lt;?php end_slot(); ?&gt;
&lt;?php include_slot('sf_admin.current_header') ?&gt;

&lt;?php slot('sf_admin.current_header') ?&gt;
&lt;th class=&quot;sf_admin_text sf_admin_list_th_name&quot;&gt;
  &lt;?php if ('name' == $sort[0]): ?&gt;
    &lt;?php echo link_to(__('Name', array(), 'messages'), '@products', array('query_string' =&gt; 'sort=name&amp;sort_type='.($sort[1] == 'asc' ? 'desc' : 'asc'))) ?&gt;
    &lt;?php echo image_tag(sfConfig::get('sf_admin_module_web_dir').'/images/'.$sort[1].'.png', array('alt' =&gt; __($sort[1], array(), 'sf_admin'), 'title' =&gt; __($sort[1], array(), 'sf_admin'))) ?&gt;
  &lt;?php else: ?&gt;
    &lt;?php echo link_to(__('Name', array(), 'messages'), '@products', array('query_string' =&gt; 'sort=name&amp;sort_type=asc')) ?&gt;
  &lt;?php endif; ?&gt;
&lt;/th&gt;
&lt;?php end_slot(); ?&gt;
&lt;?php include_slot('sf_admin.current_header') ?&gt;&lt;?php slot('sf_admin.current_header') ?&gt;
&lt;th class=&quot;sf_admin_text sf_admin_list_th_price&quot;&gt;
  &lt;?php if ('price' == $sort[0]): ?&gt;
    &lt;?php echo link_to(__('Price', array(), 'messages'), '@products', array('query_string' =&gt; 'sort=price&amp;sort_type='.($sort[1] == 'asc' ? 'desc' : 'asc'))) ?&gt;
    &lt;?php echo image_tag(sfConfig::get('sf_admin_module_web_dir').'/images/'.$sort[1].'.png', array('alt' =&gt; __($sort[1], array(), 'sf_admin'), 'title' =&gt; __($sort[1], array(), 'sf_admin'))) ?&gt;
  &lt;?php else: ?&gt;
    &lt;?php echo link_to(__('Price', array(), 'messages'), '@products', array('query_string' =&gt; 'sort=price&amp;sort_type=asc')) ?&gt;
  &lt;?php endif; ?&gt;
&lt;/th&gt;
&lt;?php end_slot(); ?&gt;
&lt;?php include_slot('sf_admin.current_header') ?&gt;
</pre>
<p>Ezzel a fájllal azonban már sikerült teljesen elontanunk a generátort. Hiszen ha új mezőket teszünk be, vagy veszünk ki, akkor ezt a fájlt újra és újra szerkesztenünk kell. Ez ellen a legjobb módszer talán az lenne, ha írnánk egy saját generátor, ami figyelembe veszi ezt. Talán később még módosítom ezt a leírást ezen ötletemmel. </p>
<p>Léteznek már nagyobb tudású generátorok:<br />
<a href="http://www.symfony-project.org/plugins/ahAdminGeneratorThemesPlugin/1_0_0">ahAdminGeneratorThemesPlugin</a><br />
<a href="http://www.symfony-project.org/plugins/sfAdminThemejRollerPlugin">sfAdminThemejRollerPlugin</a><br />
Mindkettő Doctrinera alá készült el, de bizonyára nem túl nehéz átírni Propelesre. <img src='http://blog.tlsys.hu/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://blog.tlsys.hu/symfony-2-admin-generator/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Linux file kezelés</title>
		<link>http://blog.tlsys.hu/linux-file-kezeles/</link>
		<comments>http://blog.tlsys.hu/linux-file-kezeles/#comments</comments>
		<pubDate>Wed, 14 Apr 2010 05:30:15 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Linux]]></category>

		<guid isPermaLink="false">http://blog.tlsys.hu/?p=308</guid>
		<description><![CDATA[
hogyan alakítsunk át egy ISO fromátumban mentett fájlt UTF8-ra:
iconv --from-code=ISO-8859-2 --to-code=UTF-8 iso.txt &#62; utf-8 txt
fájékeresés
find / -mount -name fileneve
fájlok tartalmában keresés
grep -r "tartalom amit keressek" .
windows megosztás felcsatolása:
Egy kis samba, avagy windows felcsatolása, és mivel néha megszűnnek a linkek&#8230;
Mégegy leirás a megosztások felcsatolásáról, illetve a parám  
sudo apt-get install samba
sudo apt-get install smbfs
sudo apt-get [...]]]></description>
			<content:encoded><![CDATA[<p><span id="more-308"></span><br />
hogyan alakítsunk át egy ISO fromátumban mentett fájlt UTF8-ra:<br />
<code>iconv --from-code=ISO-8859-2 --to-code=UTF-8 iso.txt &gt; utf-8 txt</code></p>
<p>fájékeresés<br />
<code>find / -mount -name fileneve</code></p>
<p>fájlok tartalmában keresés<br />
<code>grep -r "tartalom amit keressek" .</code></p>
<p>windows megosztás felcsatolása:</p>
<p><a href="http://industriousone.com/blog/mounting-windows-shares-linux">Egy kis samba, avagy windows felcsatolása</a>, és <a href="http://blog.tlsys.hu/wp-content/uploads/2011/03/mounting_windows_shares_in_linux.mht">mivel néha megszűnnek a linkek&#8230;</a><br />
<a href="http://www.cyberciti.biz/tips/how-to-mount-remote-windows-partition-windows-share-under-linux.html">Mégegy leirás a megosztások felcsatolásáról</a>, illetve a <a href="http://blog.tlsys.hu/wp-content/uploads/2011/03/How-to-mount-remote-windows-partition-windows-share-under-Linux.mht">parám</a> <img src='http://blog.tlsys.hu/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p>sudo apt-get install samba<br />
sudo apt-get install smbfs<br />
sudo apt-get install smbclient<br />
First, edit your /etc/hosts file and give the Windows machine a name:<br />
192.168.1.2   pootie<br />
Next, install the samba and smbfs packages using your method of choice.<br />
Create a directory where the share will appear on your local filesystem.<br />
$ sudo mkdir /mnt/music<br />
Edit /etc/fstab and add a line for the mount. Here &#8220;pootie&#8221; is the name of the machine and &#8220;music&#8221; is the name of the share.<br />
//pootie/music  /mnt/music  cifs exec,credentials=/etc/cifspw 0 0<br />
Create a password file /etc/cifspw with the login credentials for your Windows account.<br />
username=Jason<br />
password=ImNotGonnaTellYouThat<br />
And secure the file:<br />
$ sudo chmod 600 /etc/cifspw<br />
Giddyup.<br />
$ sudo mount -a</p>
<p>debug, ha gond van:<br />
dmesg | tail</p>
<p><a href="http://ubuntu.hu/node/6060">Még egy kis segítség</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.tlsys.hu/linux-file-kezeles/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Az ember mindig tanul&#8230;</title>
		<link>http://blog.tlsys.hu/az-ember-mindig-tanul/</link>
		<comments>http://blog.tlsys.hu/az-ember-mindig-tanul/#comments</comments>
		<pubDate>Wed, 07 Apr 2010 19:43:28 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Nincs kategorizálva]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://blog.tlsys.hu/?p=303</guid>
		<description><![CDATA[Már jó pár éve foglalkozom PHP-vel, de még mindig van ami meglepetésként ér(t).
Ilyen például hogy a header parancs nem irányít át azonnal, hanem csak a teljes action lista lefutása után teszi.
header("Location: index.php");
echo 'hehe ez még kiíródik, csak nem látod';
die();
echo 'hehe, de ez már nem';

]]></description>
			<content:encoded><![CDATA[<p>Már jó pár éve foglalkozom PHP-vel, de még mindig van ami meglepetésként ér(t).<br />
<span id="more-303"></span>Ilyen például hogy a header parancs nem irányít át azonnal, hanem csak a teljes action lista lefutása után teszi.<br />
<code>header("Location: index.php");<br />
echo 'hehe ez még kiíródik, csak nem látod';<br />
die();<br />
echo 'hehe, de ez már nem';<br />
</code></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.tlsys.hu/az-ember-mindig-tanul/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Linux felhasználók karbantartása</title>
		<link>http://blog.tlsys.hu/linux-felhasznalok-karbantartasa/</link>
		<comments>http://blog.tlsys.hu/linux-felhasznalok-karbantartasa/#comments</comments>
		<pubDate>Thu, 25 Feb 2010 19:04:39 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Linux]]></category>

		<guid isPermaLink="false">http://blog.tlsys.hu/?p=284</guid>
		<description><![CDATA[Eddig mindig találgatnom kellett hogyan keressek rá a felhasználókat karbantartó parancsokra.
Ennek itt és most véget vetek.

jogok
felhasználók listázása
man helyett
open ssh
felhasználók hozzáadás
felhasználó átnevezése
felhasználók listája:
cat /etc/passwd &#124; grep "/home" &#124;cut -d: -f1
felhasználó hozzáadása
useradd felhasznalo
felhasználó hozzáadása /home könyvtárral
 sudo useradd -d /home/felhasznalo -m felhasznalo
felhasználó mindenestűl:
adduser felhasznalo
felahsználó jelszavának módosítása
sudo passwd felhasznalo
felhasználó törlése
userdel -r felhasználó #felhasználó könyvtára is törlődik
felhasználói csoport létrehozása
addgroup [...]]]></description>
			<content:encoded><![CDATA[<p>Eddig mindig találgatnom kellett hogyan keressek rá a felhasználókat karbantartó parancsokra.<br />
Ennek itt és most véget vetek.<br />
<span id="more-284"></span><br />
<a href="http://www.slackware.hu/node/444">jogok</a><br />
<a href="http://www.linuxquestions.org/linux/answers/Networking/How_to_list_all_your_USERs">felhasználók listázása</a><br />
<a href="http://www.ahinc.com/linux101/users.htm">man helyett</a><br />
<a href="http://www.cyberciti.biz/tips/openssh-deny-or-restrict-access-to-users-and-groups.html">open ssh</a><br />
<a href="http://www.howtogeek.com/howto/ubuntu/add-a-user-on-ubuntu-server/">felhasználók hozzáadás</a><br />
<a href="http://www.cyberciti.biz/faq/howto-change-rename-user-name-id/">felhasználó átnevezése</a></p>
<p>felhasználók listája:<br />
<code>cat /etc/passwd | grep "/home" |cut -d: -f1</code></p>
<p>felhasználó hozzáadása<br />
<code>useradd </code><code>felhasznalo</code></p>
<p>felhasználó hozzáadása /home könyvtárral<br />
<code> sudo useradd -d /home/felhasznalo -m felhasznalo</code></p>
<p>felhasználó mindenestűl:<br />
<code>adduser felhasznalo</code></p>
<p>felahsználó jelszavának módosítása<br />
<code>sudo passwd felhasznalo</code></p>
<p>felhasználó törlése<br />
<code>userdel -r felhasználó #felhasználó könyvtára is törlődik</code></p>
<p>felhasználói csoport létrehozása<br />
<code>addgroup csoport</code></p>
<p>felhasználó csoportba helyezése<br />
<code>adduser letezofelhasznalo letezocsoport</code></p>
<p>felhasználó törlése minden csoportból, kivéve a sajátjából<br />
<code>usermod -G felhasznalo felhasznalo</code></p>
<p>felhasználó csoport tagságainak listázása<br />
<code>groups felhasznalo</code></p>
<p>belépett felhasználók listája<br />
<code>who -a</code></p>
<p>felhasználó bejelentkezési nevének cseréje<br />
<code>usermod -l login-name old-name</code><br />
bővebben:<br />
<code><br />
killall -u old<br />
id old<br />
usermod -l new old<br />
groupmod -n new old<br />
usermod -d /home/new -m new<br />
usermod -c “New Real Name” new<br />
id new<br />
</code></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.tlsys.hu/linux-felhasznalok-karbantartasa/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Prototye dialógus ablak</title>
		<link>http://blog.tlsys.hu/prototye-dialogus-ablak/</link>
		<comments>http://blog.tlsys.hu/prototye-dialogus-ablak/#comments</comments>
		<pubDate>Wed, 24 Feb 2010 12:42:16 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Nincs kategorizálva]]></category>
		<category><![CDATA[Javascript]]></category>

		<guid isPermaLink="false">http://blog.tlsys.hu/?p=272</guid>
		<description><![CDATA[Szerettem volna egy nagyon egyszerű, dialógus ablakot, ami könnyen átlátható.
A legfontosabb kitétel az volt, hogy egy divet hozzon létre, amibe majd bármit bele tudok illeszteni.
Találtam is egyet
Sajnos az én stilusomnak nem felelt meg. Ezért módosítanom kellett.
A módosítás 2 fontosnak vélt ok miatt vált szükségszerűvé.

Egyrészt szeretek névtereket létrehozni
Másrészt a létrehozásnál minden alkalommal újra és újra létrehoztuk [...]]]></description>
			<content:encoded><![CDATA[<p>Szerettem volna egy nagyon egyszerű, dialógus ablakot, ami könnyen átlátható.<br />
A legfontosabb kitétel az volt, hogy egy divet hozzon létre, amibe majd bármit bele tudok illeszteni.<br />
<span id="more-272"></span>Találtam is <a href="http://mattroper.co.uk/2008/05/27/javascript-overlay-using-prototype-and-scriptaculous/">egyet</a><br />
Sajnos az én stilusomnak nem felelt meg. Ezért módosítanom kellett.<br />
A módosítás 2 fontosnak vélt ok miatt vált szükségszerűvé.</p>
<ul>
<li>Egyrészt szeretek névtereket létrehozni</li>
<li>Másrészt a létrehozásnál minden alkalommal újra és újra létrehoztuk a dialógus ablakot és a layert is, így a nyitások számával nőtt az elemek száma is. <img src='http://blog.tlsys.hu/wp-includes/images/smilies/icon_sad.gif' alt=':-(' class='wp-smiley' /> </li>
</ul>
<pre class="brush: jscript; title: ; notranslate">
var PrototypeWindow = {
 Dialog : function (content, container)
 {
 // Manage arguments and assign defaults,
 if (typeof container == 'undefined' ) container = document.body;
 if (null == (this.container = $(container))) throw(&quot;container is not valid&quot;);

 // Assign instance variables
 this.content = content;
 if ($('dialogBoxOverlay') == null)
 {
   this.overlay = new Element('div', {'id':'dialogBoxOverlay', 'class': 'overlay' }).hide();
 }
 else
 {
   this.overlay = $('dialogBoxOverlay').hide();
 }
 if ($('dialogBox') == null)
 {
   this.dialog  = new Element('div', {'id':'dialogBox', 'class': 'dialog' }).hide();
 }
 else
 {
   this.dialog = $('dialogBox').hide();
 }

 // Hide the overlay when clicked. Ignore clicks on the dialog.
 Event.observe(this.overlay, 'click', this.hide.bindAsEventListener(this));
 Event.observe(this.dialog, 'click',  function(event) { Event.stop(event) });

 // Insert the elements into the DOM
 this.dialog.insert(this.content);
 this.container.insert(this.overlay);
 this.container.insert(this.dialog);

 // Content may have been hidden if it is embedded in the page
 content.show();
 this.dialog.hide();

 }
}

PrototypeWindow.Dialog.prototype.show = function() {
 new Effect.Appear(this.overlay, { duration: 0.5,  to: 0.8 });
 this.dialog.show();
 return this;
};
PrototypeWindow.Dialog.prototype.hide = function(event) {
 this.dialog.hide();
 this.overlay.hide();
 this.dialog.innerHTML='';
 return this;
};
</pre>
<p>A dialógus ablak használata egyszerű</p>
<pre class="brush: jscript; title: ; notranslate">
&lt;script type=&quot;text/javascript&quot;&gt;
  var dialog = new Element('div'); // létrehozzunk egy divet
  dialog.insert(new Element('h2').insert('Dialogue')); // felötljük adatokkal, ez a sor opcionális...
  var overlay = new DialogOverlay(dialog); // divünket beletesszük a dialógus ablakba
  overlay.show(); // megjelenítjük a dialógus ablakot
&lt;/script&gt;
</pre>
<p>Szükségünk lehet még némi css-re a működéshez:</p>
<pre class="brush: css; title: ; notranslate">
.overlay {
 width: 100%;
 height: 100%;
 background: black;
 position: fixed;
 top: 0;
 left: 0;
 z-index: 2;
}
.dialog {
 width: 50%;
 min-height: 50%;
 background: white;
 position: fixed;
 top: 25%;
 left: 25%;
 z-index: 3;
}
</pre>
]]></content:encoded>
			<wfw:commentRss>http://blog.tlsys.hu/prototye-dialogus-ablak/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

