This is a request for permission to create full projects.

The corresponding sandbox is located at: http://drupal.org/sandbox/lorinpda/1074884

I have a pending CVS account application located at: http://drupal.org/node/954770 My CVS account application has been marked "reviewed & tested by the community" since 01/11/2011.

The functionality of this module is unique. This module does not duplicate functionality of existing modules.

Module Description

Welcome to "Tumblr Connect".

You create content on your Drupal website, this module automatically re-publishes that content on your Tumblr page. Any subsequent changes performed on your Drupal site content are automatically replicated on your Tumblr page.

Tumblr is free social networking site and service. Tumblr is located here: http://tumblr.com

Why Tumblr Connect?

Tumblr does not provide a "comment" facility itself. You must add an external service to your Tumblr page to support comments. This module allows your readers to comment and discuss your content on your Drupal website. This module adds a "read more" link to each Tumblr page content (published by this module), directing your readers to your Drupal website.

Like most social media services, Tumblr supports "followers". This module lets you display your Tumblr followers on your Drupal website. This module provides a fully configurable Drupal block that can be themed and customized.

Content Selection.

This module allows you to select which Drupal content types you want to publish on your Tumblr page. You determine which Drupal users (by role) are allowed to select content types. Typically you want the website administrator to set which content types are processed by this module.

This module allows you to set whether "teaser" or "full" views of your Drupal content are published on your Tumblr page.

Easy to use,

Tumblr Connect performs everything on the server side. Tumblr Connect does not require an special web browser settings or plug-ins. You Drupal website users simply create content, this module automatically posts the content to your Tumblr page.

Links and Images.

Your Drupal users do not have to worry about whether links or images use relative references. This module takes care of it automatically. This module guarantees your links and images will work on your Tumblr page.

Detailed explanation:

  • When you create content on your Drupal site, you are likely to create links and image references that contain relative references. In other words, a link reference may look like "content/my_story" rather than "http://my_drupal_site/content/my_story". This module automatically converts local references to full site references for content published on your Tumblr page. This module does not change the references on your Drupal site, it simply sends links and images with full references to Tumblr.

Modifying and Deleting Content.

  • When you modify content on your Drupal website, this module automatically updates your Tumblr page.
  • When you delete content on your Drupal website, this module automatically deletes content on your Tumblr page.

Smart Recovery.

All Social Media sites have occasional down times when they are not available. This module automatically detects when it can't connect to Tumblr. This module stores your changes in a custom job queue. When your Drupal cron process is executed, this module posts your content changes to Tumblr. This module retains your changes in the custom job queue until a connection to Tumblr is made (and thus a synchronized recovery completed).

What is Tumblr?

Tumble is a social networking site. This module and it's author is not affiliated with Tumblr.
Tumblr is a registered trademark of © Tumblr, Inc.
Like other social networking sites, accounts on Tumblr are free.

FAQ

  • Question : If I login to my Tumblr page and delete a post, will this module delete the corresponding post on my Drupal site?
  • Answer: No.
  • Question : Does this module create a Tumblr page for me?
  • Answer: No. You must create an account with Tumblr first. When (or after) you create an account on Tumblr, you create a Tumblr page. Once the your Tumblr page is created, you configure this module to point to your Tumblr account and page.
  • Question: Does this module aggregate and publish my Tumblr page content on to my Drupal website?
  • Answer: No. There are plenty great Drupal community modules like Activity Stream which will perform that service for you. This module is dedicated to publish to Tumblr, not the reverse. This module does allow you to publish a list of you Tumblr followers on your Drupal website.

Comparison with existing modules:
There are no other modules that perform the same functionality as Tumblr Connect.

  • Activity Stream imports content from external sites to your Drupal website. Tumblr Connect exports content from your Drupal website to the external Tumblr service.
  • Follow allows you to post a link to your Drupal content on Tumblr. Tumblr Connect publishes the complete content to Tumblr (either "teaser" or "full" view).
  • Drupad requires IPhone or IPad. Drupad imports content into Drupal. Tumblr Connect publishes the complete content to Tumblr (either "teaser" or "full" view).. Tumblr Connect does not require any special equipment or software.
  • Tumblr API - Has no public releases. Is a application programming interface, not a module intended for end users. Only import content from Tumblr is implemented. Tumblr connected is designed for end users. No programmer intervention is required.

