logo
Free, unlimited AI code reviews that run on commit
git-lrc git-lrc GitHub Install Now We'd appreciate a star git-lrc - Free, unlimited AI code reviews that run on commit | Product Hunt git-lrc - Free, unlimited AI code reviews that run on commit | Product Hunt

Sympa::WWW::SharedDocument - Shared document repository and its nodes

Description

       Sympa::WWW::SharedDocument implements shared document repository of lists.

   Methods
       new ( $list, [ $path, [ allow_empty => 1 ] ] )
           Constructor.  Creates new instance.

           Parameters:

           $list
               A Sympa::List instance.

           $path
               String  to  determine  path  or  arrayref of path components.  The path is relative to repository
               root.

           allow_empty => 1
               Don't omit files with zero size.

           Returns:

           If $path is empty or not specified, returns new instance of repository root; {status} attribute  will
           be  set.  If $path is not empty and the path exists, returns new instance of node.  Otherwise returns
           false value.

       as_hashref ( )
           Instancemethod.  Casts the instance to hashref.

           Parameters:

           None.

           Returns:

           A hashref including attributes of instance (see "Attributes") and following special items:

           {ancestors}
               Arrayref of hashrefs including some attributes of all ancestor nodes.

           {context}
               Hashref including name and host of the list.

           {date}
               Localized form of {date_epoch}.

           {parent}
               Hashref including attributes of parent node recursively.

           {paths_d}
               Same as {paths} but, if the node is a directory, includes additional empty component at the  end.
               This is useful when the path created by join() should be followed by additional "/" character.

       count_children ( )
           Instancemethod.  Returns number of child nodes.

       count_moderated_descendants ( )
           Instancemethod.  Returns number of nodes waiting for moderation.

       create_child ( $name, owner => $email, scenario => $scenario, type => $type, [ content => $content ] )
           Instancemethod.  Creates child node and returns it.  TBD.

       get_children ( [ moderate => boolean ], [ name => $name ], [ order_by => $order ], [ owner => $email ], [
       allow_empty => 1 ] )
           Instancemethod.  Gets child nodes.

           Parameters:

           moderate => boolean
           name => $name
           owner => $email
               Filters results.

           order_by => $order
               Sorts  results.   $order  may  be one of 'order_by_doc' (by name of nodes), 'order_by_author' (by
               owner), 'order_by_size' (by size), 'order_by_date' (by modification time).  Default  is  ordering
               by names.

           allow_empty => 1
               Don't omit nodes with zero size.

           Returns:

           (Possibly empty) list of child nodes.

       get_moderated_descendants ( )
           Instancemethod.  Returns the list of nodes waiting for moderation.

           Parameters:

           None.

           Returns:

           In array context, a list of nodes.  In scalar context, an arrayref of them.

       get_privileges ( mode => $mode, sender => $sender, auth_method => $auth_method, scenario_context =>
       $scenario_context )
           Instancemethod.  Gets privileges of a user on the node.

           TBD.

       get_size ( )
           Instancemethod.  Gets total size under current node.

       install ( )
           Instancemethod.  Approves (install) file if it was held for moderation.

           Returns:

           True value.  If installation failed, returns false value and sets $ERRNO ($!).

       rename ( $new_name )
           Instancemethod.  Renames file or directory.

           Parameters:

           $new_name
               The name to be renamed to.

           Returns:

           True value.  If renaming failed, returns false value and sets $ERRNO ($!).

       rmdir ( )
           instancemethod.  Removes directory from repository.  Directory must be empty.

           Returns:

           True value.  If removal failed, returns false value and sets $ERRNO ($!).

       save_description ( )
           Instancemethod.  Creates or updates property description of the node.

       unlink ( )
           instancemethod.  Removes file from repository.

           Returns:

           True value.  If removal failed, returns false value and sets $ERRNO ($!).

       get_id ( )
           Instancemethod.  Returns unique identifier of instance.

       Methodsforrepositoryroot

       create ( )
           Instancemethod.  Creates document repository on physical filesystem.

       delete ( )
           Instancemethod.  Deletes document repository.

       restore ( )
           Instancemethod.  Restores deleted document repository.

   Functions
       valid_name ( $new_name )
           Function.  Check if the name is allowed for directory and file.

           Note:  This  should be used with name of newly created node.  Existing files and directories may have
           the name not allowed by this function.

   Attributes
       Instance of Sympa::WWW::SharedDocument may have following attributes.

       {context}
           Mandatory.  Instance of Sympa::List class the shared document repository belongs to.

       {date_epoch}
           Mandatory.  Modification time of node in Unix time.

       {file_extension}
           File extension if any.

       {fs_name}
           Mandatory.  Name of node on physical filesystem, i.e. the last part of {fs_path}.

       {fs_path}
           Mandatory.  Full path of node on physical filesystem.

       {html}
           Only in HTML file.  True value will be set.

       {icon}
           URL to icon.

       {label}
           Only in bookmark file.  Label to be shown in hyperlink.

       {mime_type}
           Only in regular file.  MIME content type of the file if it is known.

       {moderate}
           Set if node is held for moderation.

       {name}
           Mandatory.  Name of node accessible by users, i.e. the last item of {paths}.

       {owner}
           Owner (author) of node, given by property description.

       {parent}
           Parent node if any.  Sympa::WWW::SharedDocument instance.

       {paths}
           Mandatory.  Arrayref to all path components of node accessible by users.

       {scenario}{read}
       {scenario}{edit}
           Scenario names to define privileges.  These may be given by property description.

       {serial_desc}
           Modification time of property description in Unix time.  Available if property description exists.

       {size}
           Size of file.

       {status}
           Onlyinrepositoryroot.  Status of repository: 'exist', 'deleted' or 'none'.

       {title}
           Description of node, given by property description.

       {type}
           Mandatory.  Type of node.  'root' (the root of repository), 'directory' (directory), 'url'  (bookmark
           file) or 'file' (other file).

       {url}
           Only in bookmark file.  URL to be linked.

Files

listhome/shared/
           Root of repository.

       ...path/name
           Directory or file.

       ...path/.name.moderate
           Moderated directory or file.

       ...path/name/.desc
       ...path/.desc.name...path/.desc..name.moderate
           Property description of directories or files, not moderated or moderated.

       Note: The path components ("name" above) are encoded to the format suitable to physical filesystem.  Such
       conversion will be hidden behind object methods.

History

       SharedDocument module appeared on Sympa 5.2b.2.

       Rewritten Sympa::SharedDocument began to provide OO interface on Sympa 6.2.17.

       It was renamed to Sympa::WWW::SharedDocument on Sympa 6.2.26.

6.2.76                                             2025-02-12                 Sympa::WWW::SharedDocument(3Sympa)

Name

       Sympa::WWW::SharedDocument - Shared document repository and its nodes

See Also

       Sympa::List, "qdecode_filename" in Sympa::Tools::Text, "qencode_filename" in Sympa::Tools::Text.

Synopsis

         use Sympa::WWW::SharedDocument;

         $shared = Sympa::WWW::SharedDocument->new($list, $path);

         %access = $shared->get_privileges('read', $email, 'md5', {...});
         @children = $shared->get_children;
         $parent = $shared->{parent};

See Also