
Implementor
BackOfficeThinking
CiviCRM allows us to bring all benefits and capabilities of a large commercial CRM and
donor management system to medium and large non-profits at a fraction of the cost. CiviCRM also allows smaller non-profits to benefit from an integrated solution for donor management, events, bulk email, etc. substantially increasing their effectiveness as compared to managing a variety of nonintegrated software and spreadsheets. Thanks to a strong CiviCRM community, CiviCRM’s functionality continues to advance and CiviCRM’s market continues to grow rapidly.


Implementor, Developer, Trainer
elMobile Inc.
As developers for various OpenSource CRM applications, we learned a lot from CiviCRM on its scalability and ease of customization.
CiviCRM community is truly organic cultivating growth for users and developers.
We wish to continue learning with CiviCRM and to tackle future challenges with CiviCRM.


Implementor, Developer
Third Sector Design
Being part of the CiviCRM community is really something to shout about! Not only is CiviCRM an amazing software package, its designed for organisations that make a difference in the world. We help non-profits across the UK gain control of their data through the power of CiviCRM.
It is without a doubt the best piece of software I've ever worked with, and I'm constantly discovering cool new features. More recently I've been working on CiviMobile as part of a project for my course at University. I'm really looking forward to seeing this being used by organisations across the globe.


Developer, Implementor
Web Access India Pvt. Ltd.
I have been part of CiviCRM project from the beginning and feels great to see how it has grown over the years.
I am glad to be associated with such a wonderful open source project and an awesome community around it.


End-user, administrator
International Society of Bayesian Analysis
ISBA is an international non-profit society with members from all over the world. We have sections that represent different scientific areas and chapters that represent different regions of the world. Civi Member powers our membership system! We use CiviEvent for Conference and Workship registration, and utilize CiviPetition for creating new sections to our society through member petitions. We are epxloring how CiviGrants can be used to track our travel awards and look forward to features for integrating accounting and finance. As a growing non-profit CiviCRM plays a major role in managing our membership system!


Implementor, Developer
Pogstone, Inc.
I have been involved in the CiviCRM community for over 5 years, and enjoy implementing and programming CiviCRM for a variety of non-profits. I have been amazed at the rapid pace of innovation delivered with each new release, and CiviCRM's flexibility in being able to accommodate a variety of requirements. I have learned a lot about CiviCRM by participating in CiviCon, online forums, and CiviCRM book sprint.


End-user, Administrator, Implementor
Center for Media Justice
Civi has been an amazing tool for CMJ (and for other organizations I work with) to keep our most important data all in one place in a user friendly way.


Implementer, Developer
EE-atWork
CiviCRM helps the organizations we support to do what they have to do! At EE-atWork we assist our customers with implementing and using CiviCRM. This includes functional support, training, project management, data migration, integration using the API and customization. We are based in The Netherlands.
Our customers are mainly non-profits, varying from larger organizations continuously improving the way CiviCRM supports them to smaller organizations using the core functionality and perhaps contributing to a Make It Happen. We have been active in the CiviCRM community since 2009. CiviCRM is all about community, sharing and producing together. We truly believe that one and one can be three!

Trainer
Emphanos
As a CiviCRM trainer and implementer CiviCRM provides a great solution that allows Emphanos to help NGOs improve their ability to reach out and spread their messages.


DEVELOPER
WIKIMEDIA FOUNDATION
At the Wikimedia Foundation, we leverage CiviCRM to maintain millions of records of donors and their contributions. Working with the product and particularly with the community has been a terrific experience. There's nothing quite like two open source organizations working together to meet their respective goals while ultimately strengthening the open source community as a whole.


Developer
bidon.ca
The CiviCRM community is a great place for support, to exchange ideas and to contribute back. Working with other developers or users has often allowed me to pool our resources together and lower our costs, while ensuring better quality since there were more people using it.



