Skip to content Skip to navigation

John Bickar's Blog Posts

Photo of John Bickar Posted by John Bickar on Monday, October 2, 2017 - 3:11pm

Today I learned about the -v flag for grep. The -v, or --invert-match, flag, returns all lines that do not match your regular expression.

Let's say you have a long list of items, and you want to narrow it down to the ones that are not orange. I have banged my head against trying to do this with sed multiple times (as my search history will attest), and it turns out to be so much easier with grep.

orange bicycle
orange sweater
green banana
orange basketball
blue bandana
orange you glad I stopped there?

If that list is in a file called list.txt, run:

grep -v "^orange" list.txt

and it will return:

green banana
blue bandana

Pretty spiffy!

Posted in:
Tags:
Photo of John Bickar Posted by John Bickar on Sunday, March 12, 2017 - 10:39am

At the 2017 Stanford Drupal Camp, I facilitated a conversation about "Lessons Learned from 2+ Years Using Behat".

Thanks to Kellie Brownell, Caryl Westerberg, and many others in SWS for their work that made this possible, and to Shawn DeArmond from UC Davis for his contributions to the conversation.

(Slides and associated links are available here.)

Photo of John Bickar Posted by John Bickar on Monday, October 17, 2016 - 9:00am

As part of the Summer 2016 updates to Stanford Sites, we recently added several new modules that bring enhanced features and functionality to all users of the Stanford Sites service. This post is a highlight of the new modules added; detailed posts on several of them will follow.

New Modules Added

NoBots

NoBots is a lightweight way of hiding your site from (well-behaved) search engine robots. It is a drop-in replacement for the (soon-to-be-deprecated) Stanford MetaTag NoBots module.

Stanford Event Series

Stanford Event Series integrates with the Stanford Events Importer to allow site builders to create collections of events.

Stanford Gallery

Stanford Gallery integrates with the Colorbox Drupal module and Javascript library to allow site builders to create lightweight, accessible image galleries.

Stanford Landing Page

Stanford Landing Page provides a content type that supports dynamic layouts on a single page. With multiple view modes, site builders can choose which layout they want to use on a per-node basis. Included view modes are:

  • List
  • Blocks
  • Cards

Stanford News

Stanford News provides an out-of-the-box solution for displaying news content on your website. This Feature contains a content type, a news page layout, and taxonomy. This module is a great replacement for the default Article content type.

Stanford Publication

Stanford Publication is a set of Features for highlighting publications on your website. Included in this feature is a content type, a set of fields, and a collection of views for displaying and listing the publication content. It is a lighter-weight alternative to the Biblio module.

All Modules on Stanford Sites

A full list of all modules on Stanford Sites is available at https://uit.stanford.edu/service/web/stanfordsites/modules.

Contributing Back to the Stanford Community

All of the above modules were originally developed as part of the Stanford Sites Jumpstart suite of products, and are now being made available for free to members of the Stanford community. We would like thank all of Stanford Web Services' clients for supporting the development of these enhancements.

Posted in:
Photo of John Bickar Posted by John Bickar on Wednesday, September 7, 2016 - 8:00am

Today's post is a quick tutorial how to use "git grep" and "git tag" to find the earliest tag that contains a particular line of code.

TL;DR: use:

git grep <regexp> $(git rev-list --all)

and

git tag --contains=<commit hash>

The Longer Version

In this case, I want to find the earliest tag that includes a given update function (stanford_courses_update_7300() in the Stanford Courses Drupal Module).

I'll first search for all commits that include the text "update_7300" (that string is specific enough that it will return only stanford_courses_update_7300):

% git grep update_7300 $(git rev-list --all)

That outputs a list of every commit that contains the text "update_7300" (which is a lot in this case). I can hit my spacebar to scroll through the list; I'm looking for the last commit in the list (i.e., the earliest commit that contains that code):

