Skip to main content

Een minimum aan git

(Disclaimer: Deze tekst heeft nog wel wat opkuis nodig.)

Van zodra je eens een programmeeropdracht moet doen die iet of wat complex is, moet je eigenlijk een versiebeheersysteem gebruiken. Zo'n versiebeheersysteem helpt je bij te houden welke wijzigingen je maakte aan je broncode. Stel dat je een aantal wijzigingen maakte, en je bedenkt je dat je het toch beter op een andere manier zou aanpakken, dan kun je die wijzigingen makkelijk ongedaan maken. Of als je merkt dat iets niet meer werkt sinds enige tijd, kun je makkelijk zien wat er sinds dien veranderd is, en dat kan je dan helpen om het probleem te localiseren.

Als je iets serieus moet programmeren, dan gaat een versiebeheersysteem meer dan eens je hachje redden. Je zou dus denken dat het gebruik daarvan opgenomen is in elke cursus programmeren. Maar dat bijkt niet het geval. En daarom deze blog post.

Read more…

How to apply a patch?

Suppose that you want to use e.g. a CiviCRM extension like CDNTaxReceipts , but you want some extra functionality, and someone told you that there is a patch available.

Now suppose you don't use git, and you don't have a clue about how a patch works. Then this is the easy way to apply it.

  1. You download the patch file, and you save it on your file system, e.g. as ~/Downloads/39.diff

  2. You use the command line. Supposing you unpacked the archive in ~/dev/CDNTaxReceipts-3.1

    cd ~/dev/CDNTaxReceipts-3.1
    patch -p1 < ~/Downloads/39.diff

Here you are. You patched the extension.

If you use Windows, the hardest part will be finding a patch executable. On almost every other OS, patch will be available by default.

Belgische fiscale attesten met een CDNTaxReceipts-hack

Sinds kort hebben wij een coole CiviCRM-instantie op het werk. En één van de dingen dat we daarmee willen doen, is fiscale attesten afdrukken. Ik dacht dat we waarschijnlijk niet de enigen waren die zoiets wilden doen, dus ik heb wat gezocht op het Internet. Tevergeefs. Misschien zocht ik niet goed genoeg, want hoewel België wereldwijd op de vijfde plaats staat wat betreft CiviCRM-implementaties, heeft er nog niemand CiviCRM gebruikt voor Belgische fiscale attesten. Of er is niemand die eraan gedacht heeft om te documenteren hoe het kan.

Maar nu dus wel.

Read more…

Exploding a string with value separators to an array in CiviCRM

CiviCRM stores its multiselect custom field values in the database by concatenating the values, e.g. like this

*value1*value2*

(I replaced the CRM_Core_DAO::VALUE_SEPARATOR by * because the real unicode character, #&01, does not show anything sensible.)

This represents

(
    [0] => value1
    [1] => value2
)

Now if you just use explode(CRM_Core_DAO::VALUE_SEPARATOR, $value), you get

(
    [0] =>
    [1] => value1
    [2] => value2
    [3] =>
)

This is probably not wat you want. What you really want to do, is

CRM_Utils_Array::explodePadded($value)

I just put this in a blog post, because I always forget, and Google doesn't seem to know.