Maintenance.
This module is functionally complete right now. I do intend to maintain the module indefinitely, and will promptly address any bugs. Future functionality will be considered upon request.

Comments

webchick’s picture

Status: Reviewed & tested by the community » Needs review

This actually needs to be reviewed before being set RTBC.

lorinpda’s picture

Hi,
Thank you so much for the help:)
.....
Just for clarification, I started the application process in Oct 2010, in the CVS application queue here http://drupal.org/node/954770. Other folks in the community installed my module, tested it and then set my application to RTBC.
.....
Since the folks who set my application to RTBC did not publish a detailed internal source code review, the status now is set back to "needs review". That makes sense to me, and is certainly reasonable. I can also understand due to the heavy backlog, none of the maintainers of the CVS application queue corrected the status. Thus again. I appreciate the help:) At least now, my application has the proper status setting :)
....
I've performed detailed code reviews of at least 12 other applicants. I have not asked anyone directly to "review my application since I reviewed yours". I've just tried to make the case, that everyone should pitch in to alleviate the load.
.....
So my question is, does someone need to be designated as an official reviewer? Are my detailed reviews of other applicants valid?
.....
Webchick, I don't expect you personally to write a reply. You have been a brilliant advocate of everyone involved in this process (applicants waiting for review , reviewers and the folks who maintain these issue queues). Therefore, I thought, with your name attached, I might get a reply :)

Again. the question is, are there official designated reviewers? If so, how does one volunteer to become an official reviewer?

Thank you again so much for your help :)
Lorin

berdir’s picture

Status: Needs review » Needs work

Looking through the code, some remarks. You do not necessarly need to resolve all of this to make this a full project.

- See http://drupal.org/node/1354#classes on how to correctly document classes and interfaces. In short, the idea is that you document the interface and just reference from the implementation to the interface, similiar to a hook implementation. Note that core isn't really following this yet, but people are working on it..

- $id = db_insert('tumblr_connect_batch')->fields($batch_command->toArray())->execute();
chained method calls should be written on a separate line with intendation of two spaces. Example:

$id = db_insert('tumblr_connect_batch')
  ->fields($batch_command->toArray())
  ->execute():

- public function getAllScheduled() {
In this function, you are querying field_data_body directly. That table might not exist, a site could for example use MongoDB for a field instead. Have a look at http://api.drupal.org/api/drupal/includes--entity.inc/class/EntityFieldQ.... Or maybe you can simply load the nid's and then use node_load_multiple(). That is slower, but it can be cached if performance is an issue.

- public function getAllNodes() {
You seem to be using four spaces instead of two in that function.

- version = VERSION
You shouldn't add this line to your .info file, the packing script will do that automatically

- // $Id$ (in .install)
You don't need this line anymore, git doesn't use it as you can see.

- drupal_uninstall_schema('tumblr_connect');
This is done automatically, this line must not be in your uninstall hook.

- $items['admin/config/tumblr_connect/setting'] = array(
you are creating your own category here. This shoud be avoided unless there is no other category that matches because the categories will be useless if every module adds their own categories. "Web services" looks like a perfect match to me... :)

- function getTypesAllowed($reset = FALSE) {
That function should be renamed to tumblr_connect_get_allowed_types() or something along those lines. a) prefix with your module name and b) use underline instead of camelCase for functions. There are a few more functions like that. a) is especially important.

- function tumblr_connect_block_view($delta = '') {
You should either remove the switch or use case 'tumblr_followers_block', having a switch with just default is pointless :)

- $form['drupal_types'][$key] = array(
You can simplify that line by using type 'checkboxes', then you can just pass in $types as '#options' and you have your list of checkboxes.

-

lorinpda’s picture

Hi Berdir,
Thank you so much for your help :)

