Circles v0.13.0 - now also brings your external contacts closer together!

Link to Appstore

- Adding emails to your Circles.

You can now add a simple mail address, or a full contact from your address book, into a circle.
Allowing your users to quickly share any folder or file to a list of local users and external mail addresses. Non local users will receive a link by mail; exactly the same than the sharebymail app.

Another notable improvement with this new release is that all shares are now done in an asynchronous process, meaning that the app should be able to handle a huge list of mails without degrading the User Experience.

- Testing and Feedback.

To keep a smooth User Experience, Circles is using it’s own (and hacky) way to execute some heavy process asynchronously.
Adminstrators are able to verify that this feature is working perfectly on their server.

From the Admin Interface, in the tab Additional setttings, you should be able to initiate a testing process:

After initiating the test, it runs for 2 minutes:


And the result is displayed, with a score:

Do not hesitate to give us feedback about your score !


- Feature: Circles Async is now available on every shares rendering the UX a lot smoother.
- Feature: The stability of Circles Async is testable from the Admin Interface.
- Feature: mail address can be added as a member of a Circle.
- Feature: contact can be added as a member of a Circle.
- Feature: When sharing a file to a Circle, all non-local member (Mail address or Contact) will receive a link to the shared files by mail. 
- Feature: the older Admin of a Circle becomes Owner if current Owner account deleted. If the Circle has no Admin, the Circle is deleted.
- api: Circles::getSharesFromCircle()/ShotgunCircles::getSharesFromCircle() returns SharingFrame[]
- Fix: Unexpected behaviour when an the account of a circle owner is removed from the cloud
- Code: Automatic DI
- Code: Compatibility NC13 collaboration search
- New Command: ./occ circles:clean
- API: The app will dispatch some events (by Vinicius Cubas Brand <>)
1 Like


I hit the update button, it took longer then usual and suddenly my Nextcloud server was in Maintenance, like never before when updating an app.
After a few minutes maintenance mode didn’t end and in the nextcloud.log I see the following messages:

