Monthly Archives: October 2009

Forum Attachments for BuddyPress

I posted about this a while ago, but I have ported _ck_’s bb_attachments plugin to BP 1.1.x. I took some time today to clean up the readme files and submit the plugin to the wordpress.com plugin database. Nothing about the plugin itself, or the hooks you’ll have to put into your theme, has changed since my last post; but at least now you’ll receive the file with full documentation and can use the WP plugin installer to install and maintain this bad boy.

Get it here or by searching for “forum attachments” on WP’s Add New Plugin page.

Bug reports (and especially patches!) are welcome.

Tensions between disciplinary and media instruction

I’ve been talking with a colleague about coming up with a mission statement for our educational technology program, so as to better position ourselves to assess our successes and failures. We’ve got a ways to go before we’ll have anything approaching a final version, but the brainstorming conversations we’ve had so far have been fruitful. In particular, a conversation we had yesterday gave me a chance to articulate a tension fundamental to the promotion of meaningful ed tech, a tension that had been bouncing around in my head for a while but that I had never formalized. I thought it’d be worthwhile to post it here.

My view is that there are two broad, interrelated reasons for implementing various kinds of technology in the classroom. One, certain kinds of technology can help to achieve the independently existing goals of the course. (For example, blogging in an Intro to Philosophy class might help students get a better introduction to philosophical methods and topics.) Two, it’s independently valuable for students to engage critically with and create content with new media. There are a couple justifications for this second point, I suppose, the more obvious of which is that there’s a vocational advantage to having Google-fu, web savviness, etc. More important, perhaps, the nature of information, and the relationship between information and its producers and consumers, is in significant flux. The more information the internet provides, the more necessity there is for students to develop effective bullshit filters – filters which can only be developed through critical practice with the medium. Moreover, the increasing ease of production (computers, cameras, etc that are cheaper and easier to use; sites like YouTube that allow people to publish and distribute in free and massive ways) means that today’s students could potentially be much greater participants in the creation and dissemination of knowledge than past generations. Part of the educator’s job is to teach students how to harness their creative power for their own good as well as for the greater good.

So I take it as given that there are plenty of justifications, independent of the specific content of a course, for teaching new media literacy. And such literacy can only be taught through practice and iterative reflection. I propose the caveat, though, that one can only become fluent with new media by the right kind of practice. What counts as “right” can vary, but what is definitely not right is to simply do digital versions of analog assignments. If I have my students write traditional, argumentative papers, and then post them on a website, I am just porting an analog assignment to a digital medium. When they add videos or hyperlinks or a comment section or a “tweet this” button, only then are they engaging with features of the native features of the medium that set it apart from what they’d do on paper.

From this I conclude that an educational use of a technology isn’t independently beneficial unless the use engages the meaningful or “native” features of the medium enabled by the technology. Instructional technologists, if they are to be advocates for the most effective uses of tech in learning, should therefore be advocating for native uses.

Here’s the tension. “Native” uses of ed tech – uses that are typified by a real engagement with the features of the technology that set it apart from different media – are, at least prima facie, exactly the kinds of uses that instructors will and should resist. Most instructors I’ve talked with see the instructional goals of their class as primarily disciplinary. Broader benefits, like the kind of media literacy I’ve urged here, are nice, but distinctly secondary, considerations. And the problem with the desire to teach your discipline first is that your sense of what counts as good disciplinary instruction is determined by the state of your discipline in general. Take philosophy as an example. With few exceptions, what constitutes quality philosophical work is linear, text-only, relatively long-form prose. The bodies which are de facto responsible for setting the standard for philosophical legitimacy – journal editors; tenure, promotion, and hiring committees; graduate school professors; etc. – reward this kind of work nearly exclusively. The ramifications for the philosophy instructor are that (a) in the absence of alternative motives, the production of traditional philosophical works is the end goal when training budding philosophers, and (b) the means for achieving the goal of traditional philosophers will mirror the results that we desire to achieve – in other words, the only way to produce a student who’s good at writing traditional philosophy is to have them write traditional philosophy.

What it boils down to is that the instructor who focuses on disciplinary goals is, at least at first glance, beholden to the traditional disciplinary methods to get there. And since those traditional methods are necessarily at odds with “native” uses of instructional technology (because in order to be native, a use must engage in a critical way with a feature of the medium that sets it apart from traditional media), disciplinary instruction seems almost incompatible with new media literacy instruction.

I have a few ideas about how the cycle might be broken. One is that the de facto standards of excellence in a discipline are de facto only, and if we examine what we really value in (say) a good philosopher, we’ll see that the traditional medium is not critical. Another is that traditional disciplinary excellence can and should be taught by methods other than simply aping the greats – in other words, it might not be the case that writing a lot of traditional philosophy texts is not the best way to make a better writer of traditional philosophy texts. Whatever the response to the tension I’ve described above, it is crucial to respond to it if instructional technology is to be able to fulfill both its goal of enabling disciplinary ends and striving for increased student facility with new media.

Displaying the BuddyPress admin bar in other applications

Cross-posted at the CUNY Academic Commons Dev Blog

By popular demand, here’s the method we used at the CUNY Academic Commons to get the BuddyPress admin bar to appear on the non-WP/BP portions of our site. In our case, that means MediaWiki and bbPress, but theoretically this method could work for any kind of software out there.

