The "FileListContext" provides steps to interact with and check the
behaviour of a file list. However, the "FileListContext" does not know
the right file list ancestor that has to be used by the file list steps,
so until now the file list steps were explicitly wired to the Files app
and they could be used only in that case.
Instead of duplicating the steps with a slightly different name (for
example, "I create a new folder named :folderName in the public shared
folder" instead of "I create a new folder named :folderName") the steps
were generalized; now contexts that "know" that certain file list
ancestor has to be used by the FileListContext steps performed by
certain actor from that point on (until changed again) set it
explicitly. For example, when the current page is the Files app then the
ancestor of the file list is the main view of the current section of the
Files app, but when the current page is a shared link then the ancestor
is set to null (because there will be just one file list, and thus its
ancestor is not relevant to differentiate between instances)
A helper trait, "FileListAncestorSetter", was introduced to reduce the
boilerplate needed to set the file list ancestor from other contexts.
Signed-off-by: Daniel Calviño Sánchez <danxuliu@gmail.com>
The file list is used in other places besides the Files app (for
example, the File sharing app); in those cases the locators for the file
list elements are the same, but not for the ancestor of the file list.
To make possible to reuse the file list locators in those cases too now
they receive the ancestor to use.
Note that the locators for the file actions menu were not using an
ancestor locator because it is expected that there is only one file
actions menu at a time in the whole page; that may change in the future,
but for the time being it is a valid assumption and thus the ancestor
was not added to those locators in this commit.
Although the locators were generalized the steps themselves still use
the "FilesAppContext::currentSectionMainView" locator as ancestor; the
steps will be generalized in a following commit.
Signed-off-by: Daniel Calviño Sánchez <danxuliu@gmail.com>
Besides the extraction some minor adjustments (sorting locators for file
action menu entries to reflect the order of the menu entries in the UI,
moving parametrized locators like "createMenuItemFor" above the locators
that use them and placing "descendantOf" calls always in a new line)
were made too.
Signed-off-by: Daniel Calviño Sánchez <danxuliu@gmail.com>
Avoids errors when the size exceeds MAX_INT because of the cast to int. Better cast it to float to avoid this.
Signed-off-by: Morris Jobke <hey@morrisjobke.de>
Fixes#8705
If the file does not exist (for whatever reason). It is never cached. No
matter what the depscache etc tell you.
Signed-off-by: Roeland Jago Douma <roeland@famdouma.nl>
NoSuchElement exceptions are sometimes thrown instead of
StaleElementReference exceptions. This can happen when the Selenium2
driver for Mink performs an action on an element through the WebDriver
session instead of directly through the WebDriver element. In that case,
if the element with the given ID does not exist, a NoSuchElement
exception would be thrown instead of a StaleElementReference exception,
so those cases are handled like StaleElementReference exceptions.
Signed-off-by: Daniel Calviño Sánchez <danxuliu@gmail.com>
MoveTargetOutOfBounds exceptions are sometimes thrown instead of
ElementNotVisible exceptions. This can happen when the Selenium2 driver
for Mink moves the cursor on an element using the "moveto" method of the
Webdriver session, for example, before clicking on an element. In that
case, if the element is not visible, "moveto" would throw a
MoveTargetOutOfBounds exception instead of an ElementNotVisible
exception, so those cases are handled like ElementNotVisible exceptions.
Note that MoveTargetOutOfBounds exceptions could be thrown too if the
element was visible but "out of reach"; there is no problem in handling
those cases as if the element was not visible, as the exception will be
thrown again anyway once it is verified that the element is indeed
visible.
Signed-off-by: Daniel Calviño Sánchez <danxuliu@gmail.com>
Nextcloud 13RC4, error in logfile, triggered by "occ config:list":
Invalid argument supplied for foreach() at lib/private/AppConfig.php#297
PHP Undefined index: workflowengine at lib/private/AppConfig.php#297
Fix: Check if index exists in array before using it.
The check in URLGenerator.php#169 and Server.php#945 are different and thus the DI container could return a \OC_Defaults object which does not provide the wanted method caising a PHP error.
Fixes#8420
Signed-off-by: Morris Jobke <hey@morrisjobke.de>
MySQL databases with the ANSI_QUOTES mode enabled treat " as an identifier
quote (see https://dev.mysql.com/doc/refman/5.7/en/sql-mode.html#sqlmode_ansi_quotes).
So for such databases the 'occ upgrade' fails with an error message like this:
... unknown column 'oc_*' in where clause.
This fix replaces the doulbe quotes with single quotes that should be always
used in MySQL queries to quote literal strings.
Signed-off-by: Robin Müller <robin.mueller@1und1.de>
if file_get_contents fails remove the file. And traverse up the tree
checking if the other folders are there.
Signed-off-by: Roeland Jago Douma <roeland@famdouma.nl>
test creating comments with numeric user ids
Signed-off-by: Arthur Schiwon <blizzz@arthur-schiwon.de>
fix creating comments when file is accessible to users with numeric ids
Signed-off-by: Arthur Schiwon <blizzz@arthur-schiwon.de>
tests for systemtags related to numeric user ids
Signed-off-by: Arthur Schiwon <blizzz@arthur-schiwon.de>
fix systemtags event with numeric user ids
Signed-off-by: Arthur Schiwon <blizzz@arthur-schiwon.de>
Menu and home are not always visible; home is always visible, but menu
is shown only when needed.
Signed-off-by: Daniel Calviño Sánchez <danxuliu@gmail.com>
"getTotalWidth" is not more accurate; it is simply not clamped.
Moreover, "width/outerWidth" could be used in tests too, and also even
if "getTotalWidth" could be used in tests while others not that would
not be something to be stated in the API documentation, but in a
comment.
Signed-off-by: Daniel Calviño Sánchez <danxuliu@gmail.com>
After the changes in the previous commit "_showCrumb" no longer shows
the menu, only the same crumb that was hidden by the last call to
"_hideCrumb". Therefore, if the crumb was hidden because it did not fit
there is no need to try to show it again, as it will still not fit.
Moreover, the calculated width for a hidden element is not always
accurate; in some cases the calculated width is lower than the actual
width (it happens, for example, when using a background image like the
"Share" icon), which causea the crumb to be shown even if there is not
enough room, which in the end causes the siblings to overflow the
contents.
No unit tests for this one, though; you will have to trust me on this,
sorry ;-)
Signed-off-by: Daniel Calviño Sánchez <danxuliu@gmail.com>
The crumb for the menu was shown like any other crumb when calling
"_showCrumb", but it was also shown when other crumbs were hidden
without taking into account the available width. This caused several
related problems, like the breadcrumbs taking too much space when the
menu was sometimes shown after the rest of the crumbs were adjusted to
the available width, or the menu being shown instead of the last crumb
even if there was room for it when the available width was increased.
Now the menu is always hidden before starting the resizing of the crumbs
to ensure that whether it was previously shown or not does not affect
the result. In a similar way, the menu will no longer be shown by
"_showCrumb", as it is not a regular crumb that has to be shown simply
if there is enough room. The menu is now shown as soon as any other
crumb is hidden; this ensures that the menu width will be taken into
account in further width checks. As when _updateMenu" is called it no
longer needs to take care of showing the menu this fixes the issue
revealed when fixing the test setup in the previous commit.
Finally, this implicitly fixes the failure in the breadcrumbs tests when
run on Firefox, as it was caused by the menu interfering in the
calculations of the other crumbs when increasing the width.
Signed-off-by: Daniel Calviño Sánchez <danxuliu@gmail.com>
The "Shows only items not in the breadcrumb" test was failing when run
on Firefox, but not on PhantomJS. This was caused by the differences in
the starting width between both browsers and an incorrect setup of the
test (the width set for the crumbs was overriden when the breadcrumbs
were rendered again, and the breadcrumb was resized to 300 from an
indeterminate initial width).
Now the crumbs are rendered and then its width, padding and margin are
set to a known value. Then it is resized to 1000px, which ensures that
there will be enough room for all the crumbs and thus the menu will be
hidden, and finally it is resized to 300, which causes the middle crumb
to be hidden and the menu to be shown.
Note, however, that the test now always fails, no matter if it is run on
PhantomJS or on Firefox; if the menu crumb is hidden when "_updateMenu"
is called it will show it, but it will also wrongly try to add the menu
itself to the menu. As the "crumb-id" of the menu crumb is "-1" this
causes the last regular crumb to be added to the menu. This will be
fixed with other related issues in the next commit.
Signed-off-by: Daniel Calviño Sánchez <danxuliu@gmail.com>
When calculating the total width of the crumbs only its padding was
taken into account; now the margin is too. In a similar way, before
showing a crumb only its width was taken into account; now its padding
and margin are taken into account too.
Signed-off-by: Daniel Calviño Sánchez <danxuliu@gmail.com>
This ensures that the resize tests do not depend on the values set in
the CSS files.
Note that this change causes a test to fail with Firefox, but not with
PhantomJS. This is due to a difference in the starting width used by
Firefox and by PhantomJS, and it will be fixed in a following commit.
Signed-off-by: Daniel Calviño Sánchez <danxuliu@gmail.com>
When the parent element of the breadcrumbs was resized to a larger width
and the siblings of the breadcrumbs expanded to fill all the available
width some crumbs could be hidden even if there was enough room for
them. The reason was that the width of the siblings being used to
calculate the available width for the breadcrumbs was the expanded width
of the siblings. Now as many crumbs as possible (that is, fitting in the
parent, no matter the siblings) are first shown so the expanding
siblings are compressed before calculating the available width.
Due to the lack of support for flexboxes in PhantomJS the related unit
test is skipped; it has to be run in other browser, like Firefox.
Signed-off-by: Daniel Calviño Sánchez <danxuliu@gmail.com>
Other apps could add elements to the controls outside the creatable
actions div (for example, the button to switch to the gallery), so the
widths of all the visible siblings of the breadcrumbs have to be taken
into account in the size calculations.
Signed-off-by: Daniel Calviño Sánchez <danxuliu@gmail.com>
There are some differences in width handling between the browsers used
to run the tests, most likely due to their support (or lack of) of
certain CSS features: PhantomJS requires "width" to be set (probably
because it does not handle flex displays and treats it like a block, so
"min-width" does not matter in this case), while Firefox requires
"min-width" to be set (otherwise the children of "#controls" could be
compressed due to its use of flex display and the elements would end
with a different width than the one needed for the tests). Due to all
that the width of the breadcrumb siblings must be specified in the tests
using both "width" and "min-width".
Signed-off-by: Daniel Calviño Sánchez <danxuliu@gmail.com>
There is no need to call "setDirectory" again in resize tests; it is
enough to simply resize them (and isolates them better to just test the
resizing behaviour).
Signed-off-by: Daniel Calviño Sánchez <danxuliu@gmail.com>
The "usedWidth" attribute was not used elsewhere outside the "_resize"
method, so it was replaced with a local variable. Moreover, it was also
renamed to a more suitable name ("availableWidth").
Signed-off-by: Daniel Calviño Sánchez <danxuliu@gmail.com>
Setting the width of the parent element of the breadcrumbs and then
explicitly calling "_resize" is enough to test the resizing behaviour.
This makes possible to remove the "setMaxWidth" method and its related
code, which was used only for testing purposes.
Signed-off-by: Daniel Calviño Sánchez <danxuliu@gmail.com>
The div that contains the elements related to the creation of new files,
and thus the upload button, is always present in the DOM; it is hidden
or shown based on the folder permissions by adding or removing the
"hidden" CSS class. However, as the other CSS classes for the div are
"actions" and "creatable" and a "display: flex" rule was defined for
".actions.creatable" below the "display: none" rule for
".actions.hidden" the last one took precedence and the div ended being
always visible, even if the "hidden" CSS class was set. Now the rules
for the ".actions.hidden" selector are defined below the rules for the
".actions.creatable" selector and thus the "display: none" rule is
applied as expected.
Signed-off-by: Daniel Calviño Sánchez <danxuliu@gmail.com>
Currently, the theming app assumes it's in the serverroot. However, with
Nextcloud's flexibility regarding configurable app paths, this is not a
safe assumption to make. If it happens to be an incorrect assumption,
the theming app fails to work.
Instead of relying on the serverroot, just use the path from the
AppManager and utilize relative paths for assets from there.
Fix#8462
Signed-off-by: Kyle Fazzari <kyrofa@ubuntu.com>
* adds a 107 error code together with the hint of the exception
* logs the exception as warning
* fixes#7946
Signed-off-by: Morris Jobke <hey@morrisjobke.de>
This fixes#8451 where the first character is a non-ASCII character. The `$string[0]` notation only extracted one byte and thus resulting in an invalid code. The `mb_strtoupper` method also allows to convert characters independently from the current locale on the server.
See also http://php.net/manual/en/function.mb-strtoupper.php
Signed-off-by: Morris Jobke <hey@morrisjobke.de>
1. Local users should not be returned when searching for empty string
2. The limit of the response should be respected
Signed-off-by: Joas Schilling <coding@schilljs.com>
Instead of checking that the list contains one comment it is now checked
that a comment with certain message is visible. This makes the step (and
the locator) more reusable in future tests and also simplifies the code.
Signed-off-by: Daniel Calviño Sánchez <danxuliu@gmail.com>
Depending on the previous steps the new comment field may be already
shown or not when the step to create a new comment is executed.
Therefore, the timeout was increased from 2 to the "standard" 10 seconds
used in other tests.
If the new comment field was found there is no need to use a timeout
when looking for the new comment button; it is either there or not, it
will not appear after some time.
Signed-off-by: Daniel Calviño Sánchez <danxuliu@gmail.com>
The locators are moved above the step definitions for consistency with
other context files; besides that I made some minor adjustments for
consistency too in the locator descriptions and identation, and moved
the locators for ".newCommentRow" descendants together.
Signed-off-by: Daniel Calviño Sánchez <danxuliu@gmail.com>
Fixes#8047
If we can't find the file by id there we should just return null instead
of trying to get the jailed path of null.
Signed-off-by: Roeland Jago Douma <roeland@famdouma.nl>
Exposing the encrypted property is required for E2E. However, there is
no need to expose this on files as then it is server side encryption
(which the clients don't care about).
Better to not confuse the output.
Signed-off-by: Roeland Jago Douma <roeland@famdouma.nl>
* We first try the email as username but this fails
* Then we get the uid from the email and try again
We should not log the first attempt since it polutes the log with failed
login attempts while the login actually is valid.
Signed-off-by: Roeland Jago Douma <roeland@famdouma.nl>
The clipboard icon in shared links appears either directly on the link
input field or, if any social sharing app is enabled, in a menu. The
clipboard icon uses the same CSS rules as other icons (like the
information icon) to be posioned on the end of the input field, and
those rules have to be "cancelled" when the icon is shown in the menu.
Fixes#7990
Signed-off-by: Daniel Calviño Sánchez <danxuliu@gmail.com>
* delete it
* throw a NotFound Exception
- This should a proper 404 to the user
- Next time it is then regenerated
Signed-off-by: Roeland Jago Douma <roeland@famdouma.nl>
comments should compile mentions also if done by author
it is used by clients for formatting reasons, there is no reason not format
the author if her handle is included in the comment body.
It is unrelated to sending out notifications.
Signed-off-by: Arthur Schiwon <blizzz@arthur-schiwon.de>
do not offer the handle of the current user for auto completion
Signed-off-by: Arthur Schiwon <blizzz@arthur-schiwon.de>
add types to php doc
Signed-off-by: Arthur Schiwon <blizzz@arthur-schiwon.de>
"%1$s commented on %2$s":"%1$s коментиран за %2$s",
"{author} commented on {file}":"{author} коментира за {file}",
"<strong>Comments</strong> for files":"<strong>Коментари</strong> за файлове",
"You were mentioned on “%s”, in a comment by a user that has since been deleted":"Бяхте споменат/а на “%s”, в коментар от потребител, който вече е изтрит",
"You were mentioned on “{file}”, in a comment by a user that has since been deleted":"Бяхте споменат/а към “{file}”, в коментар от потребител, който вече е изтрит",
"%1$s mentioned you in a comment on “%2$s”":"%1$s те спомена в коментар за “%2$s”",
"{user} mentioned you in a comment on “{file}”":"{user} те спомена в коментар за “{file}”",
"%1$s commented on %2$s":"%1$s коментиран за %2$s",
"{author} commented on {file}":"{author} коментира за {file}",
"<strong>Comments</strong> for files":"<strong>Коментари</strong> за файлове",
"You were mentioned on “%s”, in a comment by a user that has since been deleted":"Бяхте споменат/а на “%s”, в коментар от потребител, който вече е изтрит",
"You were mentioned on “{file}”, in a comment by a user that has since been deleted":"Бяхте споменат/а към “{file}”, в коментар от потребител, който вече е изтрит",
"%1$s mentioned you in a comment on “%2$s”":"%1$s те спомена в коментар за “%2$s”",
"{user} mentioned you in a comment on “{file}”":"{user} те спомена в коментар за “{file}”",
"Allowed characters {count} of {max}":"{count} caràcters permesos de {max}",
"Error occurred while retrieving comment with id {id}":"Hi ha hagut un error en extraure el comentari amb id {id}",
"Error occurred while updating comment with id {id}":"Hi ha hagut un error en actualitzar el comentari amb id {id}",
"Error occurred while posting comment":"Hi ha hagut un error en publicar el comentari",
"_%n unread comment_::_%n unread comments_":["%n comentari no llegit","%n comentaris no llegits"],
@@ -25,6 +24,8 @@ OC.L10N.register(
"%1$s commented on %2$s":"%1$s ha comentat a %2$s",
"{author} commented on {file}":"{author} ha comentat a {file}",
"<strong>Comments</strong> for files":"<strong>Comentaris</strong> per arxius",
"You were mentioned on “%s”, in a comment by a user that has since been deleted":"Has estat mencionat a \"%s\" en un comentari d'un usuari que ja no existeix",
"You were mentioned on “{file}”, in a comment by a user that has since been deleted":"Has estat mencionat a \"{file}\" en un comentari d'un usuari que ja no existeix",
"%1$s mentioned you in a comment on “%2$s”":"%1$s us ha nomenat en un comentari a “%2$s”",
"{user} mentioned you in a comment on “{file}”":"{user} us ha nomenat en un comentari de “{file}”",
"Allowed characters {count} of {max}":"{count} caràcters permesos de {max}",
"Error occurred while retrieving comment with id {id}":"Hi ha hagut un error en extraure el comentari amb id {id}",
"Error occurred while updating comment with id {id}":"Hi ha hagut un error en actualitzar el comentari amb id {id}",
"Error occurred while posting comment":"Hi ha hagut un error en publicar el comentari",
"_%n unread comment_::_%n unread comments_":["%n comentari no llegit","%n comentaris no llegits"],
@@ -23,6 +22,8 @@
"%1$s commented on %2$s":"%1$s ha comentat a %2$s",
"{author} commented on {file}":"{author} ha comentat a {file}",
"<strong>Comments</strong> for files":"<strong>Comentaris</strong> per arxius",
"You were mentioned on “%s”, in a comment by a user that has since been deleted":"Has estat mencionat a \"%s\" en un comentari d'un usuari que ja no existeix",
"You were mentioned on “{file}”, in a comment by a user that has since been deleted":"Has estat mencionat a \"{file}\" en un comentari d'un usuari que ja no existeix",
"%1$s mentioned you in a comment on “%2$s”":"%1$s us ha nomenat en un comentari a “%2$s”",
"{user} mentioned you in a comment on “{file}”":"{user} us ha nomenat en un comentari de “{file}”",
"%1$s commented on %2$s":"%1$s kommentoi kohdetta %2$s",
"{author} commented on {file}":"{author} kommentoi tiedostoa{file}",
"<strong>Comments</strong> for files":"Tiedostojen <strong>kommentit</strong>",
"You were mentioned on “{file}”, in a comment by a user that has since been deleted":"Sinut mainittiin tiedoston “{file}” kommentissa käyttäjän toimesta, joka on sittemmin poistettu",
"%1$s mentioned you in a comment on “%2$s”":"%1$s mainitsi sinut kommentissa “%2$s”",
"{user} mentioned you in a comment on “{file}”":"{user} mainitsi sinut tiedoston\"{file}\" kommentissa",
"%1$s commented on %2$s":"%1$s kommentoi kohdetta %2$s",
"{author} commented on {file}":"{author} kommentoi tiedostoa{file}",
"<strong>Comments</strong> for files":"Tiedostojen <strong>kommentit</strong>",
"You were mentioned on “{file}”, in a comment by a user that has since been deleted":"Sinut mainittiin tiedoston “{file}” kommentissa käyttäjän toimesta, joka on sittemmin poistettu",
"%1$s mentioned you in a comment on “%2$s”":"%1$s mainitsi sinut kommentissa “%2$s”",
"{user} mentioned you in a comment on “{file}”":"{user} mainitsi sinut tiedoston\"{file}\" kommentissa",
"%1$s commented on %2$s":"%1$s setti inn athugasemd um %2$s",
"{author} commented on {file}":"{author} setti inn athugasemd við {file}",
"<strong>Comments</strong> for files":"<strong>Athugasemdir</strong> við skrár",
"You were mentioned on “%s”, in a comment by a user that has since been deleted":"Minnst var á þig í “%s”, í athugasemd frá notanda sem síðan þá hefur verið eytt",
"You were mentioned on “{file}”, in a comment by a user that has since been deleted":"Minnst var á þig í “{file}”, í athugasemd frá notanda sem síðan þá hefur verið eytt",
"%1$s mentioned you in a comment on “%2$s”":"%1$s minntist á þig í athugasemd við “%2$s”",
"{user} mentioned you in a comment on “{file}”":"{user} minntist á þig í athugasemd við “{file}”",
"%1$s commented on %2$s":"%1$s setti inn athugasemd um %2$s",
"{author} commented on {file}":"{author} setti inn athugasemd við {file}",
"<strong>Comments</strong> for files":"<strong>Athugasemdir</strong> við skrár",
"You were mentioned on “%s”, in a comment by a user that has since been deleted":"Minnst var á þig í “%s”, í athugasemd frá notanda sem síðan þá hefur verið eytt",
"You were mentioned on “{file}”, in a comment by a user that has since been deleted":"Minnst var á þig í “{file}”, í athugasemd frá notanda sem síðan þá hefur verið eytt",
"%1$s mentioned you in a comment on “%2$s”":"%1$s minntist á þig í athugasemd við “%2$s”",
"{user} mentioned you in a comment on “{file}”":"{user} minntist á þig í athugasemd við “{file}”",
"No comments yet, start the conversation!":"Ingen kommetarar enno, start samtala!",
"More comments …":"Fleire kommentarar...",
"Save":"Lagra",
"Comment":"Kommentér",
"You commented":"Du kommenterte",
"%1$s commented":"%1$skommenterte",
"{author} commented":"{author} kommenterte",
"You commented on %1$s":"Du kommenterte på %1$s",
"You commented on {file}":"Du kommenterte på {file}",
"%1$s commented on %2$s":"%1$s kommenterte på %2$s",
"You were mentioned on “%s”, in a comment by a user that has since been deleted":"Du ble nemnt i \"%s\", i en kommentar av ein brukar som i ettertid har blitt sletta"
"No comments yet, start the conversation!":"Ingen kommetarar enno, start samtala!",
"More comments …":"Fleire kommentarar...",
"Save":"Lagra",
"Comment":"Kommentér",
"You commented":"Du kommenterte",
"%1$s commented":"%1$skommenterte",
"{author} commented":"{author} kommenterte",
"You commented on %1$s":"Du kommenterte på %1$s",
"You commented on {file}":"Du kommenterte på {file}",
"%1$s commented on %2$s":"%1$s kommenterte på %2$s",
"You were mentioned on “%s”, in a comment by a user that has since been deleted":"Du ble nemnt i \"%s\", i en kommentar av ein brukar som i ettertid har blitt sletta"
"%1$s commented on %2$s":"%1$s skomentował/-a %2$s",
"{author} commented on {file}":"{author} skomentował/-a w {file}",
"<strong>Comments</strong> for files":"<strong>Komentarze</strong> dla plików",
"You were mentioned on “%s”, in a comment by a user that has since been deleted":"Zostałeś/aś wspomniany/a w \"%s\" przez użytkownika, który został usunięty",
"You were mentioned on “%s”, in a comment by a user that has since been deleted":"Wspomniano Cię w \"%s\" przez użytkownika, który został usunięty",
"You were mentioned on “{file}”, in a comment by a user that has since been deleted":"Zostałeś/aś wspomniany/a w \"{file}\" w komentarzach przez użytkownika, który został usunięty",
"%1$s mentioned you in a comment on “%2$s”":"%1$s wspomniał/-a o Tobie w komentarzu “%2$s”",
"{user} mentioned you in a comment on “{file}”":"{user} wspomniał/-a o Tobie w komentarzu “{file}”",
Some files were not shown because too many files have changed in this diff
Show More
Reference in New Issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.