I resolved all the issues your raised. I've updated my project repository (http://drupal.org/sandbox/lorinpda/1074884) . The commit message is "Issue #1074950 by Berdir, lorinpda: Fixed all issues raised in comment number 4 (git access application).".

  • All Interfaces and Classes are now documented per http://drupal.org/node/1354#classes.
  • Chained method calls are now all on separate lines with an indentation of two spaces.
  • function getAllScheduled() no longer queries field_data_body. Function now uses node_load() instead.
  • public function getAllNodes() { is formatted with 2 spaces.
  • Line -version = VERSION removed from .info file.
  • // $Id$ now removed from all file listings.
  • Removed call to drupal_uninstall_schema('tumblr_connect') in hook_uninstall().
  • Changed category to "Web Services". Changed in both the module package category and the system Configuration menu.
  • Changed function name from
    getTypesAllowed()

    to
    tumblr_connect_get_allowed_types()

    Changed all other instances of camel-case for non-object method functions. Changed a couple object-method names that were not using camel-case.

  • Removed switch statement from function tumblr_connect_block_view().
  • Changed form['drupal_types'][$key] = array( to checkboxes per your suggestion. Work great! Change impacted the following functions:
    • tumblr_connect_admin_settings()
    • tumblr_connect_admin_settings_submit()
    • theme_tumblr_admin_settings()

Again, thank so much for your help. :) I look forward to any additional suggestions.

Lorin

berdir’s picture

Wow, that's quite a commit ;)

Some *very* minor stuff about the db statements:

+      $id = db_insert('tumblr_connect_batch')
+                      ->fields($batch_command->toArray())
+                      ->execute();

Many calls are similar. That looks like a bit more than two spaces to me :)

Something like this should be enough:

$id = db_insert('tumblr_connect_batch')
  ->fields($batch_command->toArray())
  ->execute();
   public function delete($nid) {
     try {
-      $result = db_delete('tumblr_connect_batch')->condition('nid', $nid)->execute();
+      $result = db_delete('tumblr_connect_batch')->condition('nid', $nid)
+                      ->execute();
     } catch (Exception $e) {

condition() should be moved to a separate line too.

   public function getAllNodes() {
     $result = db_query('SELECT DISTINCT nid from {tumblr_connect_batch}');
     $list = array();
-    if (! $result) {
+    if (!$result) {
       throw new TumblrConnectDatabaseException(t('Unable to select all tumblr connect batch nodes'));
     }
     else {
-        while ($obj = $result->fetchObject()) {
-            $list[] = $obj->nid;
-        }
+      while ($obj = $result->fetchObject()) {
+        $list[] = $obj->nid;
+      }
     }
     return $list;
   }

You simplify this quite a bit using fetchCol().

    $list = db_query('SELECT DISTINCT nid from {tumblr_connect_batch}')->fetchCol();
    if (empty($list)) {
      // throw exception here.
    }
    return $list;
-    $obj = db_query('SELECT id from {tumblr_connect_config}')->fetchObject();
+    $obj = db_query('SELECT id from {tumblr_connect_config}')
+      ->fetchObject();

If you only have a single method call, you *can* leave it on the same line, but it's fine like this too I. This message is purely informal :)

Otherwise, awesome job on the added documentation and other cleanups.

lorinpda’s picture

Hi Berdir,
Thank you again so much for your patience and your help :) Specially thank you for posting the formatting details on the db statements. I didn't understand the formatting rule. Now I do.

I've updated my project repository (http://drupal.org/sandbox/lorinpda/1074884) again. The commit message is "Issue #1074950 by Berdir, lorinpda: Fixed all issues raised in comment number 6 (git access application).".

I've modified four source listings.

  • Verified the chained db calls now have 2 spaces indented (from the complete source statement start. Doh!!). :)
  • Where a single method is chained, moved back to same line as rest of the statement (e.g. $obj = db_query('SELECT id from {tumblr_connect_config}')->fetchObject();
  • Simplified method getAllNodes() per your suggestion.

Again, thank you so much. This really is a great help :)

Please let me know if I need to make any other changes.

Lorin

lorinpda’s picture

Status: Needs work » Needs review

Hi,
Just realized I should have set the status to needs review :)

lorinpda’s picture

Hi,
Committed new set of changes.

The commit message summary (title) is "Issue #1074950 by lorinpda, lorinpda: Added functionality, removed unused methods".

