Enhancing Performance of Change History Logs in CRM App - php

I’m a completely new developer so forgive me for asking something weird but any help would be appreciated.
I’ve been assigned a feature enhancement task for an application.
The application is a CRM type application built using Core PHP / Phalcon Framework... the DB is on MySQL... it's a fully running application and needs some enhancements to existing features.
The CRM has a list of Contacts. Any user of the CRM who updates the profile of a contact, the system writes the change to it log.
There is a button called “History” when the user clicks on it, it shows the list of all changes that have been made to that particular contact… along with a couple of other information - like a revision history.
The changes are maintained and displayed from a few different tables in the DB.
The system is currently showing the changes but in plain text format.
Now the main requirement is to enhance this feature and make it look like a Facebook Timeline and also make sure that the page load times are much faster and retrieving the history of changes does not take a lot of time and does not affect performance of the CRM.
What should one do in such cases? What are the different ways to render information from different tables without affecting the performance.

Related

Displaying data from a MS SQL Server via wordpress

I have a very similar situation to the person in this posting but I want to make sure we are talking about the same thing.
So, I have a potential client that wants to take his current ASP website and convert most of it to a WordPress website. He spent a lot of money and time developing this back end system which is mainly to keep track of his inventory to some great detail. The purpose for having WordPress site is he wants his employees to be able to easily update blog postings, news, and some images and perhaps galleries.
So we would rebuild his current website using WordPress but the search capabilities of the site would all be pulled from his current MS SQL server (inventory information). I am assuming that there is no plug-in for this as I'm guessing most of this would have to be customized to his current back end system. I probably know just enough about this to confuse you but for those of you who understand what I'm trying to do I would appreciate any input on how to go about accomplishing this or if this is even a viable solution.
So my question here is would this project be worth the time and effort?
Many thanks,
Houston

Using a CMS with an external database