1cb28cee3c09ecee0208b3d25650a2e4d1a16a63:stanford_courses.install:function stanford_courses_update_7300(&$sandbox) {

I've found my commit hash; now I want to find the earliest tag that includes that commit:

% git tag --contains=1cb28cee3c09ecee0208b3d25650a2e4d1a16a63
7.x-3.1
7.x-3.10
7.x-3.2
7.x-3.3
7.x-3.4
7.x-3.5
7.x-3.6
7.x-3.7
7.x-3.8
7.x-3.9
7.x-4.0

From that, the earliest tag that contains the stanford_courses_update_7300() update hook is 7.x-3.1

Posted in:
Photo of John Bickar Posted by John Bickar on Monday, July 25, 2016 - 11:00am

(Post last updated on: 9/6/16, 10:30AM)

University IT will perform maintenance on all websites on the Stanford Sites Drupal hosting service approximately bi-weekly from July 26th through September 23rd. Details on what is included in each update window are below, and we will update this post as we have more information.

September 13th - 16th

These changes include security-related module upgrades, bug fixes, and new modules for Drupal 7 sites. See below for a complete list of new and updated modules.

Websites are scheduled to receive upgrades on a rolling basis. Please note that when the upgrade begins on a website, any logged-in users will be logged out, and the website will be placed offline temporarily. Visitors will see a message that the website is offline for maintenance. Security patches and database updates will be applied, and the website will be placed back online. We expect each website to be offline for approximately 1 minute during the updates.

If you experience issues with your website hosted on Stanford Sites, please submit a HelpSU request. We will respond as soon as possible. Thanks for using Stanford Sites!

What is included in the September 13th - 16th upgrade

Drupal 7:

Modules
  • bean-7.x-1.11
  • context-7.x-3.7
  • ctools-7.x-1.10
  • date-7.x-2.9
  • default_image_ft-7.x-1.6*
  • ds-7.x-2.14
  • entity-7.x-1.7
  • feeds-7.x-2.0-beta2
  • feeds_xpathparser-7.x-1.1
  • nobots-7.x-1.0*
  • services-7.x-3.17
  • uuid-7.x-1.0-beta2
  • stanford_bean_types-7.x-3.0
  • stanford_capx-7.x-2.0-php54
  • stanford_courses-7.x-4.0
  • stanford_event_series-7.x-1.1*
  • stanford_feeds_helper-7.x-1.1 *
  • stanford_gallery-7.x-2.2 *
  • stanford_helper-7.x-1.0 *
  • stanford_landing_page-7.x-1.4+3-dev *
  • stanford_news-7.x-3.3+8-dev *
  • stanford_person-7.x-5.2
  • stanford_publication-7.x-2.2 *
  • stanford_sites_helper-7.x-1.6

* New

The following suggestions for new modules to be added to Stanford Sites are currently under review:

If you would like to suggest additional modules to be added to the list of modules currently available on Stanford Sites, please submit a HelpSU request.

 


August 23rd - 26th (Completed)

What was included in the August 23rd - 26th upgrade

Drupal 7:

Modules
  • Drupal core 7.50
  • admin_views 7.x-1.6
  • better_formats 7.x-1.0-beta2
  • computed_field 7.x-1.1
  • googleanalytics 7.x-2.3
  • libraries 7.x-2.3
  • menu_position 7.x-1.2
  • services 7.x-3.15
  • uuid 7.x-1.0-beta1
  • views_data_export 7.x-3.0-beta9
  • views_field_view 7.x-1.2
  • webform 7.x-4.13
  • workbench_access 7.x-1.4
  • wysiwyg_filter 7.x-1.6-rc3
  • stanford_carousel 7.x-2.3
  • stanford_date_timepicker 7.x-1.3
  • stanford_events_importer 7.x-3.3
  • stanford_image 7.x-3.5
  • stanford_slides 7.x-3.1
Themes
  • open_framework 7.x-2.5
  • stanford_framework 7.x-3.2
  • stanford_jordan 7.x-3.0
  • stanford_wilbur 7.x-3.0

More information on theme updates.

July 26th - 29th (Completed)

  • Tuesday, July 26th (10PM to 8PM July 27th): Personal sites on people.stanford.edu
    (Note: Several unanticipated issues pushed these updates into business hours on July 27th.)

  • Wednesday, July 27th (10PM to 4AM July 28th): Group and department sites on sites.stanford.edu

  • Thursday, July 28th (10PM to 4AM July 29th): Group and department sites on sites.stanford.edu; development sites on sites-dev.stanford.edu and people-dev.stanford.edu

What was included in the July 26th - July 29th upgrade

Drupal 7:

Modules
  • block_titlelink 7.x-1.3
  • node_clone 7.x-1.0-rc2
  • colorbox 7.x-2.10
  • css_injector 7.x-1.x-dev
  • ds 7.x-2.10
  • file_entity 7.x-2.0-beta1
  • filefield_paths 7.x-1.0-beta4
  • flag 7.x-3.6
  • google_analytics 7.x-2.1
  • link 7.x-1.3
  • metatag 7.x-1.6
  • mollom 7.x-2.14
  • pathauto 7.x-1.2
  • views 7.x-3.11
  • workbench_moderation 7.x-1.4
  • stanford_easy_wysiwyg_css 7.x-1.1
  • stanford_image_styles 7.x-3.2
  • stanford_video 7.x-2.1
Posted in:
Photo of John Bickar Posted by John Bickar on Friday, April 1, 2016 - 12:01am

The modern web developer has a variety of markup languages available for use in different contexts: XML, HTML, YAML, Markdown - the list goes on and on. Yet each has its limitation(s), whether that be performance, readability, or ease-of-use.

That all changes today with the introduction of the Syntactically Accurate Markup Language (SAML).

SAML is a human-readable markup language designed to be used in a variety of contexts - web, mobile, APIs, and so forth.

As the modern web moves away from desktop browsers and more towards "content anywhere, on any device", we need a markup language that supports that end.

The Premise of SAML

SAML is a straightforward, human-readable language. There are no tags, no attributes, no esoteric syntax. Words are what they mean; a new line is a new line; and punctuation is what it says it is.

To write SAML, you simply write.

SAML Example

As a concrete example, let's look at a list of items in SAML:

Apple
Orange
Banana
Pear
Watermelon

Now, let's compare the same list in HTML:

<ul>
<li>Apple</li>
<li>Orange</li>
<li>Banana</li>
<li>Pear</li>
<li>Watermelon</li>
</ul>

As you can see, SAML is clean, forthright, and syntactically accurate.

Special Symbols in SAML

As SAML is syntactically accurate, it supports all of the usual punctuation symbols. There are no hidden meanings.

Below is a summary of commonly-used punctuation marks and their equivalent in SAML:

Text Punctuation Mark SAML Equivalent
. .
, ,
! !
? ?
¿ ¿
¡ ¡
# #

 

Advantages of SAML

  1. Readability: In SAML, words and punctuation are used to create sentences. Sentences are used to create paragraphs. It's that simple.
  2. Performance: In the list example above, SAML is 37 bytes, compared to 92 bytes for HTML. That's a 248% increase in performance.
  3. Security: No Bobby Tables in SAML; a semicolon is just a semicolon.
  4. Device-independence: SAML is device-agnostic. Desktop browser, tablet, mobile phone, app, pen-and-paper - SAML works on them all.
  5. Backwards-Compatibility: SAML is compatible with all historical web browsers (only tested as far back as Mosaic 0.5) and mobile devices.
  6. Multilingual: SAML is language-independent. You can write SAML in any language you wish.

SAML Sounds Great - What Now?

At Stanford University, we are dedicated to finding solutions to big challenges. At Stanford Web Services, we believe in the power of open source, and releasing early and often.

Therefore, today we are announcing the open-source release of SAML 0.1. Learn more at discoversaml.org.

Posted in:
Photo of John Bickar Posted by John Bickar on Tuesday, February 2, 2016 - 8:25am

In November, 2015, the Stanford Web Services team got to dive into Drupal 8 during a weeklong sprint. I was excited to look at the RESTful web services that Drupal 8 gives out-of-the-box; what follows is my documentation of the various types of requests supported, required headers, responses, and response codes.

This is not intended to be an exhaustive documentation of RESTful web services in Drupal 8. However, I have pulled information from various posts around the Web, and my own experimentation, into this post.

A REST client application (e.g., Paw for Mac OS X) is extremely handy for experimenting with RESTful web services in Drupal 8.

Contents

  1. Resources
  2. GET Request
  3. POST Request
  4. DELETE Request
  5. PATCH Request

Resources

GET Request

The GET request is the simplest, and requires no authentication (if permissions are configured to allow anonymous users to "Access GET on Content resource"). Just send a GET request to the node path and add a _format=hal_json URL parameter.

More documentation available at drupal.org.

Request

<a href="https://example.com/node/<nid>?_format=hal_json">https://example.com/node/<nid>?_format=hal_json[/geshifilter-code]

Response

200 OK

{
  "_links": {
    "self": {
      "href": "<a href="https://example.com/node/8?_format=hal_json"
">https://example.com/node/8?_format=hal_json"
</a>    },
    "type": {
      "href": "<a href="https://example.com/rest/type/node/article"
">https://example.com/rest/type/node/article"
</a>    },
    "<a href="https://example.com/rest/relation/node/article/uid":">https://example.com/rest/relation/node/article/uid":</a> [
      {
        "href": "<a href="https://example.com/user/3?_format=hal_json",
">https://example.com/user/3?_format=hal_json",
</a>        "lang": "en"
      }
    ],
    "<a href="https://example.com/rest/relation/node/article/revision_uid":">https://example.com/rest/relation/node/article/revision_uid":</a> [
      {
        "href": "<a href="https://example.com/user/3?_format=hal_json"
">https://example.com/user/3?_format=hal_json"
</a>      }
    ],
    "<a href="https://example.com/rest/relation/node/article/field_tags":">https://example.com/rest/relation/node/article/field_tags":</a> [
      {
        "href": "<a href="https://example.com/taxonomy/term/2?_format=hal_json",
">https://example.com/taxonomy/term/2?_format=hal_json",
</a>        "lang": "en"
      }
    ]
  },
  "uuid": [
    {
      "value": "a57f21eb-a4fe-4c04-8507-7a9cb1255834"
    }
  ],
  "type": [
    {
      "target_id": "article"
    }
  ],
  "langcode": [
    {
      "value": "en",
      "lang": "en"
    }
  ],
  "title": [
    {
      "value": "Test Article 2",
      "lang": "en"
    }
  ],
  "_embedded": {
    "<a href="https://example.com/rest/relation/node/article/uid":">https://example.com/rest/relation/node/article/uid":</a> [
      {
        "_links": {
          "self": {
            "href": "<a href="https://example.com/user/3?_format=hal_json"
">https://example.com/user/3?_format=hal_json"
</a>          },
          "type": {
            "href": "<a href="https://example.com/rest/type/user/user"
">https://example.com/rest/type/user/user"
</a>          }
        },
        "uuid": [
          {
            "value": "46a5a516-2d00-41fa-b300-f0342bec87f5"
          }
        ],
        "lang": "en"
      }
    ],
    "<a href="https://example.com/rest/relation/node/article/revision_uid":">https://example.com/rest/relation/node/article/revision_uid":</a> [
      {
        "_links": {
          "self": {
            "href": "<a href="https://example.com/user/3?_format=hal_json"
">https://example.com/user/3?_format=hal_json"
</a>          },
          "type": {
            "href": "<a href="https://example.com/rest/type/user/user"
">https://example.com/rest/type/user/user"
</a>          }
        },
        "uuid": [
          {
            "value": "46a5a516-2d00-41fa-b300-f0342bec87f5"
          }
        ]
      }
    ],
    "<a href="https://example.com/rest/relation/node/article/field_tags":">https://example.com/rest/relation/node/article/field_tags":</a> [
      {
        "_links": {
          "self": {
            "href": "<a href="https://example.com/taxonomy/term/2?_format=hal_json"
">https://example.com/taxonomy/term/2?_format=hal_json"
</a>          },
          "type": {
            "href": "<a href="https://example.com/rest/type/taxonomy_term/tags"
">https://example.com/rest/type/taxonomy_term/tags"
</a>          }
        },
        "uuid": [
          {
            "value": "14bd6eeb-f0f1-4fd1-b200-e27246318b7c"
          }
        ],
        "lang": "en"
      }
    ]
  },
  "status": [
    {
      "value": "1",
      "lang": "en"
    }
  ],
  "created": [
    {
      "value": "1446588457",
      "lang": "en"
    }
  ],
  "changed": [
    {
      "value": "1446589578",
      "lang": "en"
    }
  ],
  "promote": [
    {
      "value": "1",
      "lang": "en"
    }
  ],
  "sticky": [
    {
      "value": "0",
      "lang": "en"
    }
  ],
  "revision_timestamp": [
    {
      "value": "1446588457"
    }
  ],
  "revision_translation_affected": [
    {
      "value": "1",
      "lang": "en"
    }
  ],
  "default_langcode": [
    {
      "value": "1",
      "lang": "en"
    }
  ],
  "comment": [
    {
      "status": "2",
      "cid": "0",
      "last_comment_timestamp": "1446588457",
      "last_comment_name": null,
      "last_comment_uid": "3",
      "comment_count": "0",
      "lang": "en"
    }
  ]
}