Comments
Working with contact/location/add/update
This looks fantastic, and I have a question/suggestion:
Because adding/updating a contact almost always goes hand-in-hand with editing their location, and because create and update are so similar, for my own personal use I ended up creating a wrapper function for the contact/location APIs (all v2, of course) which given contact and location data will:
Having a single function take care of this very common set of tasks is just so darn convenient, and I wonder if this sort of thing is already handled by v3 or if such a wrapper could be included in the API. I'd be happy to write some code for it if you think theres a place for such a thing.
I concur :)
It does look fantastic. Just for those that are newer to Civi (i.e. me :)) it took me a while to find that the api is at civicrm/ajax/doc. I read the blog and my RSS reader didn't show me that there was a video to go along with it, so took me a while to work this out :) If I want to have that API explorer on my own installs, do I need to install from SVN?
Also, I had exactly the same requirement as colemanw and went down the same path of writing a "wrapper"... I tend to think that given that you can create an email address with the contact create call, and that you can add an email using the location part of the API, that you should be able to create a phone number and address with the initial contact create call as well, to remain consistent.
I did notice that the email passed in via contact create always creates it as a home email as far as I could work out, so it would be nice if you could get the create to respect location_type_id as well...
Brand new, trunk
Hi,
Well, that civicrm/ajax/doc is brand new and has landed in svn trunk only two days ago, so quite normal that you don't know it ;). The trunk contains the code for 3.4 and the alpha version will be announced soon. You can already install from the svn and your are encouraged to see what is new, and what we have broken ;)
Right now, we are moving away from complicated apis that manipulate everything in one call and try to split the api is more managable bits.
So to create a contact with a phone and address and email, you'd call contact_create, email_create, phone_create and address_create. The email_create will have a type so you can say it's the home/billing/... email
BTW, you can change the default type of the locations (by default home, but you can choose work)
Oh I'm not surprised...
...that I didn't know it :)
More just an FYI if you don't watch the video and head over to the Sandbox then it's pretty hard to find, so just wanted to mention the actual path for anyone else who didn't notice or watch the vid.
EDIT: Although I did notice that the link takes directly to the API Explorer, so not sure how I missed that. Anyway, great work :)
Err, now that you mention it
The link wasn't to civicrm/ajax/doc when I published it and I updated it later.
Two possible explanations: either a wicked master plan to force you to watch the screencast, or that I published it way too late and didn't read before publishing.
Me too!
And here I thought I was crazy for creating a wrapper. Note however that you _can_ add address data via the contact API, it's just not intuitive.
Not that intuitive indeed ;)
Part of the problem is probably that this api is too smart for its own good.
By having simpier apis (contact_create, address_create) that do one and only one thing, we are going to be more predicatable to use.
For the ajax and REST, I'm tempted to add a way of chaining APIs calls in one single request (contact_create with these params, with the id returned and some extra param call address_create). To be continued...
API chaining supercedes the
API chaining supercedes the approach suggested here - check the wiki for links on Chaining
It would very much make sense
The location api was a nightmare to use. Right now, Erik is in the process of splitting it into simplier api (email, phone, address).
There is a need indeed for higher level APIs, right now, we focussed very much on having predictable and dump CRUD on a single entity, but definitely I see a point of having smarter ones.
Can you jump on the forum and we discuss what's the best place to add the ones you suggest ?
Sounds really great. I like
Sounds really great. I like the API explorer tool. A few thoughts though:
This is really unexpected behaviour. If this is a documentation tool it shouldn't actually create data as I'm trying to figure out how the thing works. I think this feature will end up confusing a lot of people.
I don't think the Smarty API is a good idea. Having this kind of functionality on the presentation layer is bad programming. Teaching themers to be bad programmers is not a good idea. Especially since it's already possible to call PHP from within Smarty. If you take that approach at least you can tell that you're doing something wrong.
One nice thing about the API explorer is that it pretty much replaces the wiki documentation. It would be good to move in any additional notes from the wiki that are not in the API explorer tool and then close the API wiki so as to prevent multiple diverging sets of documentation.
Wouldn't that be redundant since there's already APIs for example when a contact gets CRUDed. If there are entities that don't already have such hooks I think it would be better to put them into core CiviCRM so that they are usable during regular operations as well as API operations.
Whatever the api does the explorer exposes
Can't tell you how often I wanted to try to create an entity and had to try various variations of the params (location api, I'm looking at you). being able to quickly change the params and see what happen until you get what you wanted and no is_error=1 is very much the expected behaviour.
So for every create or delete action, expect data to be changed. In your own civicrm instance. We are all having fun between consenting adults, right ? ;) This being said, we might add a mode dry-run that won't execute the call.
A lot of CMS have some kind of fetch function to get data from the template as part of template language. In the FLOSS word, ez publish or spip have that at the only way to get data and display it on the "presentation" pages (not for the forms).
And fetching extra info in the template is not bad programming, the syntax is simple and that's IMO very readable, and having to write some php code to assign the variables to the smarty template won't be any better to avoid bad programmers practice.
And don't get me started about good practice on a CMS, having the php and html in the template mixed, php code you can store as a node content and so on are going to be nice topics for a rant on IRC one of these days ;)
As for the hooks, that's very much an idea so far, but one issue is that the hooks are on the pre/post, ie aren't called from the API. But you are right, might be better to put them in the DAO to be sure that's called everywhere.
Great stuff!!
I have already been playing with api/doc since Brussels, and I love it! And I am proud of all the work we have done in the v3 project in the little time we all have, and looking forward to improving the API's even further. Working on the address API now, hope to finish that early next week. Phone and Email will be the easier ones and follow straight after. Next one lined up for extensive testing: improving the XML in the REST interface. I have a draft version ready, but have pushed Address/Email/Phone API. As you all can see, enough work to keep us all happy.....would be wonderful if others want to take part too!
Extending the API
Just a note for anyone working on extending the API, the instructions above are slightly wrong (or perhaps updated/changed since Xavier wrote this article). More up-to-date instructions are here:
http://wiki.civicrm.org/confluence/display/CRMDOC42/How+to+migrate+or+write+an+api
(The update to the above is: The function should be named civicrm_api3_magic_getpony rather than civicrm_magic_getpony)
Url: