Jump to content


  • Posts

  • Joined

  • Last visited

Everything posted by dfunk006

  1. hey @DedMoroz, That was a long time ago and I'm not quite sure I remember the details but let me try. Where have you placed your Hybridauth folder? If you put Hybridauth in the site/ directory, it will use the default PHP session.save_path. Your template in Processwire uses pw's session path (assets/sessions). You need to ensure that both the session paths are same for it to work. You can do this by commenting the following line in index.php //if(ini_get('session.save_handler') == 'files') ini_set("session.save_path", rtrim($config->paths->sessions, '/')); This will make pw's session.save_path as the default PHP session.save_path. Now session variables can easily be passes between PW and Hybridauth templates.
  2. There are, in fact, PDO drivers available for neo4j - https://github.com/jakewins/neo4j-pdo
  3. I wasn't asking for this to be built by Ryan. If I wanted to request this feature for the roadmap, I would have posted in the respective forum. I just wanted to discuss if there was any value to building something like this or not.
  4. That's an interesting analogy, although it's not quite the same. Graph databases can co-exist with mysql (a lot of people are using it that way), so its only an extension (maybe a core module) rather than a complete re-work. I'm not sure if anyone has seen neo4j's model. It's exactly like processwire! (http://neo4j.com/developer/guide-importing-data-and-etl/) Check out the part where it talks about the Graph Model. It says: A row is a node A table name is a label name Now this sounds familiar, doesn't it? In processwire's model: A row is a Page A table name is a field name Whoa! Looks like Ryan built a graph model in a relational database - absolutely brilliant! And that's not it, you can use Page fields to create connections between pages (much like creating connections between nodes to form a graph). Also, it's interesting to see the php implementation of neo4j, which also, coincidently, is very similar to processwire's API calls (https://github.com/neo4j-contrib/developer-resources/blob/gh-pages/language-guides/php/neo4jphp/index.php). $app->get('/graph', function (Request $request) use ($neo4j) { $limit = (integer)$request->get('limit', 50); $queryTemplate = <<<QUERY MATCH (m:Movie)<-[:ACTED_IN]-(a:Person) RETURN m.title as movie, collect(a.name) as cast LIMIT {limit} QUERY; $cypher = new Query($neo4j, $queryTemplate, array('limit'=>$limit)); $results = $cypher->getResultSet(); $actors = []; $nodes = []; $rels = []; foreach ($results as $result) { $target = count($nodes); $nodes[] = array('title' => $result['movie'], 'label' => 'movie'); foreach ($result['cast'] as $name) { if (!isset($actors[$name])) { $actors[$name] = count($nodes); $nodes[] = array('title' => $name, 'label' => 'actor'); } $rels[] = array('source' => $actors[$name], 'target' => $target); } } return json_encode(array( 'nodes' => $nodes, 'links' => $rels, )); }); If you notice, there's a cypher query which stores the results in a result array. Now, if we were to query a graph database and store the results in a PageArray, everything from there could be done processwire way (with access to processwire APIs). Graph Database seems like a natural fit to me for PW. Whether it's worth it or not is up for debate. Maybe there's performance improvements, maybe more flexibility or maybe just an alternative to mysql - i dunno. I pointed out a use case in my earlier post where graph db could be more useful, but I'm not sure - hence the discussion. Thoughts?
  5. Hi, Processwire makes efficient use of mysql - every field is a table and field-specific tables are joined on demand. However, joins are used nonetheless, especially in performing queries for $pages->find("selector") and related db-querying selector functions. So queries for $pages->find(field1=value1, field2=value2, field3=value3) will join field_field1, field_field2 and field_field3 tables. In this case, does it make sense to use graph databases (such as neo4j) compared to mysql? With data being connected now more than ever and with all the hype around graph databases and neo4j, will we see a potential support for graph databases in future releases of processwire?
  6. @Raymond Geerts - I ended up writing the login code in a template rather than a module (i figured it worked better that way). The code for integrating users is essentially taken from apeisa's Facebook Login Module - https://github.com/apeisa/FacebookLogin/blob/master/FacebookLogin.module code for authenticating with hybridauth: $hybridauth = new Hybrid_Auth( $ha_config ); $adapter = $hybridauth->authenticate( $provider_name ); $user_profile = $adapter->getUserProfile(); once you have successfully logged a user in with one of hybridauth's providers, you essentially need to call the processLogin function with the $user_profile object (I've made some modifications but they may not be necessary): Note: I have created a field - social_id and assigned it to users template. $social_id = $user_profile->identifier; $display_name = $user_profile->displayName; //you can capture additional information like email address, profile url, profile photo, etc from $user_profile object. see hybridauth for additional details. $name = $sanitizer->pageName($display_name, true).'-'.$social_id; $u = $this->users->get("social_id=$social_id"); // First we create random pass to use in login $uniqid = uniqid(); $pass = sha1($uniqid . $social_id . /*additional parameters can be added here*/); // User has logged in earlier with facebook id, great news let's login if ($u->id) { $u->of(false); $u->pass = $pass; /*$u->addRole(self::name);*/ //you can define a role for users $u->save(); } else { // User has not logged in before and autogenerate is on //I'm not using this but feel free to use this if you like. /*else if (!$this->disableAutogenerate) { $name = $this->sanitizer->pageName($fbUserData->name, true); $u = $this->users->get("name=$name"); // If there is already user account with same name than current logger has in facebook, then add a running number as a suffix //since i'm appending unique social ids in usernames, this problem will never arise if ($u->id) { if (!isset($fbUserData->counter)) { $fbUserData->counter = 2; $fbUserData->origName = $fbUserData->name; } else { $fbUserData->counter++; } $fbUserData->name = $fbUserData->origName . $fbUserData->counter; $this->processLogin($fbUserData); } */ // All seems to be fine, let's create the user // this is the main part $u = new User; $u->name = $name; $u->social_id = $social_id; $u->pass = $pass; /* $u->addRole(self::name);*/ $u->addRole("member"); //i've added a role called member //you can create additional fields like email, profile url, etc and add them here. $u->save(); } $this->session->login($name, $pass); $this->session->redirect(/*httpUrl*/); My code is a bit different as per my requirements, but the above code should work for basic hybridauth authentication and integration with PW users. Feel free to modify the code to suit your requirements. Hope this helps. Cheers!
  7. @Sanyaissues - yup, i have. Are you having trouble integrating with PW users?
  8. Oops! Sorry about that. Didn't realise I was crossing the line there. I shall be more cognisant about that from now!
  9. IMO, an alternative to the filesystem where files can be saved externally (like Amazon S3 or something) would really be helpful in a scenario like this. https://processwire.com/talk/topic/6046-alternate-filesystem/
  10. Hi, I think it would be really helpful to have an alternative to the default filesystem for large sites or sites that are hosted on distributed servers where the files can be saved externally to the likes of Amazon S3 instead of the '/assets/files/' folder, especially considering that filesystem on servers have a limit of either 32k or 64k for folders/sub-folders. This can be possibly achieved by creating a custom FieldType or a Module that can hook into the fileupload process, but having this built into the core would be a dream!
  11. Yes, a solution like this will surely be helpful for sites with large data or sites that are hosted on a distributed server architecture. If anyone is interested in developing a FieldType/Module for this, please let me know either via PM or by replying to this thread: https://processwire.com/talk/topic/6036-custom-fieldtype-for-amazon-s3/ and i'll be happily willing to sponsor it!
  12. Hi, Has anyone been able to save files on Amazon S3 instead of the local filesystem using File/Image Fieldtypes or creating a new Fieldtype?
  13. I too would like to save all assets to an S3 bucket instead of the local '/assets/files' folder. Is there a way to achieve this?
  14. dfunk006


    This looks very interesting indeed! Is there a way to use this inside Processwire so that images are uploaded to filepicker.io instead of the '/assets/files/' folder?
  15. Hi, Would anyone be interested in creating a custom fieldtype where images are uploaded to an Amazon S3 bucket instead of the /site/assets/ folder? Thanks
  16. If you put Hybridauth in the site/ directory, it will use the default PHP session.save_path. Your template in Processwire uses pw's session path (assets/sessions). You need to ensure that both the session paths are same for it to work. You can do this by commenting the following line in index.php //if(ini_get('session.save_handler') == 'files') ini_set("session.save_path", rtrim($config->paths->sessions, '/')); This will make pw's session.save_path as the default PHP session.save_path. Now session variables can easily be passes between PW and Hybridauth templates.
  17. Hi, I know there have been a lot of talks on providing official support for nginx (Link - http://processwire.com/talk/topic/275-processwire-on-nginx/) however, official support for it is not mentioned in the current roadmap (Link - http://processwire.com/about/roadmap/) I was wondering if this is likely to happen anytime soon. Any thoughts?
  18. Thanks @kongondo for the reference. Will check it out the thread!
  19. Yes, that advantage is definitely there which is why I'm drawn to that approach, although I am concerned about scalability. Also, its 10 Million, not 1 Million! If I go the custom tables route, I'll have 10 Million rows. Is that better than having 10 Million pages, or not really? Thanks a lot for your help!
  20. Thanks for your reply kongondo! I took a look at this one earlier: http://processwire.com/talk/topic/4561-fieldtyperate-star-rating/ I don't think the ratings are stored for each user. As far as I understand, I can save each rating in a field inside a user's page and item's page (doubt if this is the recommended approach) or in a field within a new page (will result in too many pages). Is there another way to do this? EDIT: Just checked this out too: http://processwire.com/talk/topic/2126-rudimentary-5-star-rating-system/ It uses cookies, no user login required and doesn't store the ratings.
  21. Hi, I'm working on creating a user driven ratings system where: A user can rate an item only once There is only one item on one page The user needs to login before rating The user can update /change his rating For doing this, I am planning to create a new page for every rating which will save the item, user and rating. However, if I have 10,000 items and 10,000 users and assuming everyone rates, there will be 100 Million pages created. Is this the best way to approach this, or is there a better way? Note: I am not using repeaters since they are not infinitely scalable.
  22. Yes, I discovered that 2 days ago myself! Hybridauth requires the session name to be PHPSESSID to work properly. So, i changed the session name in config.php from 'wire' to 'PHPSESSID' and it started working! I'm working on integrating it with PW's users now. Will post when I have a working module ready.
  23. Great! Thanks Pete! Also, how safe is it to change session.save_path to Apache's default session.save_path by commenting out this line in index.php? if(ini_get('session.save_handler') == 'files') ini_set("session.save_path", rtrim($config->paths->sessions, '/')); Your help is much appreciated!
  24. Hi, I wanted to know if it is ok to change the session name in config.php from 'wire' to 'PHPSESSID'? i.e, from: $config->sessionName = 'wire'; to: $config->sessionName = 'PHPSESSID'; Are there any repercussions of doing this?
  25. Does this capture the user's email address from facebook, post authentication?
  • Create New...