I should note that I did not devise this method. It was invented by the inimitable Zach and Lucas of Cast Iron Coding.

The concept is as follows. A bit of jQuery looks for a div of a certain ID on a page and, when it finds it, opens a dummy WP page that contains essentially nothing but the BP admin bar loader, which then appears on your page. Download the zip file containing the necessary files (admin-bar-integration) and follow these steps to make it happen.

  1. Upload the file page-component.php to your WP theme directory.
  2. Create a new page in WordPress. The page should be blank. In the Attributes box, select the Template called “Component (do not use)”. Name the page bpnavslug and publish it, making sure that you take note of the permalink. You’ll need that URL (relative to your site’s webroot) in step 4.
  3. If any part of your site creates a menu or a list of your WordPress pages, you’ll want to exclude this empty page from those listings. Find the function call wp_list_pages in your theme (often in header.php or index.php) and add an exclude argument. For example, if the page number of bpnavslug is 4, make sure all references to wp_list_pages read wp_list_pages('exclude=4').
  4. Open the file bp-bar-integration.js. On line 3, you’ll see the path /bpnavslug/. Replace it with the path to the bpnavslug post you created in step 2.
  5. Upload bp-bar-integration.js to your server. For the sake of argument, I’ll put mine at /wp-content/js/bp-bar-integration.js.
  6. Now let’s turn to the application where you want the admin bar to appear. Open the theme file that contains the </body> tag. In bbPress, for example, this is usually footer.php.
  7. Immediately before the body close tag, paste the following code:
    <div id="bpContainer">
    </div>
  8. Next, open the template file that contains the document head (header.php in bbPress, for instance). Make sure that jQuery is also called somewhere in the head. If it’s not, the following code will call up jQuery on a standard installation of WP:
    <script type='text/javascript' src='/wp-includes/js/jquery/jquery.js?ver=1.3.2'></script>
    Now paste the following line somewhere in the head (make sure it comes after the call to jQuery):
    <script type="text/javascript" src="/wp-content/js/bp-bar-integration.js"></script>
    Be sure to replace the src attribute with path from your upload in step 5.
    Finally, you’ll have to include the CSS for the admin bar. On a default installation of BuddyPress 1.0.3 or less, the following code will work:
    <link rel='stylesheet' id='bp-admin-bar-css' href='/wp-content/plugins/buddypress/bp-core/css/admin-bar.css' type='text/css' media='screen' />
    On a more recent version of BP (1.1+), the admin bar stylesheet has been rolled in with the rest of the styles. Either create your own stylesheet containing just the admin bar code, or import the entire stylesheet:
    <link rel='stylesheet' id='bp-admin-bar-css' href='/wp-content/themes/bp-default/style.css' type='text/css' media='screen' />

A note: This method appears to be incompatible with the Google Analytics WP plugin (which appends Google’s JS to the footer of every WP page, and thus into bpnavslug, and ends up gumming up the works). You could probably get around this with some creative if-statements in the GA plugin itself.

Good luck. Because of the diversity of people’s setups, I can’t guarantee that this method will work for everyone, nor can I provide support to everyone who tries it. But I do encourage you to post whether you’ve been successful in the comments, and to help each other figure things out.

Help me alpha test BuddyPress Forum Attachments

Now that bbPress is integrated into the Very Fabric of BuddyPress, there’s some demand for useful bbPress plugins to be ported over to BP. One of the most useful is _ck_’s excellent bb-attachments, which allows users to add attachments to their forum posts. I have spent a bit of time in the last few days porting it over to BP. If anyone out there is running a BP+bbPress setup (I think it should work in any recent version of BP, but I’ve only tested in BP 1.1) and would like to help me to test what is I think a functional BP version of the plugin, please do so. Here are the details.

  1. Download the plugin bb-attachments.php.zip
  2. Unzip and upload to your WPMU plugin directory. Activate it.
  3. You’ll have to make a few changes/additions to your theme files to make it work. In your BP theme directory, go to groups/single/forum/topic.php. On line 9, after the ‘template_notices’ hook, add
    <?php do_action( 'topic_page_load' ) ?>

    Next: After line 61, which reads

    <?php bp_the_topic_post_content() ?>

    insert the following line

    <?php do_action( 'bp_after_post_content' ); ?>

    Next: On line 26, replace

    <form action="<?php bp_forum_topic_action() ?>" method="post" id="forum-topic-form" class="standard-form">

    with

    <form action="<?php bp_forum_topic_action() ?>" method="post" id="forum-topic-form" class="standard-form" enctype="multipart/form-data">
  4. In the same theme directory, open edit.php and index.php. Find the <form> tags, as described in the last part of the previous step, and replace them with the alternative <form> tag (with the enctype specified)
  5. Follow steps 1 and 2 from here. Step 5 on that page (the “optional settings”) you can do as well, and those settings might take some tweaking for certain filetypes to be allowed.
  6. Start uploading!

A few caveats:

  • I have not tested any of the AWS abilities. It’s possible that they will still work, as the AWS functionality is more or less abstracted from the specific bbPress hooks.
  • Inline images are not yet supported. I’m working on it.
  • Things look a little bit ugly with the default BP 1.1 theme. I haven’t done much to make it pretty. I’m happy to take aesthetic suggestions, if you have any.

Thanks in advance for your help. Please leave any comments here in this post’s thread.