Full commit message contains all change details. Summary provided here:

  • Added support for Tumblr remote publishing states.
    • An un-published node is now mapped to a Tumblr draft.
    • A published node is now mapper as Tumblr regular post (published state).
  • Removed a couple of unused methods.
  • Replaced a couple instances of generic exceptions with module specific TumblrConnectException.

Thank you.
Lorin

c-c-m’s picture

Status: Needs review » Reviewed & tested by the community

Hello,

I have tested the new version of this module and I have few comments about it (didn't try new version yet):

1. Sincronization works pretty well: update is fast (immediate), and when a node is deleted it is also deleted in tumblr
2. It's easy to config.
3. I've created a content type with a image field on it and tried to see what happens. Unfortunately it is posted as text, although the desired behaviour would have been to post it as an image. Same thing with different content types containing one field with videos and links (one field per content). I think it would be great to have some kind of mapping so tumblr would recognize certain node types and fields as to improve tumblr's integration and presentation.

Thanks again and keep improving!

PS: I edited the post in order to remove something I said about a supposed error which is not true. Sorry for the inconvenience

lorinpda’s picture

Hi C-C-M,
Thank you so much for your review.
.....
As I pointed out her http://drupal.org/node/954770#comment-393413:

Our module supports the basic "regular" Tumblr post type. A Tumblr regular post type contains 2 fields (Title and Body) along will zero to many taxonomy terms. Therefore, if you include an image or a video in your Drupal body field, our module will publish the image and video in the corresponding Tumblr body field.

Enhancement requests (like custom mappings between disparate content types) certainly are welcome :) Even though our project is only a sandbox, you should fee free to post enhancements and additional functionality requests in the corresponding issue queue here: http://drupal.org/sandbox/lorinpda/1074884

c-c-m’s picture

You're right lorinpda,

I'm still getting used to sandboxes ;) sorry for the inconvenience, I didn't want to change the topic of conversation.

I have created a new issue in this sandbox: http://drupal.org/node/1097122

Let's wait to have this module aproved.

lorinpda’s picture

Hi,

My application has been pending since October of 2010.
....
Prior to the conversion to Git conversion my application was tagged as "reviewed & tested by the community" on January 11, 2011. After the Git conversion, my application has been reviewed further, internally (a full source code review) and externally (an end user successfully installed, tested, used and issued a successful review).
....
Is there anyway I can get a status? Is there something wrong with my application?
.....
I appreciate all of the volunteers hard work. I myself have volunteered and reviewed other folks applications.
.....
I am concerned that now twice my application has been tagged "reviewed & tested by the community" twice, yet no approval? Is there anyway I can find out why my application is not approved?
....
If I could get some type of reply, I would be very very grateful.
....
Any help would be greatly appreciated :)

mattcasey’s picture

+1

bcooper’s picture

+1

berdir’s picture

@lorinpa: Someone with the required permissions needs to make your project public. You could try to join #drupal-contribute (See http://drupal.org/irc) and ask if someone can do it.

@+1 posters: That's really not helpful to anyone, if you have tried the module and are using it, then say that. (e.g.: I have tested this module on my site and it is working fine or something like that).

laura s’s picture

@c-c-m Thanks for the review. Reviews are extremely helpful. However, I will say that I am not inclined to act to approve based solely on RTBC status set by a member who does not have "git vetted user" permission. @Berdir, would you go along with the RTBC? Barring that, another review from a vetted user would help here. Thanks.

berdir’s picture

Yes, the code looks good to me. I haven't actually used and verified that it works, but c-c-m did that. So I think that's fine...

rfay’s picture

Status: Reviewed & tested by the community » Fixed

Well, with that, this is approved and git vetted user is granted.

I dropped a minor patch into your issue queue.

Welcome, lorpinda, and thanks for your patience with this process and for your contributions to the community.

lorinpda’s picture

Berdir and Randy,
Thank you so much !! :)

I am so grateful to both of you for your incredible help :) :)
Lorin

Status: Fixed » Closed (fixed)

Automatically closed -- issue fixed for 2 weeks with no activity.

PA robot’s picture

Component: new project application » module
Issue summary: View changes
Status: Closed (fixed) » Closed (won't fix)

Closing due to lack of activity. Feel free to reopen if you are still working on this application (see also the project application workflow).

I'm a robot and this is an automated message from Project Applications Scraper.