---
name: "OpenGuides::CGI"
section: "3pm"
platform: "linux"
package: "openguides"
version: "0.84-1.1"
release: "Debian 13 (Trixie)"
platforms: ["linux"]
url: "https://new.carta.tech/OpenGuides::CGI"
---

# OpenGuides::CGI(3pm)

An OpenGuides helper for CGI-related things.

## NAME

OpenGuides::CGI - An OpenGuides helper for CGI-related things.

## DESCRIPTION

Does CGI stuff for OpenGuides.  Distributed and installed as part of the OpenGuides project, not intended for independent installation. This documentation is probably only useful to OpenGuides developers.

## SYNOPSIS

Saving preferences in a cookie:

```
  use OpenGuides::CGI;
  use OpenGuides::Config;
  use OpenGuides::Template;
  use OpenGuides::Utils;
  my $config = OpenGuides::Config->new( file => "wiki.conf" );
  my $cookie = OpenGuides::CGI->make_prefs_cookie(
      config                     => $config,
      username                   => "Kake",
      include_geocache_link      => 1,
      preview_above_edit_box     => 1,
      latlong_traditional        => 1,
      omit_help_links            => 1,
      show_minor_edits_in_rc     => 1,
      default_edit_type          => "tidying",
      cookie_expires             => "never",
      track_recent_changes_views => 1,
      display_google_maps        => 1,
      is_admin                   => 1
  );
  my $wiki = OpenGuides::Utils->make_wiki_object( config => $config );
  print OpenGuides::Template->output( wiki     => $wiki,
                                      config   => $config,
                                      template => "preferences.tt",
                                      cookies  => $cookie
  );
  # and to retrive prefs later:
  my %prefs = OpenGuides::CGI->get_prefs_from_cookie(
      config => $config
  );
```

Tracking visits to Recent Changes:

```
  use OpenGuides::CGI;
  use OpenGuides::Config;
  use OpenGuides::Template;
  use OpenGuides::Utils;
  my $config = OpenGuides::Config->new( file => "wiki.conf" );
  my $cookie = OpenGuides::CGI->make_recent_changes_cookie(
      config => $config,
  );
```

## METHODS

- **extract\_node\_param**

  ```
      my $config_file = $ENV{OPENGUIDES_CONFIG_FILE} || "wiki.conf";
      my $config = OpenGuides::Config->new( file => $config_file );
      my $guide = OpenGuides->new( config => $config );
      my $wiki = $guide->wiki;
      my $q = CGI->new;
      my $node_param = OpenGuides::CGI->extract_node_param(
                          wiki => $wiki, cgi_obj => $q );
  ```

  Returns the title, id, or keywords parameter from the URL.  Normally this will be something like "British\_Museum", i.e. with underscores instead of spaces.  However if the URL does contain spaces (encoded as `%20` or +), the return value will be e.g. "British Museum" instead.

  Croaks unless a Wiki::Toolkit object is supplied as `"wiki"` and a CGI object is supplied as `"cgi_obj"`.

- **extract\_node\_name**

  ```
      my $config_file = $ENV{OPENGUIDES_CONFIG_FILE} || "wiki.conf";
      my $config = OpenGuides::Config->new( file => $config_file );
      my $guide = OpenGuides->new( config => $config );
      my $wiki = $guide->wiki;
      my $q = CGI->new;
      my $node_name = OpenGuides::CGI->extract_node_name(
                          wiki => $wiki, cgi_obj => $q );
  ```

  Returns the name of the node the user wishes to display/manipulate, as we expect it to be stored in the database.  Normally this will be something like "British Museum", i.e. with spaces in.  Croaks unless a Wiki::Toolkit object is supplied as `"wiki"` and a CGI object is supplied as `"cgi_obj"`.

- **escape**

  ```
      my $param = OpenGuides::CGI->escape( "foo?!!??!?!" );
  ```

  Does exactly the same as CGI-\>escape (that is, encodes a string so it can safely be included in a URL), but doesn't escape commas (because it's not necessary, and looks ugly).

- **check\_spaces\_redirect**

  ```
      my $config_file = $ENV{OPENGUIDES_CONFIG_FILE} || "wiki.conf";
      my $config = OpenGuides::Config->new( file => $config_file );
      my $guide = OpenGuides->new( config => $config );
      my $q = CGI->new;
      my $url = OpenGuides::CGI->check_spaces_redirect(
                                   wiki => $wiki, cgi_obj => $q );
  ```

  If the user seems to have typed a URL with spaces in the node param instead of underscores, this method will return the URL with the underscores put in.  Otherwise, it returns false.

- **make\_prefs\_cookie**

  ```
    my $cookie = OpenGuides::CGI->make_prefs_cookie(
        config                     => $config,
        username                   => "Kake",
        include_geocache_link      => 1,
        preview_above_edit_box     => 1,
        latlong_traditional        => 1,
        omit_help_links            => 1,
        show_minor_edits_in_rc     => 1,
        default_edit_type          => "tidying",
        cookie_expires             => "never",
        track_recent_changes_views => 1,
        display_google_maps        => 1,
        is_admin                   => 1
    );
  ```

  Croaks unless an OpenGuides::Config object is supplied as `"config"`. Acceptable values for `"cookie_expires"` are `"never"`, `"month"`, `"year"`; anything else will default to `"month"`.

- **get\_prefs\_from\_cookie**

  ```
    my %prefs = OpenGuides::CGI->get_prefs_from_cookie(
        config => $config,
        cookies => \@cookies
    );
  ```

  Croaks unless an OpenGuides::Config object is supplied as `"config"`. Returns default values for any parameter not specified in cookie.

  If `"cookies"` is provided, and includes a preferences cookie, this overrides any preferences cookie submitted by the browser.

- **make\_recent\_changes\_cookie**

  ```
    my $cookie = OpenGuides::CGI->make_recent_changes_cookie(
        config => $config,
    );
  ```

  Makes a cookie that stores the time now as the time of the latest visit to Recent Changes.  Or, if `"clear_cookie"` is specified and true, makes a cookie with an expiration date in the past:

  ```
    my $cookie = OpenGuides::CGI->make_recent_changes_cookie(
        config       => $config,
        clear_cookie => 1,
    );
  ```

- **get\_last\_recent\_changes\_visit\_from\_cookie**

  ```
    my %prefs = OpenGuides::CGI->get_last_recent_changes_visit_from_cookie(
        config => $config
    );
  ```

  Croaks unless an OpenGuides::Config object is supplied as `"config"`. Returns the time (as seconds since epoch) of the user's last visit to Recent Changes.

- **make\_index\_form\_dropdowns**

  ```
      my @dropdowns = OpenGuides::CGI->make_index_form_dropdowns (
          guide    => $guide,
          selected => [
                        { type => "category", value => "pubs" },
                        { type => "locale", value => "holborn" },
                      ],
      );
      %tt_vars = ( %tt_vars, dropdowns => \@dropdowns );
      # In the template
      [% FOREACH dropdown = dropdowns %]
        [% dropdown.type.ucfirst | html %]:
        [% dropdown.html %]
        <br />
      [% END %]
  ```

  Makes HTML dropdown selects suitable for passing to an indexing template.

  The `"selected"` argument is optional; if supplied, it gives default values for the dropdowns.  At least one category and one locale dropdown will be returned; if no defaults are given for either then they'll default to everything/everywhere.

## AUTHOR

The OpenGuides Project (openguides-dev@lists.openguides.org)

## COPYRIGHT

```
     Copyright (C) 2003-2013 The OpenGuides Project.  All Rights Reserved.
```

This module is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