I am looking at building an external site with a CMS, probably Drupal or ExpressionEngine. The problem is that our company already has a membership database that is designed to work with our existing enterprise software, currently the membership database consists of over 400k rows.
Migrating data from the database manually is not an option as modifications and new data must be accessible in real-time. Because the design of the external database will differ from the CMS's own I have decided the best way forward is to use two databases and force the CMS to use the external to read user information (cannot write to) and a local for everything else the CMS needs to do (read + write).
Is this feasible with these Drupal or ExpressionEngine? Ideally I need to be able to use hooks as I do not wan't to modify core CMS files. Sifting through the docs I am not able to find what I would hook into for ether CMS.
(Note: I know it is possible, but I want to know if it's feasible).
Finally if there is a better way of handling this situation please also chime in. Perhaps there is something at the database level to reference a column in an external database?
I'm clutching at straws someone can point me in the right direction I'm sure.
Edit: Moodle has this functionality built in. Moodle is not suitable to my needs but perhaps their documentation will help you understand my issue better: Moodle - External database authentication
If the data is to remain in an external database, then you probably want to look at creating a web service like an API that allows your external site to access the data. Queries to an external database or notoriously slow.
I'm not a Drupal (D)/ExpressionEnginge (EE) Expert.
For TYPO3 (which I know in depth) (and also for D & EE, I think) you can write your own extension which fetches the user data from your membership database and stores them in the local frontend or backend user table for temp. authentication.
We have build such a thing for a big financial institution even with single sign on and setting the corresponding rights depending on the remote groups.
There are plenty of TYPO3 extensions which can be used as an example.
The other possibility is to avoid again the real time feature and use a synchronization script on database level with checks the membership tables with the D or EE user table in e.g. 5min rhythm.
There is also the option to use a LDAP authentication.
If databases are all MySql then you can create a view which points to the remote membership table you only need to implement the correct columns.
It is always a bad idea to modify the core. ;-)
There's an EE extension for working with external data in MySQL: http://devot-ee.com/add-ons/external-entries . I don't know what db you'll need to access or if this might be made to work with it, though.
In ExpressionEngine there are six tables that contain Member and Member Group data (EE's lingo for users/user groups).
exp_members
exp_member_groups
exp_member_bulletin_board
exp_member_data
exp_member_fields
exp_member_homepage
In all likelihood you'd need to sync your user database with exp_members and exp_member_groups at a regular interval to make this happen. Trying to have EE connect to the external DB will likely get you in trouble fast.
If you are simply wanting access to your external database, you can write plugins that connect behind the scenes and make your data available inside your templates.
I worked a a Rails app once that pushed the Rails users to become EE members and shared sessions between them so users could view both systems and stay logged in.

Building a simple wedding RSVP system with PHP?

I am contemplating building a website for my wedding next year. It would contain information about the event, photos and blogs from my fiancee and I.... you get the picture.
One feature i'd like if possible would be a way of letting my guests RSVP online. I envision that their physical invite has a passcode, which they enter into a text field on the site and tick whether they can or can't attend.
The passcode they entered will be compared against a secure guest-list containing names and passcodes. If it doesn't match, they receive an error message, if there is match however, the information is then relayed to me via email. I will probably build the site using Wordpress, so I would be dealing with PHP.
Can anyone recommend how i might approach this project, as being a front-end dev I have absolutely no idea and my ambition exceeds my limited PHP knowledge.
Would love to hear your ideas or suggestions.
Speaking in generalities, for this sort of thing I find it useful to start by outlining the various components of the system.
While the info pages can be static, you'll need a database to which you can persist your invite data, so I'd start by thinking about the data entities. Devise a list of entities that will exist in the system that might need data tables. E.g. invite, blog post etc.
Then think about the operations that need to be performed on those entities. Are they read-only? Do you need to create new ones, or modify existing ones? You'll need to write code to perform those operations at some point.
Then think about the various ways information from those entities might need to be presented to the user. This gives you an idea of what templates you'll need to build.
If you're thinking of using Wordpress, you can cover off the blog functionality and static page stuff using that application alone. You'd then need to think about how the RSVP functionality might be implemented separately to Wordpress, or within it as a plugin. If you're really lucky, there might be a plugin out there already that will do what you need - or something similar that you can augment yourself.
If you're new to the backend side of things I'd recommend building a blog + static page site using Wordpress, getting it "done" and then looking at the RSVP stuff as a second phase. At least then if it proves unfeasible you still have a useful working site.
Hope that helps!
I'd build this as a simple plugin for WordPress and create an additional DB table that would hold the name against the passcode (this could be auto-generated based on the ID or otherwise).
You could then make a simple admin page when you can add new guests and check the response of guests.
First: congratulations with your marriage. From what I understand you have very little knowledge of PHP so start with reading a few books or articles about basic PHP/MySql. Then, put your ideas in a drawing or flowchart and just go for it. Make lots of mistakes, learn from them, ask for help on SO or a PHP colleague or friend. And above all, have fun doing it.
If I were in your shoes I would install the contact 7 plugin. In the contact form, add passcode as a required text input. Have the results emailed to you and to them. They could make up the passcode which is the downside.
This doesn't have all the options you are wanting but you can either spend several hours writing your own php code and then trouble shoot it, or just install the plugin and be done in 30 minutes.

Handcoding PHP for daily log style website with mySQL database

I only began learning about web development 3 weeks ago and have grasped html, css and js quite quickly and have also had some success in using php to draw values from a mySQL database that I have setup however I have a few questions if that is OK?
I am designing a website that essentially allows users to register and then login and add details to a daily log which is stored in the mySQL database. I also want a forum, content section and a shop. Obviously there is no standard open source package for this so I have been investigating how to handcode the PHP to log users in and have them logged in across all parts of the handcoded website. I initially thought I could do this using sessions but I have read that they are bad for SEO? I understand that you can disable them and use cookies but I fear this is all getting a bit over my head? Would it be easier to try and develop this in ASP.NET?
Apologies if some of this doesn't make sense but as I said I am very new to this but I am eager to learn and really serious about it so I will take any information given to me on board. Thanks for your time
This is all very possible in PHP, but what you are asking is for an explanation that requires a book. Speaking of books, there are tons of great books offering help with exactly what you need:
PHP 5 CMS Framework Development: Would teach you about many of the pieces you are trying to assemble by hand including MVC principles.
"Obviously there is no standard open source package.."
Just to name one, WordPress allows users to log in and add stuff to a daily log (it's called a blog), has content sections, and has forum and commerce plugins. Personally, I've been amazed at how customizable WordPress is!
I don't understand your comment about using cookies instead of sessions. I recommend you use the PHP $_SESSION superglobal to keep users logged in during their session.
If you have super-sensitive data in these logs, one option might be to verify that the user's IP has not changed between requests.
I see no reason why ASP.net would be preferable. Personally, I like to learn programming by opening up vim and going at it.
P.S. Be sure you are escaping data provided to you by users before writing it to your SQL database.

Architectural advice on connecting multiple diverse sites into a single community

I've been given a task to connect multiple sites of the same client into a single network. So i would like to hear an architectural advice on connecting these sites into a single community.
These sites include:
1. Invision Power Board Forum (the most important site)
2. 3 custom made cms-s (changes to code allowable)
3. 1 drupal site
4. 3-4 wordpress blogs
Requirements are as follows:
1. Connecting all users of all sites into a single administrable entity. With permissions changing ability, users banning etc.
2. Later on, based on this implementation I have to implement "facebook like" chat, which will be available to all users regardless of place of login.
I have few ideas on my mind on how to go with this, but would like to hear some people with more experience and expertize than my self.
Cheers!
You're going to have one hell of a time. Each of those site platforms has a very disparate user architecture: there is no way to "connect" them all together fluidly without numerous codebase changes. You're looking at making deep changes to each of those platforms to communicate with a central database, likely modifying thousands (if not tens of thousands) of lines of code.
On top of the obvious (massive) changes to all of the platforms, you're going to have to worry about updates: what happens when a new version of Wordpress is released? You'd likely have to update all of your code manually (since you can't just drop in the changes). You'd also have to make sure that all of the code changes are compatible with your current database. God forbid one of the platforms starts storing user information differently---you'd have to make more massive code changes. This just isn't maintainable.
Your alternative (and best bet) is to have some sort of synchronization job that runs every hour or so: iterate through each user in each database and compare it to see if it both exists and is up-to-date in the other databases. If not, push the changes out. The problem with this is that it will get significantly slower as you get more and more users.
Perhaps another alternative is to simply offer a custom OpenID implementation. I believe that Drupal and Wordpress both have OpenID plugins that you can take advantage of. This way, you could allow your users to sign in with a pseudo-single sign-on service across your sites. The downside is that users could opt not to use it.
Good luck

Categories