{
  "node.meta_change":{
    "DESCRIPTION":"Triggered when a node has its metadata updated, but the path and content remain unchanged.",
    "PARAMETERS":[
      {
        "NAME":"node",
        "TYPE":"AJXP_Node",
        "DESCRIPTION":"The node which metadata was changed."
      }
    ],
    "PARAMETER_SAMPLE":"array($ajxpNode)",
    "TRIGGERS":[
      {
        "FILE":"\/core\/classes\/class.AJXP_Node.php",
        "LINE":158
      },
      {
        "FILE":"\/core\/classes\/class.AJXP_Node.php",
        "LINE":176
      },
      {
        "FILE":"\/plugins\/meta.user\/class.UserMetaManager.php",
        "LINE":193
      }
    ],
    "LISTENERS":[
      {
        "PLUGIN_ID":"index.lucene",
        "METHOD":"updateNodeIndexMeta"
      }
    ]
  },
  "node.info":{
    "DESCRIPTION":"Main hook called when loading a node. Used at various layers to enrich the node metadata, from the storage to the user metadata or the versioning.",
    "PARAMETERS":[
      {
        "NAME":"node",
        "TYPE":"AJXP_Node",
        "DESCRIPTION":"Node to load"
      },
      {
        "NAME":"context_node",
        "TYPE":"AJXP_Node",
        "DESCRIPTION":"Optionally, can pass the parent node (when node is loaded during a children loop) to carry some information for the various callbacks."
      },
      {
        "NAME":"details",
        "TYPE":"String",
        "DESCRIPTION":"A level of details that can be loaded by the node, to let some plugins skip their loading depending on this parameter. Either 'minimal' or a list of metadata to be loaded."
      }
    ],
    "PARAMETER_SAMPLE":"array(&$this, $contextNode, $details)",
    "TRIGGERS":[
      {
        "FILE":"\/core\/classes\/class.AJXP_Node.php",
        "LINE":247
      }
    ],
    "LISTENERS":[
      {
        "PLUGIN_ID":"access.fs",
        "METHOD":"loadNodeInfo"
      },
      {
        "PLUGIN_ID":"access.imap",
        "METHOD":"enrichMetadata"
      },
      {
        "PLUGIN_ID":"access.imap",
        "METHOD":"loadNodeInfo"
      },
      {
        "PLUGIN_ID":"access.webdav",
        "METHOD":"loadNodeInfo"
      },
      {
        "PLUGIN_ID":"access.hpcloud",
        "METHOD":"loadNodeInfo"
      },
      {
        "PLUGIN_ID":"access.remote_fs",
        "METHOD":"loadNodeInfo"
      },
      {
        "PLUGIN_ID":"access.dropbox",
        "METHOD":"loadNodeInfo"
      },
      {
        "PLUGIN_ID":"access.demo",
        "METHOD":"loadNodeInfo"
      },
      {
        "PLUGIN_ID":"access.ftp",
        "METHOD":"loadNodeInfo"
      },
      {
        "PLUGIN_ID":"access.smb",
        "METHOD":"loadNodeInfo"
      },
      {
        "PLUGIN_ID":"access.s3",
        "METHOD":"loadNodeInfo"
      },
      {
        "PLUGIN_ID":"access.sftp",
        "METHOD":"loadNodeInfo"
      },
      {
        "PLUGIN_ID":"editor.diaporama",
        "METHOD":"extractImageMetaData"
      },
      {
        "PLUGIN_ID":"editor.eml",
        "METHOD":"extractMimeHeaders"
      },
      {
        "PLUGIN_ID":"meta.watch",
        "METHOD":"enrichNode"
      },
      {
        "PLUGIN_ID":"meta.svn",
        "METHOD":"extractMeta"
      },
      {
        "PLUGIN_ID":"meta.simple_lock",
        "METHOD":"processLockMeta"
      },
      {
        "PLUGIN_ID":"meta.filehasher",
        "METHOD":"getFileHash"
      },
      {
        "PLUGIN_ID":"meta.user",
        "METHOD":"extractMeta"
      },
      {
        "PLUGIN_ID":"meta.exif",
        "METHOD":"extractMeta"
      },
      {
        "PLUGIN_ID":"action.share",
        "METHOD":"nodeSharedMetadata"
      },
      {
        "PLUGIN_ID":"gui.ajax",
        "METHOD":"nodeBookmarkMetadata"
      },
      {
        "PLUGIN_ID":"cypher.encfs",
        "METHOD":"filterENCFS"
      },
      {
        "PLUGIN_ID":"downloader.http",
        "METHOD":"detectDLParts"
      }
    ]
  },
  "user.before_create":{
    "DESCRIPTION":"Triggered before creating a new user.",
    "PARAMETERS":[
      {
        "NAME":"user_id",
        "TYPE":"String",
        "DESCRIPTION":"The id of the new user"
      },
      {
        "NAME":"user_pass",
        "TYPE":"String",
        "DESCRIPTION":"The password of the new user"
      },
      {
        "NAME":"is_admin",
        "TYPE":"boolean",
        "DESCRIPTION":"The id of the new user"
      }
    ],
    "PARAMETER_SAMPLE":"array($userId, $userPass, $isAdmin)",
    "TRIGGERS":[
      {
        "FILE":"\/core\/classes\/class.AuthService.php",
        "LINE":696
      }
    ],
    "LISTENERS":[
      
    ]
  },
  "user.after_create":{
    "DESCRIPTION":"Triggered after having created a new user.",
    "PARAMETERS":[
      {
        "NAME":"user_object",
        "TYPE":"AbstractAjxpUser",
        "DESCRIPTION":"The newly created user object"
      }
    ],
    "PARAMETER_SAMPLE":"array($userObject)",
    "TRIGGERS":[
      {
        "FILE":"\/core\/classes\/class.AuthService.php",
        "LINE":726
      },
      {
        "FILE":"\/plugins\/action.share\/class.ShareCenter.php",
        "LINE":1049
      }
    ],
    "LISTENERS":[
      
    ]
  },
  "user.before_delete":{
    "DESCRIPTION":"Triggered before deleting a user.",
    "PARAMETERS":[
      {
        "NAME":"user_id",
        "TYPE":"String",
        "DESCRIPTION":"The id of the new user"
      }
    ],
    "PARAMETER_SAMPLE":"array($userId)",
    "TRIGGERS":[
      {
        "FILE":"\/core\/classes\/class.AuthService.php",
        "LINE":754
      }
    ],
    "LISTENERS":[
      
    ]
  },
  "user.after_delete":{
    "DESCRIPTION":"Triggered after deleting a user.",
    "PARAMETERS":[
      {
        "NAME":"user_id",
        "TYPE":"String",
        "DESCRIPTION":"The id of the new user"
      }
    ],
    "PARAMETER_SAMPLE":"array($userId)",
    "TRIGGERS":[
      {
        "FILE":"\/core\/classes\/class.AuthService.php",
        "LINE":762
      }
    ],
    "LISTENERS":[
      
    ]
  },
  "msg.instant":{
    "DESCRIPTION":"Apply this hook with some XML content to send message to the client queue.",
    "PARAMETERS":[
      {
        "NAME":"message_content",
        "TYPE":"String",
        "DESCRIPTION":"XML content to be sent in the message"
      },
      {
        "NAME":"repository_id",
        "TYPE":"String",
        "DESCRIPTION":"Id of the repository : this message will only be transmitted to client registered to this repository"
      }
    ],
    "PARAMETER_SAMPLE":"array(\"<reload_shared_elements\/>\", ConfService::getRepository()->getId())",
    "TRIGGERS":[
      {
        "FILE":"\/plugins\/meta.quota\/class.QuotaComputer.php",
        "LINE":122
      },
      {
        "FILE":"\/plugins\/core.conf\/class.AbstractConfDriver.php",
        "LINE":501
      },
      {
        "FILE":"\/plugins\/action.share\/class.ShareCenter.php",
        "LINE":173
      },
      {
        "FILE":"\/plugins\/action.share\/class.ShareCenter.php",
        "LINE":314
      }
    ],
    "LISTENERS":[
      {
        "PLUGIN_ID":"core.mq",
        "METHOD":"sendInstantMessage"
      }
    ]
  },
  "msg.queue_notification":{
    "DESCRIPTION":"Post a notification to the queue. It will be directly processed or not (triggering a msg.notification event)",
    "PARAMETERS":[
      {
        "NAME":"notification",
        "TYPE":"AJXP_Notification",
        "DESCRIPTION":"Notification object filled with content, author, date, etc"
      }
    ],
    "TRIGGERS":[
      {
        "FILE":"\/plugins\/core.notifications\/class.AJXP_NotificationCenter.php",
        "LINE":346
      }
    ],
    "LISTENERS":[
      {
        "PLUGIN_ID":"core.mq",
        "METHOD":"sendToQueue"
      }
    ],
    "PARAMETER_SAMPLE":"array($notif)"
  },
  "msg.notification":{
    "DESCRIPTION":"Process a notification from the queue",
    "PARAMETERS":[
      {
        "NAME":"notification",
        "TYPE":"AJXP_Notification",
        "DESCRIPTION":"Notification object filled with content, author, date, etc"
      }
    ],
    "PARAMETER_SAMPLE":"array(&$notification)",
    "TRIGGERS":[
      {
        "FILE":"\/plugins\/core.mq\/class.MqManager.php",
        "LINE":67
      },
      {
        "FILE":"\/plugins\/core.mq\/class.MqManager.php",
        "LINE":79
      }
    ],
    "LISTENERS":[
      {
        "PLUGIN_ID":"core.notifications",
        "METHOD":"persistNotificationToAlerts"
      },
      {
        "PLUGIN_ID":"core.mailer",
        "METHOD":"processNotification"
      }
    ]
  },
  "node.before_path_change":{
    "DESCRIPTION":"Triggered before a node is about to be moved. Neither its metadata or content are will be changed.",
    "PARAMETERS":[
      {
        "NAME":"old_node",
        "TYPE":"AJXP_Node",
        "DESCRIPTION":"Node pointing to the original path"
      },
      {
        "NAME":"new_node",
        "TYPE":"AJXP_Node",
        "DESCRIPTION":"Node pointing to the target path"
      },
      {
        "NAME":"copy",
        "TYPE":"boolean",
        "DESCRIPTION":"Whether this is a copy (true) or a move (false)"
      }
    ],
    "PARAMETER_SAMPLE":"array(new AJXP_Node($origFile))",
    "TRIGGERS":[
      {
        "FILE":"\/plugins\/access.sftp\/class.sftpAccessDriver.php",
        "LINE":148
      },
      {
        "FILE":"\/plugins\/downloader.http\/class.HttpDownloader.php",
        "LINE":147
      },
      {
        "FILE":"\/plugins\/access.fs\/class.fsAccessDriver.php",
        "LINE":1400
      },
      {
        "FILE":"\/plugins\/access.fs\/class.fsAccessDriver.php",
        "LINE":1575
      },
      {
        "FILE":"\/plugins\/access.fs\/class.fsAccessDriver.php",
        "LINE":1592
      },
      {
        "FILE":"\/plugins\/access.fs\/class.fsAccessDriver.php",
        "LINE":1727
      },
      {
        "FILE":"\/plugins\/access.fs\/class.fsAccessDriver.php",
        "LINE":1753
      },
      {
        "FILE":"\/plugins\/access.fs\/class.fsAccessDriver.php",
        "LINE":1817
      },
      {
        "FILE":"\/plugins\/access.fs\/class.fsAccessDriver.php",
        "LINE":1872
      },
      {
        "FILE":"\/plugins\/core.access\/class.AbstractAccessDriver.php",
        "LINE":140
      }
    ],
    "LISTENERS":[
      {
        "PLUGIN_ID":"meta.simple_lock",
        "METHOD":"checkFileLock"
      },
      {
        "PLUGIN_ID":"meta.quota",
        "METHOD":"precheckQuotaUsage"
      },
      {
        "PLUGIN_ID":"action.share",
        "METHOD":"updateNodeSharedData"
      }
    ]
  },
  "node.change":{
    "DESCRIPTION":"Triggered after a node content is updated.",
    "PARAMETERS":[
      {
        "NAME":"node",
        "TYPE":"AJXP_Node",
        "DESCRIPTION":"New node pointing to the original path"
      }
    ],
    "PARAMETER_SAMPLE":"array(&$node)",
    "TRIGGERS":[
      {
        "FILE":"\/plugins\/editor.zoho\/class.ZohoEditor.php",
        "LINE":158
      },
      {
        "FILE":"\/plugins\/access.sftp\/class.sftpAccessDriver.php",
        "LINE":151
      },
      {
        "FILE":"\/plugins\/access.sftp\/class.sftpAccessDriver.php",
        "LINE":160
      },
      {
        "FILE":"\/plugins\/downloader.http\/class.HttpDownloader.php",
        "LINE":149
      },
      {
        "FILE":"\/plugins\/downloader.http\/class.HttpDownloader.php",
        "LINE":151
      },
      {
        "FILE":"\/plugins\/editor.pixlr\/class.PixlrEditor.php",
        "LINE":113
      },
      {
        "FILE":"\/plugins\/access.fs\/class.fsAccessDriver.php",
        "LINE":289
      },
      {
        "FILE":"\/plugins\/access.fs\/class.fsAccessDriver.php",
        "LINE":358
      },
      {
        "FILE":"\/plugins\/access.fs\/class.fsAccessDriver.php",
        "LINE":660
      },
      {
        "FILE":"\/plugins\/access.fs\/class.fsAccessDriver.php",
        "LINE":693
      },
      {
        "FILE":"\/plugins\/access.fs\/class.fsAccessDriver.php",
        "LINE":1402
      },
      {
        "FILE":"\/plugins\/access.fs\/class.fsAccessDriver.php",
        "LINE":1456
      },
      {
        "FILE":"\/plugins\/access.fs\/class.fsAccessDriver.php",
        "LINE":1489
      },
      {
        "FILE":"\/plugins\/access.fs\/class.fsAccessDriver.php",
        "LINE":1523
      },
      {
        "FILE":"\/plugins\/access.fs\/class.fsAccessDriver.php",
        "LINE":1586
      },
      {
        "FILE":"\/plugins\/access.fs\/class.fsAccessDriver.php",
        "LINE":1595
      },
      {
        "FILE":"\/plugins\/access.fs\/class.fsAccessDriver.php",
        "LINE":1612
      },
      {
        "FILE":"\/plugins\/access.fs\/class.fsAccessDriver.php",
        "LINE":1807
      },
      {
        "FILE":"\/plugins\/access.fs\/class.fsAccessDriver.php",
        "LINE":1874
      },
      {
        "FILE":"\/plugins\/core.access\/class.AbstractAccessDriver.php",
        "LINE":166
      },
      {
        "FILE":"\/plugins\/core.access\/class.AbstractAccessDriver.php",
        "LINE":174
      },
      {
        "FILE":"\/plugins\/access.ftp\/class.ftpAccessDriver.php",
        "LINE":108
      }
    ],
    "LISTENERS":[
      {
        "PLUGIN_ID":"editor.diaporama",
        "METHOD":"removeThumbnail"
      },
      {
        "PLUGIN_ID":"editor.imagick",
        "METHOD":"deleteImagickCache"
      },
      {
        "PLUGIN_ID":"meta.watch",
        "METHOD":"processChangeHook"
      },
      {
        "PLUGIN_ID":"meta.git",
        "METHOD":"changesHook"
      },
      {
        "PLUGIN_ID":"meta.filehasher",
        "METHOD":"invalidateHash"
      },
      {
        "PLUGIN_ID":"meta.user",
        "METHOD":"updateMetaLocation"
      },
      {
        "PLUGIN_ID":"meta.quota",
        "METHOD":"recomputeQuotaUsage"
      },
      {
        "PLUGIN_ID":"core.notifications",
        "METHOD":"persistChangeHookToFeed"
      },
      {
        "PLUGIN_ID":"core.mq",
        "METHOD":"publishNodeChange"
      },
      {
        "PLUGIN_ID":"index.lucene",
        "METHOD":"updateNodeIndex"
      }
    ]
  },
  "node.before_create":{
    "DESCRIPTION":"Triggered before creating a node at a given location.",
    "PARAMETERS":[
      {
        "NAME":"node",
        "TYPE":"AJXP_Node",
        "DESCRIPTION":"A simple node containing the target path to create. Callback can trigger a Break Exception to prevent the node creation."
      }
    ],
    "PARAMETER_SAMPLE":"array($destFile)",
    "TRIGGERS":[
      {
        "FILE":"\/plugins\/downloader.http\/class.HttpDownloader.php",
        "LINE":105
      },
      {
        "FILE":"\/plugins\/access.fs\/class.fsAccessDriver.php",
        "LINE":283
      },
      {
        "FILE":"\/plugins\/access.fs\/class.fsAccessDriver.php",
        "LINE":485
      },
      {
        "FILE":"\/plugins\/access.fs\/class.fsAccessDriver.php",
        "LINE":600
      },
      {
        "FILE":"\/plugins\/access.fs\/class.fsAccessDriver.php",
        "LINE":1464
      },
      {
        "FILE":"\/plugins\/access.fs\/class.fsAccessDriver.php",
        "LINE":1541
      },
      {
        "FILE":"\/plugins\/core.access\/class.AbstractAccessDriver.php",
        "LINE":150
      }
    ],
    "LISTENERS":[
      {
        "PLUGIN_ID":"meta.quota",
        "METHOD":"precheckQuotaUsage"
      }
    ]
  },
  "node.read":{
    "DESCRIPTION":"Triggered when either reading the content of a leaf (file) node, or when browsing the content of collection (folder) node.",
    "PARAMETERS":[
      {
        "NAME":"node",
        "TYPE":"AJXP_Node",
        "DESCRIPTION":"The node opened."
      }
    ],
    "PARAMETER_SAMPLE":"array(&$parentAjxpNode)",
    "TRIGGERS":[
      {
        "FILE":"\/core\/classes\/sabredav\/ajaxplorer\/class.AJXP_Sabre_Collection.php",
        "LINE":173
      },
      {
        "FILE":"\/core\/classes\/sabredav\/ajaxplorer\/class.AJXP_Sabre_NodeLeaf.php",
        "LINE":75
      },
      {
        "FILE":"\/plugins\/editor.zoho\/class.ZohoEditor.php",
        "LINE":66
      },
      {
        "FILE":"\/plugins\/editor.browser\/class.FileMimeSender.php",
        "LINE":107
      },
      {
        "FILE":"\/plugins\/editor.pixlr\/class.PixlrEditor.php",
        "LINE":52
      },
      {
        "FILE":"\/plugins\/editor.video\/class.VideoReader.php",
        "LINE":110
      },
      {
        "FILE":"\/plugins\/editor.audio\/class.AudioPreviewer.php",
        "LINE":65
      },
      {
        "FILE":"\/plugins\/editor.imagick\/class.IMagickPreviewer.php",
        "LINE":76
      },
      {
        "FILE":"\/plugins\/editor.diaporama\/class.ImagePreviewer.php",
        "LINE":88
      },
      {
        "FILE":"\/plugins\/editor.eml\/class.EmlParser.php",
        "LINE":55
      },
      {
        "FILE":"\/plugins\/access.fs\/class.fsAccessDriver.php",
        "LINE":216
      },
      {
        "FILE":"\/plugins\/access.fs\/class.fsAccessDriver.php",
        "LINE":243
      },
      {
        "FILE":"\/plugins\/access.fs\/class.fsAccessDriver.php",
        "LINE":324
      },
      {
        "FILE":"\/plugins\/access.fs\/class.fsAccessDriver.php",
        "LINE":744
      }
    ],
    "LISTENERS":[
      {
        "PLUGIN_ID":"meta.watch",
        "METHOD":"processReadHook"
      }
    ]
  },
  "ajxp_conf.list_config_nodes":{
    "DESCRIPTION":"Hook used to gather the various nodes displayed in the 'Settings' panel hierarchy.",
    "PARAMETERS":[
      {
        "NAME":"rootNodes",
        "TYPE":"Array",
        "DESCRIPTION":"The array containing all first-level nodes of the tree, callbacks can append some nodes here."
      }
    ],
    "PARAMETER_SAMPLE":"array(&$rootNodes)",
    "TRIGGERS":[
      {
        "FILE":"\/plugins\/access.ajxp_conf\/class.ajxp_confAccessDriver.php",
        "LINE":285
      }
    ],
    "LISTENERS":[
      {
        "PLUGIN_ID":"action.scheduler",
        "METHOD":"placeConfigNode"
      }
    ]
  },
  "node.before_change":{
    "DESCRIPTION":"Hook triggered before the content of a node is updated",
    "PARAMETERS":[
      {
        "NAME":"node",
        "TYPE":"AJXP_Node",
        "DESCRIPTION":"Node that will be updated"
      }
    ],
    "PARAMETER_SAMPLE":"array(&$node)",
    "TRIGGERS":[
      {
        "FILE":"\/plugins\/editor.zoho\/class.ZohoEditor.php",
        "LINE":143
      },
      {
        "FILE":"\/plugins\/editor.pixlr\/class.PixlrEditor.php",
        "LINE":82
      },
      {
        "FILE":"\/plugins\/editor.pixlr\/class.PixlrEditor.php",
        "LINE":103
      },
      {
        "FILE":"\/plugins\/access.fs\/class.fsAccessDriver.php",
        "LINE":343
      },
      {
        "FILE":"\/plugins\/access.fs\/class.fsAccessDriver.php",
        "LINE":598
      },
      {
        "FILE":"\/plugins\/access.fs\/class.fsAccessDriver.php",
        "LINE":602
      },
      {
        "FILE":"\/plugins\/access.fs\/class.fsAccessDriver.php",
        "LINE":1427
      },
      {
        "FILE":"\/plugins\/access.fs\/class.fsAccessDriver.php",
        "LINE":1466
      },
      {
        "FILE":"\/plugins\/access.fs\/class.fsAccessDriver.php",
        "LINE":1815
      },
      {
        "FILE":"\/plugins\/meta.user\/class.UserMetaManager.php",
        "LINE":179
      },
      {
        "FILE":"\/plugins\/access.ftp\/class.ftpAccessDriver.php",
        "LINE":95
      }
    ],
    "LISTENERS":[
      {
        "PLUGIN_ID":"meta.simple_lock",
        "METHOD":"checkFileLock"
      },
      {
        "PLUGIN_ID":"meta.quota",
        "METHOD":"precheckQuotaUsage"
      }
    ]
  },
  "dl.localname":{
    "DESCRIPTION":"Hook triggered just before triggering a browser download, with the ability to change the name as it will be sent to the user.",
    "PARAMETERS":[
      {
        "NAME":"name",
        "TYPE":"String",
        "DESCRIPTION":"Current local name to be updated."
      }
    ],
    "PARAMETER_SAMPLE":"array($origFile, &$localName, $origWrapperData[\"classname\"])",
    "TRIGGERS":[
      {
        "FILE":"\/plugins\/access.fs\/class.fsAccessDriver.php",
        "LINE":212
      },
      {
        "FILE":"\/plugins\/core.access\/class.AbstractAccessDriver.php",
        "LINE":138
      }
    ],
    "LISTENERS":[
      {
        "PLUGIN_ID":"access.imap",
        "METHOD":"attachmentDLName"
      }
    ]
  },
  "version.commit_file":{
    "DESCRIPTION":"Hook triggered to force a versioning mechanism to commit a version of a file.",
    "PARAMETERS":[
      {
        "NAME":"meta_file",
        "TYPE":"String",
        "DESCRIPTION":"Metadata file"
      },
      {
        "NAME":"node",
        "TYPE":"AJXP_Node",
        "DESCRIPTION":"Node that will be updated"
      }
    ],
    "PARAMETER_SAMPLE":"array($metaFile, $ajxpNode)",
    "TRIGGERS":[
      {
        "FILE":"\/plugins\/metastore.serial\/class.SerialMetaStore.php",
        "LINE":260
      }
    ],
    "LISTENERS":[
      {
        "PLUGIN_ID":"meta.svn",
        "METHOD":"commitFile"
      }
    ]
  }
}