-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathatom.xml
More file actions
2383 lines (2004 loc) · 140 KB
/
atom.xml
File metadata and controls
2383 lines (2004 loc) · 140 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
<title><![CDATA[Elcodi blog]]></title>
<link href="http://elcodi-blog.github.io/atom.xml" rel="self"/>
<link href="http://elcodi-blog.github.io/"/>
<updated>2016-02-09T16:05:34+01:00</updated>
<id>http://elcodi-blog.github.io/</id>
<author>
<name><![CDATA[Elcodi Team]]></name>
</author>
<generator uri="http://octopress.org/">Octopress</generator>
<entry>
<title type="html"><![CDATA[Purchasable Architecture]]></title>
<link href="http://elcodi-blog.github.io/blog/2016/02/02/purchasable-architecture/"/>
<updated>2016-02-02T16:20:49+01:00</updated>
<id>http://elcodi-blog.github.io/blog/2016/02/02/purchasable-architecture</id>
<content type="html"><![CDATA[<p>It’s been a long time since our last blog post, but we have some very good news
to share with you.</p>
<p>During the last months we’ve been working on new projects for Elcodi. Some of
them are not available yet, but some of them have been merged recently. This
post is basically to show you what has changed and improved in Elcodi and to
spread the word about our new Roadmap for the next months. This roadmap is
exactly the same one, but with different dates due to these new changes.</p>
<h3>Purchasable</h3>
<p>From almost the beginning of the life of our project, and because the entity
product and related ones are one of the main topic of all e-commerce projects,
we have tried to manage how abstract should be all this entity family. For
example, should we create a Purchasable interface to be used in Cart and Order?
Should we use only one entity to manage all kind of purchasable entities? Should
we use traits for that? How many interfaces?</p>
<p>Like all software projects, this is a question that can be solved in several
ways. One of these ways is analyzing our needs and creating a software model
from these needs. Of course, this is the right way if you have time, money and
resources. Another way is just by trying one approach. Working with it, dealing
with it as much as possible, and listening yourself, looking for your needs.
This approach needs time, only time, and the capacity of refactoring, of action,
of change.</p>
<p>Well. This one, the last one, is the approach we’ve used some time ago. At the
beginning, using two entities, Product and Variant, to define both purchasable
types has been a good choice. And it’s been like this until now. Since some
months ago, one of the most asked questions have been… <em>well, how can I create
my own purchasable?</em>, and with this approach, was not simple, was not logical.</p>
<p>Well. We have reacted and a new Purchasable implementation is here.</p>
<p>Instead of dealing with products and variants, Elcodi’s cart is going to deal
only with purchasable implementations. We’ve started using Doctrine CTI (Class
Table Inheritance) to allow other implementation coexist with current ones, so
if you need to work with your own purchasable implementation… just create it,
implement this interface and it’s done :)</p>
<p>That simple!</p>
<h3>Elcodi v2.0.0</h3>
<p>Our Roadmap was clear. Elcodi <em>v1.1.0</em> had to be tagged the first of January,
but we really wanted this feature to be available and in master as soon as
possible.</p>
<p>A change like that can needs a major version change, and even we know that is
too soon to create a new major version, we think that this is the best for the
project and the best for our evolution.</p>
<p>We are not specialists in maintaining several branches at all, so we will not
support versions <em>v1.0</em> actively. What we will do for sure is supporting somehow
all projects that want to go from <em>v1.0</em> to <em>v2.0</em>. At this moment we don’t have
any tool for that but, if there are some requests, we will do it for sure.</p>
<p>So, if you need us, just <a href="http://gitter.im/elcodi/elcodi">Ask for help</a></p>
<h3>New Roadmap</h3>
<p>Of course our roadmap has changed, but only with dates.<br/>
Let’s take a look at the new plan.</p>
<h4>v2.1</h4>
<ul>
<li>Released the 1st of June, 2016</li>
<li>Search engine using ElasticSearch will be introduced here</li>
<li>Product API will be added</li>
<li>User API will be added</li>
<li>Cart API will be added</li>
<li>Some Media improvements, like new media types</li>
<li>New shop template will be added</li>
<li>Back panel documentation</li>
<li>Code Coverage of all components and bundles over 60%</li>
<li>Templates documentation</li>
</ul>
<h4>v2.2</h4>
<ul>
<li>Released the 1st of September, 2016</li>
<li>Multistore. Switch between stores in the same installation</li>
<li>Shop API will be added</li>
<li>New shop template will be added</li>
<li>New tempates and plugins website with tons of cool new stuff for all Elcodi and Bamboo implementations</li>
<li>Code Coverage of all components and bundles over 70%</li>
</ul>
<h4>v2.3</h4>
<ul>
<li>Released the 1st of January, 2017</li>
<li>We will remove all deprecated code</li>
<li>Bamboo will use Symfony3 and maybe new version of Doctrine</li>
<li>Updated all dependencies</li>
<li>Marketplace</li>
<li>Elcodi community site will be created.</li>
<li>Unknown bunch of new and cool stuff</li>
<li>Code Coverage of all components and bundles over 80%</li>
</ul>
<h3>Try us</h3>
<p>You can start using Elcodi in a very very fast way, just… DO IT!</p>
<p><a href="http://elcodi.io/docs/quick-start/">Install Elcodi</a></p>
<h3>Last thoughts</h3>
<p>Well, Elcodi project is keep doing. Remember that we need a lot of help, and we
really want you to test our project, take a small tour around what we offer and
if you like, only if you like…</p>
<ul>
<li><a href="https://github.com/elcodi/elcodi">Star us</a></li>
<li><a href="https://gitter.com/elcodi/elcodi">Join us</a></li>
<li><a href="https://github.com/elcodi/elcodi/issues">Help us</a></li>
</ul>
]]></content>
</entry>
<entry>
<title type="html"><![CDATA[Suggest our next features]]></title>
<link href="http://elcodi-blog.github.io/blog/2015/11/23/suggest-our-next-features/"/>
<updated>2015-11-23T17:13:35+01:00</updated>
<id>http://elcodi-blog.github.io/blog/2015/11/23/suggest-our-next-features</id>
<content type="html"><![CDATA[<p>For sure some of you already know about
<a href="http://blog.elcodi.io/blog/2015/11/20/elcodi-online-meetup/">Elcodi’s first online meetup</a>.
It will be next November 25th at 6:00pm GMT+1, and for joining us, you only have
to enter <a href="http://gitter.im/elcodi/elcodi">our gitter room</a>, say hello, and join
our discussion about Elcodi, Symfony and E-commerce.</p>
<p>One of the topics we’ll talk about will be our roadmap. We’ve configured it just
by thinking what features would be nice to have in the <del>future</del> present, but
Elcodi is a community-first project, so we would love to bring you some voice,
at least to help us deciding about what features we should put our effort the
next months.</p>
<blockquote><p>Of course, your voice is the most wanted voice in Elcodi. Make sure you really
say what you think, so we can improve day by day.</p></blockquote>
<p>For that, from today until the start of the meeting, you will be able to join
our room and show us your proposals. This wednesday we will vote each one, and
the most voted will be part of our <code>v1.3</code> roadmap, creating a group of
volunteers for that development.</p>
<h3>Propose a feature</h3>
<ul>
<li>Enter <a href="http://gitter.im/elcodi/elcodi">our gitter room</a></li>
<li>Say Hello! :)</li>
<li>Make a proposal</li>
</ul>
<h3>Vote the features</h3>
<ul>
<li>Enter <a href="http://gitter.im/elcodi/elcodi">our gitter room</a> next November 25th at
6:00pm GMT+1</li>
<li>Say hello! :)</li>
<li>Vote your more exciting features (before starting the meetup, you will have
the link for voting)</li>
<li>Join the development!</li>
<li>Enjoy as much as possible ;)</li>
</ul>
<p>We really look forward to see you all there!
By sharing this post you will really help us creating this community :)</p>
]]></content>
</entry>
<entry>
<title type="html"><![CDATA[Elcodi online meetup]]></title>
<link href="http://elcodi-blog.github.io/blog/2015/11/20/elcodi-online-meetup/"/>
<updated>2015-11-20T21:50:00+01:00</updated>
<id>http://elcodi-blog.github.io/blog/2015/11/20/elcodi-online-meetup</id>
<content type="html"><![CDATA[<p><a href="http://elcodi.io">Elcodi</a> is growing so fast.</p>
<blockquote><p>Elcodi is an E-commerce platform based on Symfony components. Is composed by
some PHP Components, by some Symfony Bundles and by a Full-stack project based
on the Symfony Framework. A all-in-one E-commerce solution, splitted in
several isolated parts.</p></blockquote>
<p>We started this project two and a half years ago, and our community is getting
bigger day after day. That’s great because the project grows as well as long as
more people start using it (more needs, more ideas, more contributions, more
fun).</p>
<p>We will start doing monthly meetings online in our
<a href="http://gitter.im/elcodi/elcodi">Gitter channel</a>. Right now, some people is
daily contributing to Elcodi and having some nice and constructive talks, but we
want to make it even bigger.</p>
<p>Our first monthly meeting will be next November 25th at 6:00pm GMT+1.
This meeting will be hosted by the core team of the project,
<a href="https://github.com/mmoreram">Marc Morera</a> and
<a href="https://github.com/EmanueleMinotto">Emanuele Minotto</a>.</p>
<h2>Agenda</h2>
<p>This meeting will be focused on creating some working groups for the next weeks.
Depending on the people attending at the meeting, we will create more or less
groups, focused on some parts of the application.</p>
<p>These are the points we will talk about.</p>
<ul>
<li>Tasks for next version <code>v1.1</code>.</li>
<li>Documentation update and revision.</li>
<li>Test coverage for <code>v1.1</code>.</li>
<li>Community action. How to make as many people as possible involved.</li>
</ul>
<h2>Attendees</h2>
<p>Maybe you’re asking yourself if this meeting is for you.</p>
<p>Well, it depends on your interests. If your job is all about E-commerce, even if
your Symfony skills are no so good, then you should join us. You will have the
opportunity to share some time with really skilled people and to know the way we
have created this project.</p>
<p>If your interest is open source, join us as well. Elcodi is a young project,
focused on finding the right equilibrium between pragmatism and clean
architecture. We use Event-Driven Architecture and annotations at the same time.
Do you want to know why? What are our thoughts? Ask us :)</p>
<p>In other words, if you want to have a nice time with some really good people,
then you definitely should join us and say a big Hello!</p>
<p>Remember, next November 25th at…</p>
<ul>
<li>Mexico City, La Havana – 11:00am</li>
<li>London – 05:00pm</li>
<li>Barcelona, Paris, Warsaw – 06:00pm</li>
<li>Moscow – 08:00pm</li>
</ul>
<p>Looking forward to see you all there!</p>
]]></content>
</entry>
<entry>
<title type="html"><![CDATA[Meet Deliberry]]></title>
<link href="http://elcodi-blog.github.io/blog/2015/10/19/meet-deliberry/"/>
<updated>2015-10-19T17:53:22+02:00</updated>
<id>http://elcodi-blog.github.io/blog/2015/10/19/meet-deliberry</id>
<content type="html"><![CDATA[<p>As an open source project, whenever a project touches success using our
technology, our pride feelings are indescribable. Each project based on Elcodi
means a different and unique story for us. Each one as much important as the
best.</p>
<p>But in this case, we want to talk about one of our first projects using Elcodi
as the main technology. And we want to do that because we really love this
company, and the way they want to really change the world. Like we want.</p>
<p>The name of the project is <a href="http://deliberry.com">Deliberry</a>, and they are
placed in Barcelona.</p>
<p><img src="http://elcodi.io/img/showcase/deliberry.png" alt="Deliberry" /></p>
<p>They deliver your supermarket purchases in less than one hour. This is great,
right? They used Elcodi components as the main technology, and our Bamboo
project as the basis for their front engine and their admin site.</p>
<p>They started using Elcodi some months ago, when we were working on version
<code>v0.5.0</code>. These days, Elcodi was very unstable, so day after day, we introduced
new changes, affecting strongly the BC standard. Even with that scenario,
Deliberry has been always our first tester for new versions, working side by
side with us, and reporting us as many issues as possible.</p>
<p>And believe us… For a new open source project… this is the best gift we’ve
had.</p>
<h2>Changing the world with us</h2>
<p>One of the biggest things that makes this project really awesome, is that they
are really changing the world.</p>
<p>We are very used of thinking that, for a company than simply delivers food,
changing the world means delivering it faster and better. Of course, this is
great, but your are only changing part of the world, and probably, the part than
less need a change.</p>
<p>Deliberry works side by side with an organization name
<a href="http://www.caritas.es/">Cáritas</a>. This organization helps people suffering of
social exclusion (yes, in Spain we have a lot of this, sadly). People without
many resources, that cannot enjoy whether the purchase is fast or not: they
cannot even buy anything.</p>
<p>Deliberry help this organization by hiring people from this organization for
buying people’s food, or delivering it. And everything, in less than one hour.</p>
<p>Isn’t it fantastic?</p>
<p><a href="http://www.youtube.com/watch?v=6sXPaFB93is" title="Deliberry TV1"><img src="http://img.youtube.com/vi/6sXPaFB93is/0.jpg" alt="Deliberry TV1" /></a></p>
<p>Deliberry is our hero. Thanks for being part of the Elcodi history, and keep
changing the world, we will try to do the same :)</p>
<h2>Try Deliberry</h2>
<p>At the moment, Deliberry is only working on Barcelona, but if you are living
here, we encourage you to try it. And even better, we want to give you a nice
discount for your next purchase.</p>
<p>Use the discount code <strong><em>ELCODI</em></strong>, and with a minimum purchase of 40€ you will
recieve 10€ of discount. And if is your first time, the delivery fees will be
free!</p>
<p>Hurry up! You can use this discount during this year :)</p>
<h2>Change the world too</h2>
<p>We are looking for projects that want to change the world, somehow, somewhere.
If you have in mind one of them, consider the usage of Elcodi. Our biggest
effort goes to providing happiness and joy between E-commerce developers,
mastering amazing projects full of creativity and innovation.</p>
<p>Only this scenario turns on the best projects ever, and only the best projects
ever can change this world.</p>
<p>So… we are looking for you.<br/>
<a href="http://elcodi.io">Join us!</a></p>
]]></content>
</entry>
<entry>
<title type="html"><![CDATA[Install Elcodi]]></title>
<link href="http://elcodi-blog.github.io/blog/2015/07/07/install-elcodi/"/>
<updated>2015-07-07T12:59:39+02:00</updated>
<id>http://elcodi-blog.github.io/blog/2015/07/07/install-elcodi</id>
<content type="html"><![CDATA[<p>In order to decrease the time of installation of Elcodi, and with our new Beta
release</p>
<p><a href="https://github.com/elcodi/bamboo/blob/master/CHANGELOG-1.0.md#v100-beta3-10-07-2015">Bamboo v1.0.0-beta3</a><br/>
<a href="https://github.com/elcodi/elcodi/blob/master/CHANGELOG-1.0.md#v100-beta3-10-07-2015">Elcodi v1.0.0-beta3</a></p>
<p>we’ve been working on how fast you can create a new shop in your localhost and
start tuning it. It is important right?</p>
<h2>New elcodi:install command</h2>
<p>Elcodi is Symfony based. This means that to make it work you need to execute
some commands in order to do some common actions (create database, update
schema, populate fixtures…)</p>
<p>To improve this step, we have created a new console command in order to decrease
this installation time and the number of steps required to play with your
localhost.</p>
<p>4 steps to rule them all, and less than 3 minutes to start with Elcodi.</p>
<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
</pre></td><td class='code'><pre><code class='bash'><span class='line'><span class="nv">$ </span>curl -s http://getcomposer.org/installer | php
</span><span class='line'><span class="nv">$ </span>php composer.phar create-project elcodi/bamboo bamboo -sdev
</span><span class='line'><span class="nv">$ </span><span class="nb">cd </span>bamboo/
</span><span class='line'><span class="nv">$ </span>php app/console elcodi:install
</span></code></pre></td></tr></table></div></figure>
<p>As soon as Bamboo is installed, you can create a temporary server by using the
PHP built-in server</p>
<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
</pre></td><td class='code'><pre><code class='bash'><span class='line'><span class="nv">$ </span>php app/console server:run
</span></code></pre></td></tr></table></div></figure>
<p>And check your Bamboo installation in your browser by accessing to
<code>http://localhost:8000</code>.</p>
<h2>GD instead of ImageMagick</h2>
<p>Because we have implemented some needs using adapters, we have implemented a new
image resize adapter based on the PHP GD engine. The good thing is that GD is
already installed in all standard PHP versions, so you don’t really need to
install any extra library.</p>
<p>This new adapter has been proposed and accepted as the default one, and of
course, ImageMagick adapter can be still used by changing the configuration
value.</p>
<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
</pre></td><td class='code'><pre><code class='yaml'><span class='line'><span class="l-Scalar-Plain">elcodi_media</span><span class="p-Indicator">:</span>
</span><span class='line'> <span class="l-Scalar-Plain">images</span><span class="p-Indicator">:</span>
</span><span class='line'> <span class="l-Scalar-Plain">resize</span><span class="p-Indicator">:</span>
</span><span class='line'> <span class="l-Scalar-Plain">adapter</span><span class="p-Indicator">:</span> <span class="l-Scalar-Plain">elcodi.media_resize.imagemagick</span>
</span></code></pre></td></tr></table></div></figure>
<h2>Location repository</h2>
<p>In Elcodi you can populate new countries. With this new installation command,
and by using <code>--country</code> option, you can add already generated countries in
seconds. You can see available pregenerated countries in our
<a href="https://github.com/elcodi/LocationDumps">LocationDumps</a> repository. We will
generate all countries over time.</p>
<blockquote><p>If you want to use the demo application, make sure you install Spain. All
already built addresses are from Spain. Otherwise, feel free to build your
Location database as you need.</p></blockquote>
<p>Imagine you want to install France and Italy. Well, you should do that</p>
<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
</pre></td><td class='code'><pre><code class='bash'><span class='line'><span class="nv">$ </span>php app/console elcodi:install --country<span class="o">=</span>FR --country<span class="o">=</span>IT
</span></code></pre></td></tr></table></div></figure>
]]></content>
</entry>
<entry>
<title type="html"><![CDATA[Elcodi beta is here]]></title>
<link href="http://elcodi-blog.github.io/blog/2015/06/18/elcodi-beta-is-here/"/>
<updated>2015-06-18T13:42:16+02:00</updated>
<id>http://elcodi-blog.github.io/blog/2015/06/18/elcodi-beta-is-here</id>
<content type="html"><![CDATA[<p>… and we did it.</p>
<p>It is something really amazing. We’ve finally reached our first Beta stage.
After more than 1 year of hard and non-stop work, we have tagged our first beta
version in order to provide some stability to all Elcodi installations.</p>
<h2>What means Beta</h2>
<p>If you read some literature about software versions, you’ll find that there is
always a set of pre-defined steps based on the stability of the project</p>
<ul>
<li>v1.0.0-alpha1: Hey developer! We’re building it but we’re not ready to be used
in production. Possible big BC breaks, incremental set of features and less
communication. Careful!</li>
<li>v1.0.0-beta1: Hey developer! Well, we think that we’re done. We think that
we’re done with features so we aim to stabilize the version. Testing and
documentation is part of the development here. C’mon!</li>
<li>v1.0.0-RC1: Hey developer! Tested enough, so… how about make this package
stable? Lets purpose a set of BC promises and let’s make possible the usage of
<code>^1.0</code> in composer.</li>
<li>v1.0.0: Hey everyone! We’re here! This package is stable. We think that we’ve
no many issues here, so don’t hesitate to using us in your projects.</li>
</ul>
<p>Of course, some people or projects will understand these steps in a different
way, but in Elcodi, this is the idea.</p>
<h2>Communication</h2>
<p>For the last months, we have been focused on developing.</p>
<ul>
<li>elcodi/elcodi
<ul>
<li>1.616 commits</li>
<li>239 Issues closed</li>
<li>586 PR accepted</li>
<li>21 Contributors</li>
</ul>
</li>
<li>elcodi/bamboo
<ul>
<li>1.763 commits</li>
<li>49 Issues closed</li>
<li>450 PR accepted</li>
<li>21 Contributors</li>
</ul>
</li>
</ul>
<p>Of course, developing have been our priority and we’ve lost the opportunity of
showing the world our great work. Our communication has been poor and
insufficient because of our lack of time. And we know that this aspect of the
project need to change.</p>
<p>Since today, we’ll return with our “A week of Elcodi”. Each week we will
document all our work. Each project using Elcodi will have a lot of feedback.
Each change affecting the BC compatibility will be announced in a properly way
and since today, we will take care about all projects by creating and promoting
our own community events and User Groups around the world.</p>
<p>Remember all the core team is in <a href="https://gitter.im/elcodi/elcodi">Gitter</a> so if
you have doubts and you want to talk about any aspect of the project, don’t
hesitate to talk with us :)</p>
<p>Follow us on <a href="https://twitter.com/elcodi_dev">Twitter</a> to join us!</p>
<h2>Reaching RC</h2>
<p>We’re done with features. We have developed a nice Plugin infrastructure that
will be documented as soon as possible, in order to externalize all extra
implementations. Our maximum priority right now is to finish what we begin
one year ago.</p>
<p>The project is pretty stable, being used in some projects in production, selling
and working properly. For example <a href="http://deliberry.com">deliberry.com</a>, a
company based in Barcelona that is actually growing day by day, based in Elcodi.</p>
<p>We’re proud!</p>
<blockquote><p>We’ll have soon a great directory with projects based on Elcodi, so if your
company is Elcodi based, please, show us your case :)</p></blockquote>
<p>So, for the next 2 months, we will support all projects based on Elcodi, with
a big testing layer with more Unit, Functional, Behavioral and Response testing.</p>
<p>We will add tons of documentation showing how to do every single thing inside
the Elcodi world and finally, as soon Elcodi is stable enough, then we will
tag the first RC version.</p>
<h2>Test us!</h2>
<p>We are Open Source, and supporting us will never mean paying us. Elcodi is free
because is born from and for the community, so the best way to promote Elcodi is
talking about it.</p>
<p>Elcodi is not only E-commerce and Symfony, is about developing, sharing,
enjoying and improving. Each member of the community is important and we will
demonstrate this not only with words but with a strong layer of support.</p>
<p>As soon as the community will grow, we will lead the creation of user groups
around the world. We will show how we work and what using Elcodi is not only an
experience but a way of understanding the E-commerce development.</p>
<p><a href="http://elcodi.io/docs/quick-start/">Test us now</a> and share your thoughts, your
non-valuable feedback, or <a href="https://gitter.im/elcodi/elcodi">just say hello</a> :)</p>
]]></content>
</entry>
<entry>
<title type="html"><![CDATA[Translating Elcodi]]></title>
<link href="http://elcodi-blog.github.io/blog/2015/05/12/translating-elcodi/"/>
<updated>2015-05-12T11:01:20+02:00</updated>
<id>http://elcodi-blog.github.io/blog/2015/05/12/translating-elcodi</id>
<content type="html"><![CDATA[<p>Hi everyone.</p>
<p>This is a call to the multi language fairy. Our project is still learning some
new and nice languages. Bamboo talks English, Spanish, Catalan and some French,
but we want to be a project for everyone in this world, no matter where you
live, no matter what you talk.</p>
<p>We are looking for some contributors to maintain some other interesting
translations. Indeed, all of them!</p>
<ul>
<li>Euskal</li>
<li>Galego</li>
<li>Deutsch</li>
<li>Italiano</li>
<li>Português</li>
<li>Nederlands</li>
<li>…</li>
</ul>
<p>We are looking for smaller translations, for those shops that want to provide
specific and local languages.</p>
<ul>
<li>Irish</li>
<li>Andalúz</li>
<li>Sardu</li>
<li>Esperanto</li>
<li>…</li>
</ul>
<p>Finally we are looking for some popular and fictitious languages. We want to be
for everyone, remember?</p>
<ul>
<li>Klingon</li>
<li>Elvish</li>
<li>Dwarf language</li>
<li>Lorem Ipsum</li>
<li>Random language</li>
<li>…</li>
</ul>
<p>If you have any interest in translate the application here, please tell us
something nice <a href="https://github.com/elcodi/bamboo/issues/450">here</a> or keep in
touch with us at <a href="http://gitter.im/elcodi/elcodi">gitter</a>.</p>
<p>Enjoy your week :)</p>
]]></content>
</entry>
<entry>
<title type="html"><![CDATA[Introducing the Directors in Symfony]]></title>
<link href="http://elcodi-blog.github.io/blog/2015/04/20/introducing-the-directors-in-symfony/"/>
<updated>2015-04-20T12:36:03+02:00</updated>
<id>http://elcodi-blog.github.io/blog/2015/04/20/introducing-the-directors-in-symfony</id>
<content type="html"><![CDATA[<p>Have you ever worked with Entity Managers, Repositories or Factories in Symfony?
Yes, for sure you’ve done that. Indeed, if you work with entities in your
project, these type of objects will be your daily, so we want to introduce you a
new concept, born in <a href="http://github.com/elcodi/elcodi">Elcodi project</a> and
created in order to simplify the management of an entity inside a service,
fixture or functional test.</p>
<p>Please, welcome the Director class.</p>
<h3>Director</h3>
<p>Imagine you have a service called <code>CartWrapper</code>. This service is meant to be a
wrapper of a cart, and its behavior is that easy.</p>
<ul>
<li>If you require an existing user’s cart, retrieve it from database and return
it</li>
<li>Otherwise, create a new Cart, save it and return it.</li>
</ul>
<p>Let’s see a small implementation of such service.</p>
<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
<span class='line-number'>7</span>
<span class='line-number'>8</span>
<span class='line-number'>9</span>
<span class='line-number'>10</span>
<span class='line-number'>11</span>
<span class='line-number'>12</span>
<span class='line-number'>13</span>
<span class='line-number'>14</span>
<span class='line-number'>15</span>
<span class='line-number'>16</span>
<span class='line-number'>17</span>
<span class='line-number'>18</span>
<span class='line-number'>19</span>
<span class='line-number'>20</span>
<span class='line-number'>21</span>
<span class='line-number'>22</span>
<span class='line-number'>23</span>
<span class='line-number'>24</span>
<span class='line-number'>25</span>
<span class='line-number'>26</span>
<span class='line-number'>27</span>
<span class='line-number'>28</span>
<span class='line-number'>29</span>
<span class='line-number'>30</span>
<span class='line-number'>31</span>
<span class='line-number'>32</span>
<span class='line-number'>33</span>
<span class='line-number'>34</span>
<span class='line-number'>35</span>
<span class='line-number'>36</span>
<span class='line-number'>37</span>
<span class='line-number'>38</span>
<span class='line-number'>39</span>
<span class='line-number'>40</span>
<span class='line-number'>41</span>
<span class='line-number'>42</span>
<span class='line-number'>43</span>
<span class='line-number'>44</span>
<span class='line-number'>45</span>
<span class='line-number'>46</span>
<span class='line-number'>47</span>
<span class='line-number'>48</span>
<span class='line-number'>49</span>
<span class='line-number'>50</span>
<span class='line-number'>51</span>
<span class='line-number'>52</span>
<span class='line-number'>53</span>
<span class='line-number'>54</span>
<span class='line-number'>55</span>
<span class='line-number'>56</span>
<span class='line-number'>57</span>
<span class='line-number'>58</span>
<span class='line-number'>59</span>
<span class='line-number'>60</span>
<span class='line-number'>61</span>
<span class='line-number'>62</span>
<span class='line-number'>63</span>
<span class='line-number'>64</span>
<span class='line-number'>65</span>
<span class='line-number'>66</span>
<span class='line-number'>67</span>
<span class='line-number'>68</span>
<span class='line-number'>69</span>
<span class='line-number'>70</span>
<span class='line-number'>71</span>
<span class='line-number'>72</span>
<span class='line-number'>73</span>
<span class='line-number'>74</span>
<span class='line-number'>75</span>
<span class='line-number'>76</span>
<span class='line-number'>77</span>
<span class='line-number'>78</span>
<span class='line-number'>79</span>
</pre></td><td class='code'><pre><code class='php'><span class='line'><span class="sd">/**</span>
</span><span class='line'><span class="sd"> * CartWrapper</span>
</span><span class='line'><span class="sd"> */</span>
</span><span class='line'><span class="k">class</span> <span class="nc">cartWrapper</span>
</span><span class='line'><span class="p">{</span>
</span><span class='line'> <span class="sd">/**</span>
</span><span class='line'><span class="sd"> * @var EntityManager</span>
</span><span class='line'><span class="sd"> *</span>
</span><span class='line'><span class="sd"> * Cart entity manager</span>
</span><span class='line'><span class="sd"> */</span>
</span><span class='line'> <span class="k">protected</span> <span class="nv">$entityManager</span><span class="p">;</span>
</span><span class='line'>
</span><span class='line'> <span class="sd">/**</span>
</span><span class='line'><span class="sd"> * @var CartFactory</span>
</span><span class='line'><span class="sd"> *</span>
</span><span class='line'><span class="sd"> * Cart factory</span>
</span><span class='line'><span class="sd"> */</span>
</span><span class='line'> <span class="k">protected</span> <span class="nv">$cartFactory</span><span class="p">;</span>
</span><span class='line'>
</span><span class='line'> <span class="sd">/**</span>
</span><span class='line'><span class="sd"> * @var CartRepository</span>
</span><span class='line'><span class="sd"> *</span>
</span><span class='line'><span class="sd"> * Cart repository</span>
</span><span class='line'><span class="sd"> */</span>
</span><span class='line'> <span class="k">protected</span> <span class="nv">$cartRepository</span><span class="p">;</span>
</span><span class='line'>
</span><span class='line'> <span class="sd">/**</span>
</span><span class='line'><span class="sd"> * Construct</span>
</span><span class='line'><span class="sd"> *</span>
</span><span class='line'><span class="sd"> * @param EntityManager $entityManager Entity manager</span>
</span><span class='line'><span class="sd"> * @param CartFactory $cartFactory Cart factory</span>
</span><span class='line'><span class="sd"> * @param CartRepository $cartRepository Cart repository</span>
</span><span class='line'><span class="sd"> */</span>
</span><span class='line'> <span class="k">public</span> <span class="k">function</span> <span class="nf">__construct</span><span class="p">(</span>
</span><span class='line'> <span class="nx">EntityManager</span> <span class="nv">$entityManager</span><span class="p">,</span>
</span><span class='line'> <span class="nx">CartFactory</span> <span class="nv">$cartFactory</span><span class="p">,</span>
</span><span class='line'> <span class="nx">CartRepository</span> <span class="nv">$cartRepository</span>
</span><span class='line'> <span class="p">)</span>
</span><span class='line'> <span class="p">{</span>
</span><span class='line'> <span class="nv">$this</span><span class="o">-></span><span class="na">entityManager</span> <span class="o">=</span> <span class="nv">$entityManager</span><span class="p">;</span>
</span><span class='line'> <span class="nv">$this</span><span class="o">-></span><span class="na">cartFactory</span> <span class="o">=</span> <span class="nv">$cartFactory</span><span class="p">;</span>
</span><span class='line'> <span class="nv">$this</span><span class="o">-></span><span class="na">cartRepository</span> <span class="o">=</span> <span class="nv">$cartRepository</span><span class="p">;</span>
</span><span class='line'> <span class="p">}</span>
</span><span class='line'>
</span><span class='line'> <span class="sd">/**</span>
</span><span class='line'><span class="sd"> * Load cart</span>
</span><span class='line'><span class="sd"> *</span>
</span><span class='line'><span class="sd"> * @param UserInterface $user User</span>
</span><span class='line'><span class="sd"> *</span>
</span><span class='line'><span class="sd"> * @return CartInterface</span>
</span><span class='line'><span class="sd"> */</span>
</span><span class='line'> <span class="k">public</span> <span class="k">function</span> <span class="nf">loadCart</span><span class="p">(</span><span class="nv">$user</span><span class="p">)</span>
</span><span class='line'> <span class="p">{</span>
</span><span class='line'> <span class="nv">$userCart</span> <span class="o">=</span> <span class="nv">$this</span>
</span><span class='line'> <span class="o">-></span><span class="na">cartRepository</span>
</span><span class='line'> <span class="o">-></span><span class="na">findOneBy</span><span class="p">([</span>
</span><span class='line'> <span class="s1">'user'</span> <span class="o">=></span> <span class="nv">$user</span>
</span><span class='line'> <span class="p">]);</span>
</span><span class='line'>
</span><span class='line'> <span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="p">(</span><span class="nv">$userCart</span> <span class="nx">instanceof</span> <span class="nx">CartInterface</span><span class="p">))</span> <span class="p">{</span>
</span><span class='line'>
</span><span class='line'> <span class="nv">$newCart</span> <span class="o">=</span> <span class="nv">$this</span>
</span><span class='line'> <span class="o">-></span><span class="na">cartFactory</span>
</span><span class='line'> <span class="o">-></span><span class="na">create</span><span class="p">(</span><span class="nv">$user</span><span class="p">);</span>
</span><span class='line'>
</span><span class='line'> <span class="nv">$this</span>
</span><span class='line'> <span class="o">-></span><span class="na">entityManager</span>
</span><span class='line'> <span class="o">-></span><span class="na">persist</span><span class="p">(</span><span class="nv">$newCart</span><span class="p">);</span>
</span><span class='line'>
</span><span class='line'> <span class="nv">$this</span>
</span><span class='line'> <span class="o">-></span><span class="na">entityManager</span>
</span><span class='line'> <span class="o">-></span><span class="na">flush</span><span class="p">(</span><span class="nv">$newCart</span><span class="p">);</span>
</span><span class='line'>
</span><span class='line'> <span class="nv">$userCart</span> <span class="o">=</span> <span class="nv">$newCart</span><span class="p">;</span>
</span><span class='line'> <span class="p">}</span>
</span><span class='line'>
</span><span class='line'> <span class="k">return</span> <span class="nv">$userCart</span><span class="p">;</span>
</span><span class='line'> <span class="p">}</span>
</span><span class='line'><span class="p">}</span>
</span></code></pre></td></tr></table></div></figure>
<p>As you can see, this services needs 3 dependencies, and would be difficult to
reduce this number in order to reduce the complexity of the class. This service
is intended to do one single thing.</p>
<p>What is the strategy here? Do you know what the <em>Facade pattern</em> is, right?
Well, the way for solving this amount of classes is creating a new facade called
Director, intended to provide a small set of usable methods simplifying the
management of the entities.</p>
<p>Let’s see the implementation of this class. You can find the real implementation
in <a href="https://github.com/elcodi/elcodi">elcodi/core</a>.</p>
<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
<span class='line-number'>7</span>
<span class='line-number'>8</span>
<span class='line-number'>9</span>
<span class='line-number'>10</span>
<span class='line-number'>11</span>
<span class='line-number'>12</span>
<span class='line-number'>13</span>
<span class='line-number'>14</span>
<span class='line-number'>15</span>
<span class='line-number'>16</span>
<span class='line-number'>17</span>
<span class='line-number'>18</span>
<span class='line-number'>19</span>
<span class='line-number'>20</span>
<span class='line-number'>21</span>
<span class='line-number'>22</span>
<span class='line-number'>23</span>
<span class='line-number'>24</span>
<span class='line-number'>25</span>
<span class='line-number'>26</span>
<span class='line-number'>27</span>
<span class='line-number'>28</span>
<span class='line-number'>29</span>
<span class='line-number'>30</span>
<span class='line-number'>31</span>
<span class='line-number'>32</span>
<span class='line-number'>33</span>
<span class='line-number'>34</span>
<span class='line-number'>35</span>
<span class='line-number'>36</span>
<span class='line-number'>37</span>
<span class='line-number'>38</span>
<span class='line-number'>39</span>
<span class='line-number'>40</span>
<span class='line-number'>41</span>
<span class='line-number'>42</span>
<span class='line-number'>43</span>
<span class='line-number'>44</span>
<span class='line-number'>45</span>
<span class='line-number'>46</span>
<span class='line-number'>47</span>
<span class='line-number'>48</span>
<span class='line-number'>49</span>
<span class='line-number'>50</span>
<span class='line-number'>51</span>
<span class='line-number'>52</span>
<span class='line-number'>53</span>
<span class='line-number'>54</span>
<span class='line-number'>55</span>
<span class='line-number'>56</span>
<span class='line-number'>57</span>
<span class='line-number'>58</span>
<span class='line-number'>59</span>
<span class='line-number'>60</span>
<span class='line-number'>61</span>
<span class='line-number'>62</span>
<span class='line-number'>63</span>
<span class='line-number'>64</span>
<span class='line-number'>65</span>
<span class='line-number'>66</span>
<span class='line-number'>67</span>
<span class='line-number'>68</span>
<span class='line-number'>69</span>
<span class='line-number'>70</span>
<span class='line-number'>71</span>
<span class='line-number'>72</span>
<span class='line-number'>73</span>
<span class='line-number'>74</span>
<span class='line-number'>75</span>
<span class='line-number'>76</span>
<span class='line-number'>77</span>
<span class='line-number'>78</span>
<span class='line-number'>79</span>
<span class='line-number'>80</span>
<span class='line-number'>81</span>
<span class='line-number'>82</span>
<span class='line-number'>83</span>
<span class='line-number'>84</span>
<span class='line-number'>85</span>
<span class='line-number'>86</span>
<span class='line-number'>87</span>
<span class='line-number'>88</span>
<span class='line-number'>89</span>
<span class='line-number'>90</span>
<span class='line-number'>91</span>
<span class='line-number'>92</span>
<span class='line-number'>93</span>
<span class='line-number'>94</span>
<span class='line-number'>95</span>
<span class='line-number'>96</span>
<span class='line-number'>97</span>
<span class='line-number'>98</span>
<span class='line-number'>99</span>
<span class='line-number'>100</span>
<span class='line-number'>101</span>
<span class='line-number'>102</span>
<span class='line-number'>103</span>
<span class='line-number'>104</span>
<span class='line-number'>105</span>
<span class='line-number'>106</span>
<span class='line-number'>107</span>
<span class='line-number'>108</span>
<span class='line-number'>109</span>
<span class='line-number'>110</span>
<span class='line-number'>111</span>
<span class='line-number'>112</span>
<span class='line-number'>113</span>
<span class='line-number'>114</span>
<span class='line-number'>115</span>
<span class='line-number'>116</span>
<span class='line-number'>117</span>
<span class='line-number'>118</span>
<span class='line-number'>119</span>
<span class='line-number'>120</span>
<span class='line-number'>121</span>
<span class='line-number'>122</span>
<span class='line-number'>123</span>
<span class='line-number'>124</span>
<span class='line-number'>125</span>
<span class='line-number'>126</span>
<span class='line-number'>127</span>
<span class='line-number'>128</span>
<span class='line-number'>129</span>
<span class='line-number'>130</span>
<span class='line-number'>131</span>
<span class='line-number'>132</span>
<span class='line-number'>133</span>
<span class='line-number'>134</span>
<span class='line-number'>135</span>
<span class='line-number'>136</span>
<span class='line-number'>137</span>
<span class='line-number'>138</span>
<span class='line-number'>139</span>
<span class='line-number'>140</span>
<span class='line-number'>141</span>
<span class='line-number'>142</span>
<span class='line-number'>143</span>
<span class='line-number'>144</span>
<span class='line-number'>145</span>
<span class='line-number'>146</span>
<span class='line-number'>147</span>
<span class='line-number'>148</span>
<span class='line-number'>149</span>
<span class='line-number'>150</span>
<span class='line-number'>151</span>
<span class='line-number'>152</span>
<span class='line-number'>153</span>
<span class='line-number'>154</span>
<span class='line-number'>155</span>
<span class='line-number'>156</span>
<span class='line-number'>157</span>
<span class='line-number'>158</span>
<span class='line-number'>159</span>
<span class='line-number'>160</span>
<span class='line-number'>161</span>
<span class='line-number'>162</span>
<span class='line-number'>163</span>
<span class='line-number'>164</span>
<span class='line-number'>165</span>
<span class='line-number'>166</span>
<span class='line-number'>167</span>
<span class='line-number'>168</span>
<span class='line-number'>169</span>
<span class='line-number'>170</span>
<span class='line-number'>171</span>
<span class='line-number'>172</span>