Authentication

POST, DELETE and PATCH requests require a CSRF token, as well as HTTP Basic Authentication (with a user's Drupal user name and password).

Get the token at <a href="https://example.com/rest/session/token">https://example.com/rest/session/token[/geshifilter-code]

POST Request

Request

<a href="https://example.com/entity/node">https://example.com/entity/node[/geshifilter-code]

Headers

Header Name Header Value
X-CSRF-Token (token from rest/session/token)
Authorization Basic (hashed username/password)
Content-Type application/hal+json

Body

{
  "_links": {
    "type": {
      "href": "<a href="https://example.com/rest/type/node/article"
">https://example.com/rest/type/node/article"
</a>    }
  },
  "title": {
    "value": "Test Article 2"
  },
  "type": {
    "target_id": "article"
  }
}

Response

200 OK

DELETE Request

Request

<a href="https://example.com/node/<nid>">https://example.com/node/<nid>[/geshifilter-code]

Headers

Header Name Header Value
X-CSRF-Token (token from rest/session/token)
Authorization Basic (hashed username/password)

Response

204 No Content

PATCH Request

Use the PATCH method to update an existing entity.

Request

<a href="https://example.com/node/<nid>">https://example.com/node/<nid>[/geshifilter-code]

Headers

Header Name Header Value
X-CSRF-Token (token from rest/session/token)
Authorization Basic (hashed username/password)
Content-Type application/hal+json

Body

{
  "_links": {
    "type": {
      "href": "<a href="https://example.com/rest/type/node/article"
">https://example.com/rest/type/node/article"
</a>    }
  },
  "nid": {
    "": {
      "value": "8"
    }
  },
  "type": {
    "target_id": "article"
  },
  "promote": {
    "value": "1"
  },
  "body": {
    "": {
      "value": "<p>foo bar baz</p>",
      "lang": "en"
    }
  }
}

Response

204 No Content

Posted in:
Photo of John Bickar Posted by John Bickar on Monday, September 28, 2015 - 10:30am

Today I'm going to review the features and functionality of the WebAuth Extras module. It extends the venerable WebAuth Module for Drupal (WMD), which offers single-sign on (SSO) capability for Drupal sites at Stanford.

There are two user interfaces for WebAuth Extras: the web GUI, and drush.

Web GUI

What You Can Do

The primary functionality that WebAuth Extras provides through the web GUI is the ability to add a new WebAuth user.

What does this mean, and why would you want to do it?

WMD offers the ability for users to log into any Drupal site with their SUNetID and password. When the user logs in the first time, a unique user account is created for them, and they are automatically given the role of "SUNet User". Additionally, users may be assigned additional roles based on affiliation:

Affiliation Workgroup Drupal Role
Student stanford:student Stanford Student
Faculty stanford:faculty Stanford Faculty
Staff stanford:staff Stanford Staff

If you want to assign additional roles to a user, you either need to use workgroup mapping, or the user needs to have logged in to your Drupal site at least once.

Adding a new WebAuth user via WebAuth Extras allows you to bypass the awkward step where you have to burden a user with logging into the site before you assign them a role ("Hi (Senior Faculty Member), this is (lowly Drupal administrator). Can I get you to go to <url> and click the 'SUNetID login' link in the top right corner? No, you won't see anything yet, I haven't configured your permissions.").

How to Do It

  1. Enable the WebAuth Extras module if it is not already enabled
  2. Go to admin/config/webauth/adduser
  3. Fill in the form:
    1. SUNetID: The users' SUNetID. This is the only required field; if you do not fill out the rest of the fields, Name and Email Address will be populated from LDAP.
    2. Name: Fill this out if you want to override what's in LDAP. (Search the user in StanfordYou if you want to find out their name.)
    3. Email Address: Likewise, fill this out if you want to override what's in LDAP.
    4. Make This User an Administrator: Does just what it says on the tin.

Drush

WebAuth Extras provides three drush commands:

  • drush webauth-add-user
  • drush webauth-map-role
  • drush webauth-write-htaccess

% drush help webauth-add-user
Add a new WebAuth user

Arguments:
 sunetid                                   The SUNetID of the user

Options:
 --email=<<a href="mailto:leland.stanford@stanford.edu">leland.stanford@stanford.edu</a>>    The user's email address
 --make-admin                              Make the user an admin  
 --name=<Leland Stanford>                  The user's name

Aliases: waau

% drush help webauth-map-role
Map a workgroup to a Drupal role

Examples:
 drush wamr stanford:staff administrator   Maps the "stanford:staff" workgroup to the Drupal "administrator" role

Arguments:
 workgroup                                 The workgroup you would like to map      
 role                                      The Drupal role you would like to map to

Aliases: wamr

% drush help webauth-write-htaccess
Write the WebAuth .htaccess file to disk. Performs the same function as saving the configuration through the GUI.

Aliases: wawh

webauth-add-user and webauth-map-role should be self-explanatory. webauth-write-htaccess is a utility command that you can use when you suspect that something has happened to the .htaccess file governing WebAuth restrictions (e.g., you lose workgroup role mappings).

Posted in:
Photo of John Bickar Posted by John Bickar on Friday, August 28, 2015 - 1:45pm

University IT will perform security updates on all websites on the Stanford Sites Drupal hosting service on the following dates:

These changes include updating Drupal core to the latest release, security-related module upgrades, and bug fixes for both Drupal 6 and 7 sites. See below for a complete list of updated and new modules.

Websites are scheduled to receive upgrades on a rolling basis; there should be no downtime associated with these updates.

If you experience issues with your website hosted on Stanford Sites, please submit a HelpSU request. We will respond as soon as possible. Thanks for using Stanford Sites!

What is included in the upgrade

Drupal 7:

Modules

  • drupal 7.39
  • ctools-7.x-1.9
  • date 7.x-2.9-rc1(bug fix)
  • relation-7.x-1.0

Drupal 6:

  • drupal 6.37
Posted in:
Photo of John Bickar Posted by John Bickar on Monday, July 20, 2015 - 6:10am

University IT will perform maintenance on all websites on the Stanford Sites Drupal hosting service on the following dates:

  • Friday, July 24th, from 9 a.m. - 5 p.m.: personal sites hosted on people.stanford.edu

  • Saturday, July 25th, from 4 a.m. - 8 a.m.: group and department sites hosted on sites.stanford.edu

  • Sunday, July 26th, from 4 a.m. - 8 a.m.: group and department sites hosted on sites.stanford.edu

These changes are significant and include updating Drupal core to the latest release, security-related module upgrades, new modules, and theme updates for both Drupal 6 and 7 sites. See below for a complete list of updated and new modules.

Websites are scheduled to receive upgrades on a rolling basis. Please note that when the upgrade begins on a website, all logged-in users (if any) will be logged out, and the website will be placed offline temporarily. Visitors will see a message that the website is offline for maintenance. Security patches and database updates will be applied, and the website will be placed back online. We expect the website to be offline for approximately 1 minute during the updates.

If you experience issues with your website hosted on Stanford Sites, please submit a HelpSU request. We will respond as soon as possible. Thanks for using Stanford Sites!

What is included in the upgrade

* = new addition to Stanford Sites

Drupal 7:

Modules

  • drupal 7.38
  • admin_menu 7.x-1.5
  • admin_views-7.x-1.5
  • advanced_help 7.x-1.3
  • backup_migrate 7.x-3.1
  • bean 7.x-1.9
  • better_exposed_filters 7.x-3.2
  • colorbox 7.x-2.9
  • context_list_active 7.x-1.0
  • context_respect 7.x-1.3
  • context_useragent 7.x-1.x-dev
  • css_injector 7.x-1.x-dev
  • date 7.x-2.9-rc1
  • date_ical 7.x-2.14
  • draggableviews 7.x-2.1*
  • ds 7.x-2.10
  • erus 7.x-1.1
  • features 7.x-2.6
  • feeds 7.x-2.0-alpha9
  • feeds_jsonpath_parser 7.x-1.0
  • feeds_tamper 7.x-1.1
  • field_permissions 7.x-1.0-beta2*
  • menu_block 7.x-2.7
  • metatag 7.x-1.6
  • module_filter 7.x-2.0
  • mollom 7.x-2.14
  • pathauto 7.x-1.x-dev
  • print 7.x-2.0*
  • redirect 7.x-1.0-rc3
  • rules 7.x-2.9
  • services 7.x-3.12
  • smart_trim 7.x-1.5
  • stanford (profile) 7.x-2.x
  • stanford_bean_types 7.x-2.5
  • stanford_capx 7.x-1.1-dev+7
  • stanford_carousel 7.x-2.1
  • stanford_courses 7.x-3.6
  • stanford_date_formats 7.x-1.1
  • stanford_date_timepicker 7.x-1.2
  • stanford_easy_wysiwyg_css 7.x-1.1
  • stanford_events_importer 7.x-3.2
  • stanford_image 7.x-3.3
  • stanford_image_styles 7.x-3.2
  • stanford_metatag_nobots 7.x-3.1
  • stanford_page 7.x-2.1
  • stanford_person 7.x-5.0-beta1
  • stanford_sites_helper 7.x-1.5
  • stanford_slides 7.x-3.0
  • stanford_video 7.x-2.1
  • stanford_wysiwyg 7.x-2.4
  • uuid 7.x-1.x-dev
  • views 7.x-3.11
  • views_bulk_operations 7.x-3.3
  • webform 7.x-4.9
  • wysiwyg 7.x-2.x-dev
  • wysiwyg_filter 7.x-1.x-dev

Themes

  • open_framework-7.x-2.4
  • stanford_framework-7.x-3.1

Drupal 6:

  • drupal 6.36
  • advanced_help 6.x-1.3
  • cck 6.x-2.10
  • ctools 6.x-1.13
  • mollom 6.x-2.13
Posted in:

Pages

Subscribe to John Bickar's Blog Posts