{"reqId":"DDFQXyM7zIwkArrsdmKa","level":3,"time":"2017-10-19T15:07:19+02:00","remoteAddr":"[myIP]","user":"admin","app":"no app in context","method":"POST","url":"\/index.php\/settings\/ajax\/updateapp.php","message":"Exception: {\"Exception\":\"Exception\",\"Message\":\"Repair step 'OCA\\\\Circles\\\\Migration\\\\SetMemberTypeToDefault' is unknown\",\"Code\":0,\"Trace\":\"#0 \\\/var\\\/www\\\/nextcloud\\\/lib\\\/private\\\/legacy\\\/app.php(1106): OC\\\\Repair->addStep('OCA\\\\\\\\Circles\\\\\\\\Mig...')\\n#1 \\\/var\\\/www\\\/nextcloud\\\/lib\\\/private\\\/legacy\\\/app.php(1049): OC_App::executeRepairSteps('circles', Array)\\n#2 \\\/var\\\/www\\\/nextcloud\\\/lib\\\/private\\\/Installer.php(200): OC_App::updateApp('circles')\\n#3 \\\/var\\\/www\\\/nextcloud\\\/settings\\\/ajax\\\/updateapp.php(50): OC\\\\Installer->updateAppstoreApp('circles')\\n#4 \\\/var\\\/www\\\/nextcloud\\\/lib\\\/private\\\/Route\\\/Route.php(155) : runtime-created function(1): require_once('\\\/var\\\/www\\\/nextcl...')\\n#5 [internal function]: __lambda_func(NULL)\\n#6 \\\/var\\\/www\\\/nextcloud\\\/lib\\\/private\\\/Route\\\/Router.php(299): call_user_func('\\\\x00lambda_7743', Array)\\n#7 \\\/var\\\/www\\\/nextcloud\\\/lib\\\/base.php(1004): OC\\\\Route\\\\Router->match('\\\/settings\\\/ajax\\\/...')\\n#8 \\\/var\\\/www\\\/nextcloud\\\/index.php(48): OC::handleRequest()\\n#9 {main}\",\"File\":\"\\\/var\\\/www\\\/nextcloud\\\/lib\\\/private\\\/Repair.php\",\"Line\":107}","userAgent":"Mozilla\/5.0 (Windows NT 10.0; Win64; x64; rv:56.0) Gecko\/20100101 Firefox\/56.0","version":""}
{"reqId":"DDFQXyM7zIwkArrsdmKa","level":3,"time":"2017-10-19T15:07:19+02:00","remoteAddr":"[myIP]","user":"admin","app":"index","method":"POST","url":"\/index.php\/settings\/ajax\/updateapp.php","message":"Exception: {\"Exception\":\"Error\",\"Message\":\"Undefined class constant 'APP_NAME'\",\"Code\":0,\"Trace\":\"#0 \\\/var\\\/www\\\/nextcloud\\\/lib\\\/private\\\/Repair.php(89): OCA\\\\Circles\\\\Migration\\\\UsingShortenUniqueIdInsteadOfCircleId->run(Object(OC\\\\Repair))\\n#1 \\\/var\\\/www\\\/nextcloud\\\/lib\\\/private\\\/legacy\\\/app.php(1113): OC\\\\Repair->run()\\n#2 \\\/var\\\/www\\\/nextcloud\\\/lib\\\/private\\\/legacy\\\/app.php(1049): OC_App::executeRepairSteps('circles', Array)\\n#3 \\\/var\\\/www\\\/nextcloud\\\/lib\\\/private\\\/Installer.php(200): OC_App::updateApp('circles')\\n#4 \\\/var\\\/www\\\/nextcloud\\\/settings\\\/ajax\\\/updateapp.php(50): OC\\\\Installer->updateAppstoreApp('circles')\\n#5 \\\/var\\\/www\\\/nextcloud\\\/lib\\\/private\\\/Route\\\/Route.php(155) : runtime-created function(1): require_once('\\\/var\\\/www\\\/nextcl...')\\n#6 [internal function]: __lambda_func(NULL)\\n#7 \\\/var\\\/www\\\/nextcloud\\\/lib\\\/private\\\/Route\\\/Router.php(299): call_user_func('\\\\x00lambda_7743', Array)\\n#8 \\\/var\\\/www\\\/nextcloud\\\/lib\\\/base.php(1004): OC\\\\Route\\\\Router->match('\\\/settings\\\/ajax\\\/...')\\n#9 \\\/var\\\/www\\\/nextcloud\\\/index.php(48): OC::handleRequest()\\n#10 {main}\",\"File\":\"\\\/var\\\/www\\\/nextcloud\\\/apps\\\/circles\\\/lib\\\/Migration\\\/UsingShortenUniqueIdInsteadOfCircleId.php\",\"Line\":72}","userAgent":"Mozilla\/5.0 (Windows NT 10.0; Win64; x64; rv:56.0) Gecko\/20100101 Firefox\/56.0","version":""}

What should I do now?

Thanks for your report, i’ll release a fix within the next hour.

Alright, thank you!
So I can disable the maintenance mode now and simply update later to the fixed version, right?

In fact, I don’t get why there is still a reference to SetMemberTypeToDefault.

Did you edit some files by hand without reverting the rights before ?
I would try to disable Circles, remove the apps/circles/ directory, re-install Circles.

No, I didn’t change anything. Actually I was only updating and updating the app since its first appearance in the store.
I followed the other issues however while I had the same issues as other users, that with the updates my circles disappeared and re-creating them wasn’t able, because they still existed in the database. I was hoping that this is fixed now and instantly updated.

Okay, I will disable and remove the app for now and install the new version later. Thanks.

What is actually done when this test is initiated?
Are there emails sent? Would be nice to this information available close the initiate button.

The test consist in a parallel process running for 120 secondes. The parallel process is doing nothing but ticking every second to confirm it is still alive.

The score will be the maximum (5) if your process is still running at the end of the 120 seconds.


But why is a test needed?
What should an admin do, when the test result is < 5?
Should something be disabled. If this is not the case or it is not possible, but is the use to test?
(I understand that you (developer) needs the code/functionality to be tested, but from an admin point of view the test is confusing)

Add the explanation you provided in the previous updated, to the admin page, please. It makes it a little bit frightening.

If the resut is < 5, just report it here with information about your php and httpd.

I will see to provide more information in the Admin Interface.

@Cult Hi, I’m confused about the current status of Circles… is Activity App status shared between federated Circles instances? This is a feature I’d very much like, but cannot confirm if it is supported.

Hi @Cult, sending a friendly bump to check in on this again. I’m still confused about how Circles works to federate activity for those within the circle. I realize the app is under heavy development, but I’m looking to share activity between two federated instances… is there a Circles manual of some sort online?